Vai al contenuto

Creazione della Prima Form

Nel nuovo SDK Framework, la gestione delle finestre si basa sull'ereditarietà da classi fornite da SAPbouiCOM.Framework:

  • UserFormBase: classe base per creare finestre personalizzate (custom forms).
  • SystemFormBase: classe base per estendere finestre standard già esistenti in SAP B1 (es. Ordine di Vendita, Anagrafica Clienti).

Vediamo i due approcci possibili per creare una nuova finestra custom: 1. Con il visual designer di SAP Business One Studio (file .b1f). 2. Via codice C# puro (senza necessitare dell'estensione visual designer).


Approccio 1: Tramite File .b1f (SAP Business One Studio)

Se hai installato l'estensione SAP Business One Studio per Visual Studio:

  1. Fai click col tasto destro sul progetto → AggiungiNuovo elemento.
  2. Seleziona SAP B1 User Form (creerà un file con estensione .b1f, ad es. MyForm.b1f e il code-behind MyForm.b1f.cs).
  3. Puoi disegnare graficamente la finestra (pulsanti, campi testo, griglie) con il drag-and-drop.

Nel file C# associato (MyForm.b1f.cs), il framework utilizza l'attributo [FormAttribute]:

using System;
using SAPbouiCOM.Framework;

namespace MySAPAddon
{
    [FormAttribute("MySAPAddon.MyForm", "MyForm.b1f")]
    internal class MyForm : UserFormBase
    {
        // I controlli vengono legati automaticamente dal framework
        private SAPbouiCOM.Button Button0;
        private SAPbouiCOM.EditText EditText0;

        public MyForm()
        {
        }

        /// <summary>
        /// Inizializzazione personalizzata dei componenti
        /// </summary>
        public override void OnInitializeComponent()
        {
            this.Button0 = ((SAPbouiCOM.Button)(this.GetItem("Item_0").Specific));
            this.Button0.ClickAfter += new SAPbouiCOM._IButtonEvents_ClickAfterEventHandler(this.Button0_ClickAfter);
            this.EditText0 = ((SAPbouiCOM.EditText)(this.GetItem("Item_1").Specific));
        }

        public override void OnInitializeFormEvents()
        {
        }

        private void Button0_ClickAfter(object sboObject, SAPbouiCOM.SBOItemEventArg pVal)
        {
            Application.SBO_Application.MessageBox(
                $"Valore inserito: {this.EditText0.Value}", 
                1, "Ok", "", ""
            );
        }
    }
}

Approccio 2: Creazione Form via Codice C# Puro

Se non hai installato SAP Business One Studio o preferisci creare e gestire la finestra interamente da codice C# (molto comune e veloce per finestre snelle):

using System;
using SAPbouiCOM.Framework;

namespace MySAPAddon
{
    internal class SimpleCodeForm : UserFormBase
    {
        public SimpleCodeForm()
        {
        }

        /// <summary>
        /// Crea e apre la finestra programmatica
        /// </summary>
        public void ShowForm()
        {
            // Parametri di creazione della form
            SAPbouiCOM.FormCreationParams oParams = (SAPbouiCOM.FormCreationParams)
                Application.SBO_Application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams);

            oParams.UniqueID = "Frm_Simple_" + Guid.NewGuid().ToString().Substring(0, 8);
            oParams.FormType = "Frm_Simple";
            oParams.BorderStyle = SAPbouiCOM.BoFormBorderStyle.fbs_Fixed;

            // Creazione form
            SAPbouiCOM.Form oForm = Application.SBO_Application.Forms.AddEx(oParams);
            oForm.Title = "Finestra di Esempio";
            oForm.Left = 400;
            oForm.Top = 200;
            oForm.ClientWidth = 350;
            oForm.ClientHeight = 150;

            // 1. Aggiunta di un campo testo
            SAPbouiCOM.Item oItemText = oForm.Items.Add("txtTest", SAPbouiCOM.BoFormItemTypes.it_EDIT);
            oItemText.Left = 20;
            oItemText.Top = 30;
            oItemText.Width = 200;
            oItemText.Height = 19;

            // 2. Aggiunta di un pulsante
            SAPbouiCOM.Item oItemBtn = oForm.Items.Add("btnOk", SAPbouiCOM.BoFormItemTypes.it_BUTTON);
            oItemBtn.Left = 20;
            oItemBtn.Top = 70;
            oItemBtn.Width = 80;
            oItemBtn.Height = 22;

            SAPbouiCOM.Button oBtn = (SAPbouiCOM.Button)oItemBtn.Specific;
            oBtn.Caption = "Saluta";

            // Registrazione evento click del pulsante
            oBtn.ClickAfter += (sboObject, pVal) =>
            {
                SAPbouiCOM.EditText oTxt = (SAPbouiCOM.EditText)oForm.Items.Item("txtTest").Specific;
                Application.SBO_Application.StatusBar.SetText(
                    $"Ciao! Testo: {oTxt.Value}",
                    SAPbouiCOM.BoMessageTime.bmt_Short,
                    SAPbouiCOM.BoStatusBarMessageType.smt_Success
                );
            };

            // Rende visibile la finestra
            oForm.Visible = true;
        }
    }
}

3. Come Aprire la Form dal Click del Menu

Ora colleghiamo la form al gestore del menu in Menu.cs:

public void SBO_Application_MenuEvent(ref SAPbouiCOM.MenuEvent pVal, out bool BubbleEvent)
{
    BubbleEvent = true;

    try
    {
        if (pVal.BeforeAction == false && pVal.MenuUID == "MyAddonMenu_Item1")
        {
            // Se usi l'approccio 1 (.b1f):
            MyForm activeForm = new MyForm();
            activeForm.Show();

            // Se usi l'approccio 2 (codice puro):
            SimpleCodeForm form = new SimpleCodeForm();
            form.ShowForm();
        }
    }
    catch (Exception ex)
    {
        Application.SBO_Application.MessageBox(ex.ToString(), 1, "Ok", "", "");
    }
}

Conclusioni e Prossimi Passi

Ora possiedi la struttura completa e funzionante per un moderno add-on C# con SAP Business One SDK Framework:

  • Connessione e lifecycle automatici con SAPbouiCOM.Framework.Application.
  • Voci di menu registrate correttamente.
  • Form create ed eseguite nativamente.

Per proseguire con i dettagli della manipolazione grafica avanzata, consulta la sezione UI API, oppure approfondisci la gestione transazionale e la DI API nei Fondamentali.