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:
- Fai click col tasto destro sul progetto → Aggiungi → Nuovo elemento.
- Seleziona SAP B1 User Form (creerà un file con estensione
.b1f, ad es.MyForm.b1fe il code-behindMyForm.b1f.cs). - 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.