Vai al contenuto

Risorse XML di Configurazione

In questa guida vedremo come configurare e utilizzare i file XML per la creazione automatica di menu, tabelle utente (UDT), campi utente (UDF), oggetti definiti dall'utente (UDO) e query cross-database (HANA/SQL Server) tramite il RibesSAPSDKFramework.

Come aggiungere file di risorse in Visual Studio

Per utilizzare i file XML all'interno del progetto dell'Add-on, segui questi passaggi:

  1. Fai clic con il tasto destro sul progetto nel Solution ExplorerAddNew ItemResource File
  2. Apri il file appena creato e, in alto a sinistra, cambia il tipo da "Strings" a "File"
  3. Rinomina il file di risorse in Assets (o un altro nome appropriato)
  4. Crea una cartella nel tuo progetto dedicata ai file XML (es. Resources)
  5. Posiziona i tuoi file XML in questa cartella
  6. Trascina i file XML dalla cartella direttamente all'interno della finestra dell'editor del Resource File appena creato.

Nota

Assicurati che i file XML vengano inclusi nell'output della build se vengono caricati a runtime dal file system (es. impostando Copy to Output Directory a Copy if newer).


XML Menu Configuration

Il framework permette di creare le voci di menu in SAP Business One definendo la struttura all'interno di un file XML (gestito dalla classe GenericBuilder).

Albero dei Tag

