IB Entity

Updated at January 22nd, 2026

1. Introduzione

IB Entity è una libreria framework per Business Central che consente di definire entità di integrazione per la serializzazione e deserializzazione di dati in formato JSON o XML. L’app permette di mappare tabelle, campi e relazioni di Business Central verso strutture dati esterne, applicando regole e funzioni di trasformazione. Le pagine dell’app supportano la configurazione, il test e l’import/export delle strutture di entità.

1.1 Destinatari

Il manuale è rivolto a consulenti applicativi, key user e sviluppatori funzionali che conoscono la struttura dati di Business Central (tabelle, campi, chiavi e relazioni).

1.3 Convenzioni e termini

Nel documento vengono utilizzati i seguenti termini:

Termine

Significato

Area

Raggruppamento logico di entità per dominio funzionale.

Entity (Entità)

Modello di integrazione associato a una tabella di Business Central.

Property (Proprietà)

Elemento serializzato (campo o record correlato) definito sull’entità.

Relation (Relazione)

Regola di filtro che collega record padre e record correlati.

Payload

Contenuto JSON o XML usato come input/output per serializzazione/deserializzazione.

2. Concetti di base

2.1 Area

Un’Area raggruppa le entità per dominio funzionale. I campi principali sono Code e Description. Entity Count è un contatore calcolato delle entità associate all’Area.

2.2 Entity

Un’Entità rappresenta un modello di integrazione legato a una tabella di Business Central. I campi principali sono Code, Area, Table No., Table Name/Caption e Serialization Type (JSON o XML).

Opzioni di comportamento (deserializzazione e gestione record):

Opzione

Descrizione

Skip OnInsert Trigger

Evita l’esecuzione dei trigger OnInsert durante la deserializzazione.

Skip OnModify Trigger

Evita l’esecuzione dei trigger OnModify durante la deserializzazione.

Delay until Priority

Posticipa l’inserimento del record fino alla priorità indicata (utile quando alcune proprietà devono essere valutate prima dell’inserimento).

Enable Delete

Consente l’eliminazione del record in deserializzazione quando previsto dalla logica di integrazione.

Disable Insert

Impedisce la creazione di nuovi record durante la deserializzazione.

Disable Modify

Impedisce la modifica di record esistenti durante la deserializzazione.

Metadati XML (solo se Serialization Type = XML):

Campo

Descrizione

XML Element Name / Namespace

Nome elemento e namespace per la rappresentazione dell’entità.

XML EntitySet Name / Namespace

Nome e namespace del contenitore (EntitySet) per collezioni di entità.

2.3 Entity Property

Una Property definisce una proprietà dell’entità: può essere un singolo campo della tabella oppure un record correlato (serializzato come oggetto o array). Le proprietà sono elaborate secondo l’ordine di Priority (tipicamente multipli di 100).

Campi principali:

Campo

Descrizione

Priority

Ordine di elaborazione.

Source Type

Tipo di sorgente: Field, RecordAsArray, RecordAsObject, InjectValues.

Source No.

Numero campo (se Field) oppure tabella correlata (se RecordAs* / InjectValues).

Source Entity Code

Codice dell’entità di dettaglio usata per serializzare/deserializzare il record correlato.

Source Name

Nome/descrizione della sorgente (di supporto).

Serialized Name

Nome del campo serializzato nel payload (modificabile).

Function

Funzione di trasformazione applicata alla proprietà (opzionale).

Campi avanzati e controlli (se presenti): skipValidate, forceModify, RegularExpression, IsPartOfPrimaryKey, Namespace/isAttribute (solo XML).

2.4 Entity Relation

Le Relazioni definiscono i filtri tra una proprietà di tipo record correlato e la tabella collegata. Ogni relazione specifica tabella e campo correlati e la modalità con cui calcolare il filtro.

Relation Type

Significato

CONST

Filtro con valore costante.

FIELD

Filtro usando il valore di un campo del record padre.

FILTER

Filtro tramite espressione in sintassi Business Central.

2.5 Parameter

I Parametri gestiscono coppie Nome/Valore per funzioni e operazioni di serializzazione/deserializzazione. Il campo Type può essere Input, Output o Protected; Classification aiuta a organizzare i parametri.

