SAPManager¶
Il SAPManager funge da wrapper singleton per mantenere lo stato dell'applicazione e le connessioni ai vari layer di SAP Business One.
Accesso al Singleton¶
Tutti i moduli dell'add-on vi accedono tramite:
Proprietà Principali¶
| Proprietà | Descrizione |
|---|---|
SapApplication |
Riferimento a SAPbouiCOM.Application (UI API). Utilizzato per interfacce, menu e messaggi di stato. |
SapDICompany |
Riferimento a SAPbobsCOM.Company (DI API). Utilizzato per creare/modificare oggetti di business. |
SAPServiceLayer |
Client per il Service Layer (tramite B1SLayer.SLConnection). |
ServiceLayerURI, RoutineSyncURI |
Endpoint URI del Service Layer e di servizi aggiuntivi. |
SAPDB |
Fornisce il layer di accesso ai dati (implementa ISapDbProvider). |
SAPAdminInfo |
Contiene le informazioni di amministrazione dell'azienda corrente. |
Inoltre, mantiene in cache impostazioni locali vitali estratte tramite RilevaDatiAzienda():
- separatoreMigliaia e separatoreDecimali
- currency (valuta di sistema)
- importiDec e priceDec (precisione dei decimali per totali e prezzi)
Metodi Principali¶
Init()¶
Questo metodo si occupa di richiedere e memorizzare (in una tabella UDT cifrata) le credenziali per il database, il Service Layer e altri servizi come RoutineSync se non sono già configurati.
InitSAPDBExt()¶
Inizializza il layer dati usando SapDbFactory. Configura in modo automatico il meccanismo di fallback (es. passa a ODBC in caso di problemi sul Service Layer) informando l'utente tramite messaggi nella UI SAP.
RilevaDatiAzienda()¶
Legge la tabella nativa OADM (Dettagli Azienda) per estrarre separatori, decimali e valuta di sistema per evitare query ripetitive durante l'uso dell'add-on.
Conversione Numerica¶
ConvertDoubleToSAPString(double? n): Converte un numero.NETnel formato testuale atteso dall'interfaccia SAP (utilizzando il separatore decimale di SAPAdminInfo).ConvertStringToDouble(string value): Converte in modo sicuro una stringa prelevata da un campo SAP in undouble.NET.
Layer Dati¶
Il framework astrae le query dirette verso SAP tramite una factory e diversi provider (ad esempio FallbackDbProvider, HanaDbProvider, MssqlDbProvider). Il SAPManager gestisce internamente la factory e ci espone la connessione attiva nella proprietà SAPDB.
Esempio di Utilizzo¶
// Esempio in un gestore eventi
public void OnButtonClick(string formUID)
{
// Mandare un messaggio alla barra di stato
SAPManager.Instance.SapApplication.SetStatusBarMessage("Elaborazione in corso...", SAPbouiCOM.BoMessageTime.bmt_Short, false);
// Recuperare un oggetto dal DI API
SAPbobsCOM.BusinessPartners bp = (SAPbobsCOM.BusinessPartners)SAPManager.Instance.SapDICompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners);
// Leggere il separatore decimale e convertire un valore
string sapValue = SAPManager.Instance.ConvertDoubleToSAPString(1500.50);
}