<Application> — Elemento Root
<Menus> — Contenitore principale per le definizioni del menu
<menu> — Definisce un menu a comparsa (popup / cartella sottomenu)
  • Attributi:
    • id: Identificativo univoco del menu.
    • description: Testo / etichetta visualizzata.
    • parent: ID del menu padre in SAP (es. 43520 per il menu Moduli, o l'id di un altro <menu>).
    • position: Posizione ordinale (es. -1 per accodare alla fine).
    • image: Percorso del file immagine icona (opzionale).
  • Sotto-elementi supportati: può contenere ulteriori tag <menu>, <item> o <separator>.
<item> — Voce di menu cliccabile finale (foglia)
  • Attributi:
    • id: Identificativo univoco dell'azione di menu.
    • description: Etichetta cliccabile a video.
    • parent: ID del menu contenitore.
    • position: Posizione ordinale.
    • image: Icona (opzionale).
    • loadclass: Nome completo della classe C# da istanziare (es. Namespace.Class).
    • callback: Nome del metodo C# da invocare al clic.
<separator> — Linea di separazione grafica
  • Attributi: id, parent, position.

Gestione degli Eventi

Gli attributi loadclass e callback nel tag <item> consentono di collegare automaticamente la voce di menu a un metodo C#. loadclass è il nome completo della classe e callback è il nome del metodo da eseguire al clic.

Esempio (Menu)

<?xml version="1.0" encoding="utf-8"?>
<Application>
    <Menus>
        <menu id="RS_DDN_FLD" description="Ribes Solutions" parent="43525">
            <menu id="RS_CNF_FLD" description="Configurazioni">
                <item id="RS_INIT" description="Inizializzazione" loadclass="MyAddon.MyClass" callback="RunInitializations" />
            </menu>
        </menu>
    </Menus>
</Application>

XML User Defined (UDT/UDF/UDO)

La creazione delle strutture dati personalizzate (Tabelle, Campi e Oggetti) viene gestita dalla classe UserDefinedBuilder che interpreta un file XML specifico.

Albero dei Tag

<UDS> — Elemento Root
<UDTS> — Contenitore per le tabelle utente (UDT) e campi utente (UDF)
<UDT> — Definisce una tabella utente o referenzia una tabella standard
  • <Name>: Nome della tabella nel database.
    • Tabelle Utente Custom: Iniziano con @ (es. @RS_INFO, @RS_MODULES). Vengono create automaticamente se non presenti.
    • Tabelle Standard di SAP: Senza @ (es. OITM per Anagrafica Articoli Form 150, ORDR per Ordini, OCRD per Business Partner). Il framework riconosce che è una tabella di sistema e non tenta di ricrearla, procedendo ad aggiungere gli UDF su di essa.
  • <Description>: Descrizione testuale della tabella.
  • <Type>: Tipo di tabella SAP (No_Object, MasterData, Document, DocumentLines, MasterDataLines, No_Object_Auto).
<UDFS> — Contenitore per i campi definiti dall'utente associati alla tabella
<UDF> — Definisce un singolo campo utente
  • <Name>: Nome tecnico del campo (AliasID).
    • Max 18 caratteri, senza spazi o caratteri speciali.
    • Non inserire il prefisso U_: SAP e il framework lo aggiungono automaticamente nel DB (es. RS_ContRame diventerà U_RS_ContRame).
  • <Description>: Descrizione / etichetta visibile a video (max 30 caratteri, può contenere spazi).
  • <Type>: Tipo di dato del campo:
    • Alpha: Testo alfanumerico (richiede <Size>).
    • Numeric: Numero intero (richiede <EditSize>).
    • Float: Numero decimale a virgola mobile.
    • Date: Data.
    • Memo: Testo lungo senza limite prefissato.
  • <SubType>: Sottotipo del campo:
    • None, Percentage, Price, Quantity, Rate, Sum, Time, Address, Image, Link, Phone.
    • Esempio Percentuale: <Type>Float</Type> con <SubType>Percentage</SubType>.
  • <EditSize>: Dimensione per l'input in interfaccia utente.
  • <Size>: Dimensione effettiva della colonna nel database (obbligatoria per Alpha).
  • <Obbligatorio>: Y se il campo è obbligatorio, N se facoltativo.
  • <DefaultValue>: Valore predefinito.
  • <LinkedTable>: (Opzionale) Nome tabella collegata per creare una chiave esterna.
  • <LinkedObject>: (Opzionale) Nome dell'UDO collegato.
  • <LinkedSystemObject>: (Opzionale) Codice numerico dell'oggetto di sistema SAP collegato.
<ValidValues> — Elenco valori validi per menu a tendina (solo Alpha/Numeric)
<ValidValue> — Singola opzione del menu a tendina
  • <Code>: Valore memorizzato a database (es. Y, N, 01).
  • <Description> (o <Name>): Testo descrittivo mostrato all'utente nel dropdown (es. , No).
<UDOS> — Contenitore per gli oggetti definiti dall'utente (UDO)
<UDO> — Definisce un singolo UDO
  • Definizione e Tabelle:
    • <ObjectId>: Identificativo univoco dell'oggetto.
    • <Description>: Descrizione dell'UDO.
    • <TableName>: Tabella master/testata (senza prefisso @).
    • <TableNameChild>: Tabella righe/figlia (opzionale).
    • <Type>: Tipo UDO (boud_Document o boud_MasterData).
    • <LogTable>: Tabella di log per lo storico modifiche (opzionale).
    • <FormSRF>: Formato SRF della form grafica associata (opzionale).
  • Capacità e Permessi:
    • <CanFind>, <CanCancel>, <CanClose>, <CanDelete>, <CanLog>, <CanYearTransfer>, <ManageSeries>, <OverwriteDllfile>, <CanDefForm>, <RebuildEnhancedForm>, <MenuItem>.
  • Configurazione Voci di Menu:
    • <FatherMenuID>: ID menu padre di SAP (es. 1024 o 43520).
    • <MenuUID>: Identificativo univoco della voce generata.
    • <MenuCaption>: Testo del menu.
    • <Position>: Posizione ordinale.
  • Liste ed Elementi di Ricerca:
    • <find>, <header>, <rows> contenenti sotto-elementi testuali per definire le colonne di ricerca e griglia.
  • Definizione Diretta XML:
    • <xml>: (Opzionale) Stringa XML in Base64 per importazione diretta tramite DI API.

Ciclo di Vita dei Campi Utente: Versione Assembly e Riavvio del Client SAP

Quando si creano o modificano campi utente (UDF) e tabelle (UDT), occorre prestare particolare attenzione a due aspetti fondamentali del framework e del client di SAP:

  1. Aggiornamento Versione Assembly (RunInitialization):

    • Il framework memorizza la versione dell'Add-on nella tabella database @RS_INFO.
    • All'avvio dell'Add-on, il framework esegue creationTableFromXML() esclusivamente se la versione dell'Add-on è diversa da quella presente a database (o se è la prima installazione).
    • Quando aggiungi un nuovo campo o una nuova tabella all'XML, è indispensabile incrementare la versione dell'Add-on nel file Properties/AssemblyInfo.cs (es. passando da 1.0.0.0 a 1.0.0.1).

      In caso contrario, l'inizializzazione verrà saltata silenziosamente e i nuovi campi non saranno creati.

  2. Riavvio del Client di SAP Business One (Cache dei Metadati): Il client grafico di SAP Business One memorizza in cache locale la struttura dei campi utente caricata all'avvio dell'applicazione.

    Anche se l'Add-on crea con successo l'UDF a database tramite la DI API, il campo non sarà visibile nella barra laterale (Ctrl + Shift + U) o nei Form finché non si riavvia il client di SAP Business One.

  3. Regole sui Nomi:

    • Nome Tecnico (<Name>): Massimo 18 caratteri, nessuno spazio o carattere speciale (es. RS_FieldName).
    • Modifica tipo di campi già esistenti: SAP B1 non consente di modificare il tipo di dato di un UDF già creato a database. Se è necessario cambiarne il tipo in fase di sviluppo, occorre prima rimuoverlo manualmente da SAP (Strumenti → Strumenti di personalizzazione → Tabelle definite dall'utente - Gestione) e poi rilanciare l'Add-on con la nuova definizione XML.

Esempio (UDT e UDF)

<?xml version="1.0" encoding="utf-8"?>
<UDS>
    <UDTS>
        <UDT>
            <Name>@RS_MODULES</Name>
            <Description>RibesSolutions Modules</Description>
            <Type>No_Object</Type>
            <UDFS>
                <UDF>
                    <Name>Enabled</Name>
                    <Description>Abilitato</Description>
                    <Type>Alpha</Type>
                    <SubType>None</SubType>
                    <EditSize>1</EditSize>
                    <Size>1</Size>
                    <ValidValues>
                        <ValidValue>
                            <Code>Y</Code>
                            <Description>Si</Description>
                        </ValidValue>
                        <ValidValue>
                            <Code>N</Code>
                            <Description>No</Description>
                        </ValidValue>
                    </ValidValues>
                    <DefaultValue>Y</DefaultValue>
                </UDF>
            </UDFS>
        </UDT>
    </UDTS>
</UDS>

XML Queries (dual-database)

Per supportare contemporaneamente ambienti SAP HANA e Microsoft SQL Server, le query SQL possono essere definite in un file XML centralizzato, in modo che l'Add-on esegua automaticamente la sintassi corretta a seconda del database connesso.

Albero dei Tag

<Queries> — Elemento Root
<Text> — Definisce una singola query SQL
  • Attributo: name (Identificativo univoco della query da richiamare tramite QueryTranslations.Value("nomeQuery")).
  • Sotto-elementi:
    • <HANA>: Contiene la sintassi SQL per SAP HANA (racchiusa in <![CDATA[ ... ]]>).
    • <MSSQL>: Contiene la sintassi SQL per Microsoft SQL Server (racchiusa in <![CDATA[ ... ]]>).

Uso dei parametri

Le query possono contenere segnaposto come {0}, {1} ecc. Questi verranno sostituiti a runtime utilizzando un formato stringa String.Format() in C#.

Esempio (Queries)

<?xml version="1.0" encoding="utf-8"?>
<Queries>
    <Text name="userTableExists">
        <HANA><![CDATA[select count(*) from "OUTB" where "TableName" = '{0}']]></HANA>
        <MSSQL><![CDATA[select count(*) from OUTB where TableName = '{0}']]></MSSQL>
    </Text>

    <Text name="InsertADDONInfo">
        <HANA><![CDATA[INSERT INTO "@RS_INFO" ("Code","Name","U_Data") VALUES('{0}','{1}','{2}')]]></HANA>
        <MSSQL><![CDATA[INSERT INTO [@RS_INFO] ([Code],[Name],[U_Data]) VALUES('{0}','{1}','{2}')]]></MSSQL>
    </Text>
</Queries>