2.6 Transformation

Le regole di Transformation (Model Code, Transformation Type, From, To) sono usate dalla funzione TRANSFORMATION per convertire valori da un dominio all’altro (ad esempio codici esterni/interni).

2.7 Tipi di Source Type

Field: Mappa un singolo campo della tabella.

RecordAsArray: Serializza un set di record collegati come array.

RecordAsObject: Serializza un singolo record collegato come oggetto.

InjectValues: Serializza un record collegato e incorpora le sue proprietà nell’oggetto padre, usando Serialized Name come prefisso.


 

 

3. Pagine e funzioni

Le pagine dell’app IB Entity consentono di configurare le entità, gestire proprietà e relazioni e testare i payload. I nomi delle pagine possono variare leggermente in base alla localizzazione; in questo manuale sono riportate le denominazioni presenti nella bozza.

3.1 Area List

Elenco delle aree (Area) con Code, Description ed Entity Count.

Campi principali:

  • Code
  • Description
  • Entity Count (calcolato)

Azioni:

Entity: apre la lista delle entità filtrata per l’area selezionata.

3.2 Entities (Entity List)

Elenco delle entità configurate. Visualizza Area, Code, Table No., Table Name e Serialization Type.

Campi principali:

  • Area
  • Code
  • Table No.
  • Table Name
  • Serialization Type (JSON/XML)

Azioni:

  • Create entity from table: seleziona una tabella BC, crea l’entità e aggiunge automaticamente le proprietà per tutti i campi della tabella.
  • Export: esporta la struttura in Entities.json (entità, proprietà, relazioni e parametri).
  • Import: importa una struttura da file JSON nel formato generato dall’Export.

3.3 Entity Card

Scheda di dettaglio dell’entità. Consente di impostare tabella, tipo di serializzazione e opzioni di comportamento, oltre a gestire le proprietà in sottopagina.

Campi principali:

  • General: Code, Area, Table No., Table Name/Caption, Record Count.
  • Serialization Type: JSON o XML.
  • Enabled Actions: Enable Delete, Disable Insert, Disable Modify.
  • Deserializzazione: Skip OnInsert Trigger, Skip OnModify Trigger, Delay until Priority.
  • XML Group (solo XML): Element Name/Namespace, EntitySet Name/Namespace.

Azioni:

  • Validate: verifica un payload di input e mostra il risultato.
  • Serialize: serializza un record selezionato della tabella in JSON/XML.
  • Simple Serialize (solo JSON): serializza il record ignorando le proprietà configurate.
  • Get: recupera un record usando i campi PK configurati nelle proprietà (IsPartOfPrimaryKey).
  • Deserialize: crea/modifica un record partendo da un payload di input.
  • Add Fields as properties: aggiunge proprietà a partire da campi selezionati.

3.4 Entity Properties (ListPart)

Sottopagina della Entity Card che mostra l’elenco delle proprietà e permette di configurare mapping, funzioni, relazioni e parametri.

Campi principali:

  • Priority
  • Source Type
  • Source No.
  • Source Entity Code
  • Serialized Name
  • Function
  • IsPartOfPrimaryKey
  • skipValidate / forceModify / RegularExpression

Azioni:

  • Relation: configura i filtri di relazione (solo per RecordAsArray/Object/InjectValues).
  • Function Parameters: gestisce i parametri della funzione selezionata.

3.5 Entity Relations

Pagina per gestire i filtri tra la tabella principale e la tabella collegata per una proprietà di tipo record correlato.

Campi principali:

  • Related Table No.
  • Related Field No.
  • Relation Type (CONST/FIELD/FILTER)
  • Relation Value

3.6 Transformation List

Gestisce le regole di trasformazione usate dalla funzione TRANSFORMATION.

Campi principali:

  • Model Code
  • Transformation Type
  • From
  • To

3.7 Additional Info

Pagina di supporto usata in tre modalità: LIST (parametri Nome/Valore), INPUT (incolla payload JSON/XML), WEB (visualizza risultati formattati).

