DI API vs UI API¶
Sono due API completamente diverse, con oggetti diversi, per due scopi diversi. Confonderle (o non sapere quale serve) è una delle prime fonti di blocco per chi inizia.
UI API — manipolare l'interfaccia¶
Quello di cui si parla nella sezione UI API: Form, Item, Matrix, DataSource. Serve per:
- Aggiungere campi/bottoni custom su form esistenti.
- Reagire a click, cambi di modalità, eventi dell'utente.
- Creare form completamente nuove.
Namespace: SAPbouiCOM.
DI API — manipolare i dati/documenti a livello business¶
Serve per creare, leggere, aggiornare documenti (Ordini, Fatture, Anagrafiche...) senza passare dall'interfaccia utente — utile per integrazioni, automazioni, import dati, validazioni server-side.
Namespace: SAPbobsCOM.
using SAPbobsCOM;
Company oCompany = new Company();
// ... impostazione parametri di connessione ...
Documents oOrder = (Documents)oCompany.GetBusinessObject(BoObjectTypes.oOrders);
oOrder.CardCode = "C0001"; // Codice cliente
oOrder.DocDate = DateTime.Now;
oOrder.Lines.ItemCode = "A0001";
oOrder.Lines.Quantity = 10;
int result = oOrder.Add();
if (result != 0)
{
string errMsg = oCompany.GetLastErrorDescription();
// gestione errore — vedi sezione dedicata sotto
}
Quando servono entrambe insieme¶
Caso tipico: un bottone custom sulla UI (UI API) che, al click, crea un documento (DI API). In questo scenario si usano due connessioni diverse ma collegate: la UI API gira sull'istanza SAP già aperta dall'utente, mentre la DI API va instanziata a parte (anche se spesso si riusa lo stesso Company sottostante tramite SBO_Application.Company.GetDIVersion(...) o pattern simili, a seconda della versione SDK).
Riepilogo¶
| UI API | DI API | |
|---|---|---|
| Namespace | SAPbouiCOM |
SAPbobsCOM |
| Oggetto principale | Form, Item |
Company, Documents, BusinessPartners... |
| Scopo | Interagire con lo schermo | Creare/leggere/modificare dati |
| Serve l'utente davanti allo schermo? | Sì (di solito) | No, può girare in background/batch |