La guida illustra la creazione e gestione dello schema dati: Input Context, variabili e campi, relative sorgenti, trasformazioni, fallback, paginazione, validazione, importazione/esportazione XML e integrazione con il pannello Dati.
8 Esecuzione e campi obbligatori
10 Salvare, importare, riaprire
1 Tre tipi di valore
Lo schema ha tre sezioni. Il punto fondamentale è chi produce il valore, quando viene
risolto e se si può usare sul layout:
| Sezione | Chi produce il valore | Quando | Bindabile sul layout? |
|---|---|---|---|
| Input Context | Il chiamante, a runtime (<Param>) |
Già noto all'avvio | Sì |
| Variabili | Lo schema (SQL, espressione, lookup, HTTP, statico) | Per prime | No |
| Campi | Lo schema (stesse Source delle variabili) | Dopo le variabili | Sì |
Ogni nome si usa come token {nome} nelle query, nelle espressioni e nei testi.
Conseguenze pratiche:
- una variabile può usare solo input e altre variabili, mai i campi (si risolve prima);
- una variabile serve per i valori intermedi: un prefisso, il risultato di una query
riusato da più campi. Non compare nel pannello Dati e non arriva al layout; - tutto quello che deve finire stampato deve essere un input o un campo.
2 Aprire l'editor
Ci sono tre strade:
- menu Dati › Crea / modifica schema dati (LabelDataMapping);
- tab Dati › pulsante Modifica schema (compare quando uno schema è già caricato);
-
Ctrl+K› Crea / modifica schema dati.
Il dialog si chiama Crea schema dati se non c'è ancora uno schema, Schema dati
altrimenti. A sinistra ci sono le sezioni, al centro l'editor, a destra l'Anteprima XML
che si aggiorna mentre scrivi, con lo stato di validazione in cima.
Se apri l'editor senza uno schema caricato, il tool prepara una bozza ricavata dal
layout corrente: i 6 parametri standard più un campo per ogni bind già presente. La bozza
diventa lo schema vero alla prima modifica. Il pulsante Nuovo in basso rigenera
questa bozza, quindi non crea uno schema vuoto.
3 Generale
Gli attributi della radice <LabelDataMapping>: customerName (es. ACME), layoutId
(diventa anche il nome del file scaricato) e version.
4 Input Context
Un parametro per riga. Le colonne, da sinistra:
| Colonna | Significato |
|---|---|
| nome | Il nome del token ({ItemCode}) |
| tipo |
string, int, long, decimal, bool, datetime
|
| req | Obbligatorio: se il chiamante non lo passa, la pipeline fallisce |
| default | Valore usato se manca. Nel tool è anche il valore d'anteprima mostrato nel canvas |
| pag | Il parametro è un array: il motore genera una pagina per elemento |
| pageItem | (solo con pag) il nome dello scalare che, su ogni pagina, contiene l'elemento corrente |
- Aggiungi parametro aggiunge una riga, il cestino la elimina.
- I sei parametri standard (
ResourceId,ItemCode,PhaseCode,OrderCode,UserId
obbligatorio,CustomerName) sono sempre presenti e vengono reintegrati se importi uno
schema che non li ha. Puoi comunque modificarli. - Nell'esempio abbiamo aggiunto
Lottoe dato un default aItemCode,OrderCodeeCustomerName, così l'anteprima mostra valori realistici.
5 Variabili
+ Variabile crea NuovaVariabile con Source statica. L'editor è lo stesso dei campi
(vedi sotto). Nell'esempio Stabilimento legge il codice impianto della risorsa:
SELECT PlantCode FROM Resources WHERE Id = {ResourceId}
con fallback BG01. Due campi la usano (matricola e reparto), ma non viene mai
stampata direttamente.
6 Campi
+ Campo crea NuovoCampo. Selezionando un campo nella lista a sinistra si apre il
dettaglio: name, type e la Source, scelta tra cinque tipi.
| Source | Cosa fa | Controlli |
|---|---|---|
| static | Restituisce un testo fisso | Valore statico |
| expression | Compone testo e token | Template espressione, es. {Prefisso}-{OrderCode}-{now:yyyyMMdd}
|
| lookup | Traduce una chiave in un valore |
key (es. {Stabilimento}), defaultValue, coppie Entry key/value |
| sql | Esegue una query |
connection (controller, om, sync), mode (scalar, vector, rows), Query |
| http | Chiama un servizio REST |
Url, Method, TimeoutSeconds, JsonPath, Headers, Body (POST/PUT/PATCH), FallbackOnError
|
Sotto la query e l'espressione ci sono i chip dei token: un clic inserisce il token nel
punto del cursore. Sono disponibili gli input, le variabili, gli altri campi (solo per i
campi) e i token di sistema {now}, {utcnow}, {today}, {date}, {time},{machinename}, {processid}, {guid}.
I token vengono inseriti nel testo della query. Per i valori stringa metti gli apici:
WHERE Code = '{ItemCode}'.
Il mode delle query SQL decide la forma del risultato:
| mode | Risultato | Uso tipico |
|---|---|---|
scalar |
Un valore (default) | Descrizione, quantità, EAN |
vector |
Una colonna di più righe, unita con separator
|
Elenco di lotti in una riga |
rows |
Righe intere | Alimenta un elemento Tabella |
7 Transforms e Fallback
Ogni campo o variabile può applicare trasformazioni in sequenza (+ Transform,
frecce per riordinare) e un fallback.
| Transform | Parametro |
|---|---|
Trim, ToUpper, ToLower
|
nessuno |
Truncate |
lunghezza, es. 40
|
PadLeft |
larghezza:carattere, es. 8:0
|
Append |
suffisso, es. -END
|
FormatDecimal |
formato .NET, es. 0.00
|
ParseDate |
formato di input, es. yyyy-MM-dd
|
FormatDate |
formato di output |
RegexExtract |
pattern|gruppo, es. (\d+)|1
|
Fallback: con Attivo il motore emette un valore quando il risultato è nullo o vuoto,
cioè il Valore indicato (es. N/D) oppure, con Vuoto, una stringa vuota esplicita.
Nell'esempio descrizione passa per ToUpper e Truncate 40 e ha fallback N/D.
8 Esecuzione e campi obbligatori
-
Parallelism e
maxDegree: quanti campi il motore risolve in parallelo. -
GlobalTimeoutSeconds: tempo massimo dell'intera pipeline. - ContinueOnFieldError: se un campo non obbligatorio va in errore, si continua.
-
FieldCache e
ttlSeconds: cache dei valori. -
MaxPages: limite di pagine per i parametri paginati (0= nessun limite). -
RequiredFields: spunta i campi che devono risultare valorizzati, altrimenti la
pipeline fallisce. Nell'esempio è obbligatoriadescrizione.
9 Validazione
Il riquadro sopra l'anteprima XML è verde (Schema valido) o rosso con l'elenco dei
problemi. I controlli principali:
- nome duplicato tra Input, Variabili e Campi (nell'immagine: un campo chiamato
Lotto); - nome mancante;
- template vuoto, query SQL vuota, URL mancante, lookup senza Entry;
- una variabile che usa un campo (le variabili si risolvono prima);
- dipendenze cicliche tra variabili o tra campi;
- un RequiredField che non corrisponde a nessun campo.
L'editor non chiede conferma quando elimini un parametro, una variabile o un campo, e
non permette di riordinarli. Le modifiche allo schema non passano dall'Annulla del
layout: prima di interventi importanti scarica una copia con Scarica .xml, da
reimportare in caso di errore.
10 Salvare, importare, riaprire
| Azione | Dove | Effetto |
|---|---|---|
| Scarica .xml | Piede del dialog o sezione Anteprima & esporta | Salva <layoutId>.xml
|
| Copia | Piede del dialog | Copia l'XML negli appunti |
| Importa XML… (nel dialog) | Piede del dialog | Carica uno schema nell'editor |
| Importa XML… (tab Dati o menu Dati) | Pannello sinistro / menu | Uno schema <LabelDataMapping> diventa la sorgente dati del layout |
Lo schema viene salvato con l'autosave del tool e resta caricato fra una sessione e
l'altra: per modificarlo basta Modifica schema, senza reimportare il file.
11 I campi nel pannello Dati
Ogni modifica allo schema aggiorna subito il tab Dati:
- gli input con un default mostrano quel valore (
ItemCode→ART-00184), gli altri
il segnaposto ({UserId}); - i campi mostrano sempre il segnaposto
{descrizione}: il valore lo calcolerà il
motore in stampa; - con pag compare anche lo scalare
pageItem; - i campi tabella (
mode="rows") compaiono come array vuoti, pronti per una Tabella; - le variabili non compaiono.
Se nel frattempo importi un XML di record (radice diversa da
<LabelDataMapping>),
quello diventa la sorgente: lo schema resta modificabile ma non cambia più i campi del
pannello finché non lo reimporti.