Campi principali:

  • LIST: Name, Value, Type, Classification
  • INPUT: testo libero
  • WEB: output formattato


 

 

4. Procedure operative

Flusso consigliato di configurazione:

Creare un’Area per raggruppare le entità.

Dalla pagina 9WAYS Entities, usare Create entity from table oppure creare una nuova entità manualmente.

Impostare Table No. e Serialization Type (JSON/XML).

Aggiungere proprietà dai campi della tabella o creare proprietà manuali con Priority e Source Type.

Per RecordAsArray/Object/InjectValues: impostare Source No., Source Entity Code e definire le relazioni.

Se necessario, applicare una Function alla proprietà e compilare i parametri in Function Parameters.

Configurare eventuali regole in Transformation List.

Eseguire Validate, Serialize o Deserialize per testare il mapping.

4.1 Creare un’Area

1) Aprire Area List. 2) Creare un nuovo record e compilare Code e Description. 3) Salvare.

4.2 Creare un’Entità da tabella

1) Aprire 9WAYS Entities. 2) Selezionare Create entity from table. 3) Scegliere la tabella da mappare. 4) Verificare che l’entità sia stata creata e che le proprietà (Field) siano state generate per i campi della tabella.

Suggerimento: dopo la generazione automatica, rimuovere le proprietà non necessarie e rinominare Serialized Name in modo coerente con il contratto esterno (es. camelCase).

4.3 Aggiungere proprietà e configurare le priorità

Le proprietà vengono elaborate in ordine crescente di Priority. Usare valori a step (es. 100, 200, 300) per lasciare spazio a inserimenti futuri.

Per mappare un campo:

  1. Impostare Source Type = Field.
  2. Selezionare Source No. (campo).
  3. Verificare Serialized Name e, se necessario, modificarlo.
  4. Se il campo contribuisce alla chiave primaria, attivare IsPartOfPrimaryKey.
  5. Per mappare un record correlato:
  6. Impostare Source Type = RecordAsArray (collezione) o RecordAsObject (singolo) oppure InjectValues (incorporazione).
  7. Impostare Source No. con la tabella correlata.
  8. Impostare Source Entity Code con l’entità di dettaglio.
  9. Aprire Relation e definire i filtri di collegamento (CONST/FIELD/FILTER).

4.4 Definire relazioni

Le relazioni determinano quali record della tabella correlata vengono inclusi/ricercati rispetto al record padre. Usare FIELD quando il valore del filtro proviene dal record padre (es. collegamento per chiave), CONST per valori fissi e FILTER per espressioni più complesse.

Esempio (concettuale): collegare righe documento a testata usando FIELD sul numero documento del record padre.

4.5 Usare funzioni e parametri

Una Function consente di trasformare il valore in output oppure di interpretare l’input in deserializzazione. Selezionare la funzione nella proprietà e compilare i parametri in Function Parameters.

Esempi d’uso tipici:

  • FORMAT: formattare date e numeri secondo uno standard concordato.
  • FIXED: impostare un valore costante nel payload.
  • TRANSFORMATION: convertire un valore secondo una tabella di mapping (Transformation List).
  • REGEX: validare un valore rispetto a un’espressione regolare.

4.6 Testare (Validate / Serialize / Get / Deserialize)

Le azioni di test si trovano nella Entity Card e consentono di verificare rapidamente la correttezza del mapping.

Azione

Quando usarla

Validate

Incolla un payload di input e verifica che sia valido e coerente con l’entità.

Serialize

Seleziona un record della tabella e genera il payload JSON/XML secondo le proprietà configurate.

Simple Serialize

Solo JSON: serializza il record ignorando le proprietà configurate (utile per confronto).

Get

Recupera un record usando i campi marcati IsPartOfPrimaryKey.

Deserialize

Crea o modifica un record partendo da un payload di input.

Esempio di payload JSON (indicativo):

{
  "no": "C10000",
  "name": "Contoso S.p.A."
}

Nota: per l’azione Get è necessario che le proprietà che compongono la chiave primaria della tabella siano marcate con IsPartOfPrimaryKey.

4.7 Import / Export (Entities.json)

L’Export genera un file Entities.json che include entità, proprietà, relazioni e parametri. L’Import permette di ricreare la configurazione in un altro ambiente (es. da DEV a TEST/PROD).

Buone pratiche:

Versionare i file di export in un repository o in una libreria documentale.

Eseguire l’import in un ambiente di test e validare con Serialize/Deserialize prima di usarlo in produzione.

In caso di differenze di ID o numerazioni tabella tra versioni, verificare i riferimenti alle tabelle e ai campi dopo l’import.


 

 

5. Funzioni disponibili

Le funzioni disponibili dipendono dal tipo di serializzazione (JSON o XML). Di seguito l’elenco riportato nella bozza con i parametri principali.

5.1 Funzioni per proprietà (JSON)

Funzione

Descrizione

Parametri

FORMAT

Applica un formato.

FormatProperty

FIXED

Imposta un valore fisso.

Value

NEWLINE

Inserisce un a capo fisso.

-

TRANSFORMATION

Applica una regola di trasformazione.

MODEL

ADDINDEX

Aggiunge un indice incrementale alle righe.

STEP; NAME

JOINSTRING

Unisce proprietà in una stringa.

SEPARATOR; PROPERTIES

DT2DATE

Converte DateTime in Date.

FormatProperty; CultureName

GROUP

Raggruppa un array.

BY; SUM; COUNT; SOURCE

UNION

Unisce array sottostanti.

TARGETS

SORT

Ordina un array.

ON; TARGET

B64

Converte in base64.

-

IIF

Restituisce un valore in base a una condizione.

CONDITION; TRUE; FALSE

REGEX

Verifica una espressione regolare.

EXPRESSION; PROPERTY

INCORPORATE

Incorpora un array figlio nel livello superiore.

PROPERTY

TRIM

Elimina spazi iniziali/finali.

-

SUBSTRING

Estrae una sottostringa.

startindex; count; IGNORELENGTH

PADLEFT

Padding a sinistra.

LUNGHEZZA; RIEMPIMENTO

CALCULATE

Calcolo tramite formula.

Formula

AND

AND logico su proprietà booleane.

Properties

GETURL

Genera una URL.

PAGEID

GETINPUTPARAM

Recupera un parametro di input.

name

5.2 Funzioni per proprietà (XML)

Funzione

Descrizione

Parametri

FORMAT

Applica un formato.

FormatProperty

FIXED

Imposta un valore fisso.

Value

TRANSFORMATION

Applica una regola di trasformazione.

MODEL

ADDINDEX

Aggiunge un indice incrementale alle righe.

STEP; NAME

DT2DATE

Converte DateTime in Date.

FormatProperty; CultureName


 

 

6. Note operative e risoluzione problemi

6.1 Controlli importanti

Source Entity Code è obbligatorio per proprietà di tipo RecordAsArray, RecordAsObject e InjectValues.

IsPartOfPrimaryKey viene letto dalla tabella ed è usato dall’azione Get per trovare il record.

Delay until Priority permette di posticipare l’inserimento del record fino alla priorità indicata.

Skip OnInsert/OnModify evita l’esecuzione dei trigger durante la deserializzazione.

RegularExpression abilita una validazione aggiuntiva sul valore del campo.

6.2 Problemi comuni

Messaggio / Sintomo

Causa e azione correttiva

Invalid function

La funzione scelta non è disponibile per il tipo di serializzazione. Verificare Serialization Type e l’elenco funzioni supportate.

Deserializzazione fallita

Verificare che JSON/XML sia valido e che i campi PK necessari siano valorizzati.

Relazioni non valide

Controllare Related Table/Field e Relation Type; verificare che la relazione identifichi correttamente i record correlati.

Errore di trasformazione

Verificare che il parametro MODEL punti a un Model Code esistente in Transformation List e che i valori From/To siano coerenti.

6.3 Checklist prima del go-live

Eseguire Export della configurazione e conservarla come baseline/versione.

Eseguire test di Serialize e Deserialize su casi reali (record con campi obbligatori, record con record correlati).

Verificare le opzioni Skip OnInsert/OnModify e Delay until Priority in base alle logiche di business.

Validare le regole TRANSFORMATION e i casi limite (valori non mappati).