Costruire report con LINQ

<< Fare clic per visualizzazione il sommario >>

Percorso:  API di piattaforma > JamioPlug > JamioPlug Document Automation >

Costruire report con LINQ

Associazione tag/Risorsa Jamio openwork

La mappatura tag/risorsa viene effettuata tramite la creazione di un DataSetValue che deve essere così definito:

il nome assegnato ai campi del DataSetValue (chiave) corrisponde al nome del tag che la risorsa avrà nel template Word;

il contenuto assegnato ai campi del DataSetValue (valore) corrisponde al collegamento alla risorsa o in alterativa ad un dato strutturato definito programmaticamente.

 

Un oggetto DataSetValue può essere creato in due modi:

a partire dalla modellazione di un dato strutturato nella soluzione Jamio openwork. In questo scenario ogni istanza, in ambiente di esecuzione, creata a partire dal modello di dato strutturato genera un DataSetValue;

costruendo programmaticamente, in un modello di processo, un DataSetValue tramite le specifiche specifiche funzioni del linguaggio OEL. Il metodo DataSet permette di creare istanze di DatasetValue che non necessitano di uno specifico modello di dato strutturato.

La figura riporta un esempio di definizione di dato strutturato modellato in una soluzione Jamio openwork, utile a comunicare in input il parametro resources.

 

Esempio dato strutturato resources

Esempio dato strutturato resources

 

Sintassi dei template

Un template per la generazione di un report word è un file in uno dei seguenti formati: doc, dot, docx, dotx, odt, ott, rtf. Il file template contiene del testo con uno o più tag con il seguente formato:

il testo del tag è identificato dai caratteri "<<" e ">>"

il testo del tag contiene solo testo e non campi speciali di word.

Il testo di un tag tipicamente è composto dai seguenti elementi

il nome del tag

l'espressione che deve essere valutata per la sostituzione del valore nel report circoscritta tra parentesi [ ]

un set di opzioni, se previste dal tag, ognuna delle quali è preceduta dal carattere "-"

un commento opzionale che viene ignorato dal motore di generazione del report e che può essere utile per ricordare a cosa si riferisce il tag.

 <<tag_name [expression] –switch1 –switch2 ... // optional_comment >> 

 

Esempio di tag di un template di report:

 <<[NotaSpese.Name]>> 

 

Alcuni tag possono prevedere altre opzioni, mentre altri richiedono un corrispettivo tag di chiusura che si esprime nella forma:

 <</tag_name>> 

 

Per inserire in un template un tag che fa riferimento ad un campo di una Risorsa Jamio openwork, occorre riferirsi alla risorsa utilizzando il nome specificato nel dato strutturato resources in input ai metodi di document automation suddetti. Per utilizzare un campo specifico di una risorsa occorre scrivere

 <<[Resource.Proprietà]>> 

 

Ad esempio per ottenere la proprietà Name della risorsa denominata NotaSpese specificata tramite un collegamento nel dato strutturato resources occorre scrivere nel template

 <<[NotaSpese.Name]>> 

 

Se invece si vuole ottenere il valore di un campo aggiuntivo definito in una risorsa personalizzata occorre fare riferimento alla collezione di Fields della risorsa. Il nome del campo deve essere riportato tra doppi apici, utilizzando da tastiera il carattere del doppio apice (").

<<[Resource.Fields["nomecampo"]]>>

 

Infine per ottenere il valore di un campo aggiuntivo definito in un dato strutturato specificato nel dato strutturato resources occorre fare riferimento alla collezione di Fields del dato strutturato. Ad esempio per ottenere il campo Importo del dato strutturato denominato Ordine occorre scrivere

<<[Ordine.Fields["Importo"]]>>

 

Tutti i campi delle Risorse Jamio openwork inseriti nei template Word dispongono delle seguenti proprietà che permettono di reperire specifici valori rispetto al tipo di campo.

Proprietà del campo

Tipo delle proprietà

Descrizione

Value

Object

Restituisce il valore originale del campo di qualsiasi tipo esso sia (ad esempio Dataset, Reference, ExtendedReference, etc.)

IsTrue

Boolean

Interroga il valore di un campo booleano e restituisce true se il valore contenuto è true, altrimenti false.

Number

Double

Restituisce il valore numerico di un campo di Jamio openwork di tipo numerico.

DateTime

DateTime

Restituisce il valore data/ora di un campo di Jamio openwork di tipo data o data e ora.

ToString()

String

Restituisce il valore testo di un campo di Jamio openwork di tipo testo breve.

Name

String

Restituisce il valore della proprietà Name di un campo di tipo collegamento o collegamento personalizzato.

Type

Integer

Restituisce il valore della proprietà Type di un campo di tipo collegamento o collegamento personalizzato.

Url

String

Restituisce il valore della proprietà Url di un campo di tipo collegamento o collegamento personalizzato.

Elements

List of Field

Restituisce la lista di elementi di un campo di tipo lista (ArrayValue), altrimenti lista vuota.

Fields

Dictionary<String, Field>

Restituisce il dizionario dei sotto-campi di un campo di tipo dato strutturato o collegamento personalizzato, altrimenti un dictionary vuoto.

 

Ad esempio il campo Data della risorsa denominata NotaSpese deve essere riportato in un template Word con la formattazione dd/MM/yyyy. L'espressione da inserire nel template Word sarà:

<<[NotaSpese.Fields["Data"].DateTime]:”dd/MM/yyyy”>>

 

Oppure ad esempio, sapendo che in una soluzione Jamio openwork il campo Campo1 è di tipo booleano ad esso si potrà applicare la proprietà IsTrue:

<<If [Resource.Fields["Campo1"].IsTrue]>>Testo1<<else>>Testo2<</if>>

 

Le liste di valori contenute in una risorsa vanno riportate nel tag <<foreach>> utile a iterare in una lista di elementi. Rispetto allo standard LINQ, quando si utilizza il tag foreach per iterare in liste di elementi occorre riportare nell'espressione tra [ ] la dicitura item in NomeCampoLista. Ad esempio, per stampare tutte le date riportate nella tabella ElencoSpese della risorsa NotaSpese occorre scrivere:

<<foreach [item in NotaSpese.Fields["ElencoSpese"]]>><<[item.Fields["Data"].DateTime]:”dd/MM/yyyy”>><</foreach>>

Per stampare tutte le date e tutti gli importi riportati nella tabella ElencoSpese della risorsa NotaSpese, separati da uno spazio, occorre scrivere:

<<foreach [item in NotaSpese.Fields["ElencoSpese"]]>><<[item.Fields["Data"].DateTime]:”dd/MM/yyyy”>>  <<[item.Fields["Importo"]>><</foreach>>

 

Per inserire nel template Word un'immagine, occorre utilizzare il tag <<image>> inserito in un apposito controllo word atto a visualizzare nel report un'immagine come ad esempio una casella di testo. L'immagine che si vuole visualizzare deve possedere un indirizzo web raggiungibile. Ad esempio per inserire in un template l'immagine riportata in un controllo Image occorre valorizzare il campo immagine con un immagine selezionata da web e nel template Word inserire un'espressione che restituisce l'url dell'immagine.

<<image [Richiedente. Fields["FotoProfilo"].Url]>>

 

Per inserire nel template Word un link, occorre utilizzare il tag <<link>> e specificare come espressione il link che si desidera aprire e tra parentesi [ ] il testo da visualizzare per il link.

<<link [uri_expression] [display_text_expression]>>

 

L'esempio che segue mostra come inserire in un template word il link ad una Risorsa Jamio openwork con testo 'Apri scheda richiedente'. L'Url della Risorsa Jamio openwork è composta da una parte di testo fissa, che rappresenta l'indirizzo del dominio Jamio openwork e dal valore della proprietà Url di un campo di tipo collegamento.

<<link [“https://paas.jamio.com/jamio/?url=” + NotaSpese.Fields["Richiedente"].Url] [“Apri scheda richiedente”]>>

 

Per inserire nel template Word un blocco condizionale che mostra un'opzione di testo rispetto al valore di un booleano, occorre utilizzare il tag <<if>>, la cui documentazione è disponibile qui.

<<if [conditional_expression1]>>

template_option1

<<elseif [conditional_expression2]>>

template_option2

...

<<else>>

default_template_option

<</if>>

 

Per inserire una checkbox nel template Word che recepisce il valore di un campo di tipo booleano occorre utilizzare un blocco condizionale che valuta il valore del campo booleano e mostra la il controllo checkbox selezionato per il valore true altrimenti non selezionato per il valore false. Ad esempio:

<<if [NotaSpese.Fields["EsitoApprovazione"].IsTrue]>> checkSI <<else>> checkNO <</if>>

 

Per rappresentare i dati riportati in una risorsa Jamio in un grafico nel template Word, occorre inserire nel file Word l'oggetto grafico scelto e specificare i valori X e Y da riportare, utilizzando una specifica sintassi. In generale, i valori delle ascisse devono essere specificati nel titolo del grafico, mentre i valori delle ordinate devono essere specificati nell'intestazione della colonna del foglio excel che alimenta il grafico nel template Word.

Di seguito alcuni esempi di grafici.

 

Grafico a dispersione:

si desidera, ad esempio, rappresentare gli importi delle spese in funzione delle date. I valori da riportare sull'asse delle ascisse, contenuti nella tabella ElencoSpese della risorsa NotaSpese, vanno specificati nel titolo del grafico con la seguente :

<<foreach [in NotaSpese.Fields[“ElencoSpese”]] >><<x [item.Fields[“Data”].DateTime>>

dove i nomi dei campi sono riportati tra doppi apici, utilizzando da tastiera il carattere del doppio apice ("), mentre i valori da rappresentare sull'asse delle ordinate vanno specificati nell'intestazione della colonna del foglio excel che alimenta il grafico nel template Word, con la seguente sintassi:

<<y [Fields["Importo"].Number]>>

Si segnala che i valori di default assegnati dal template Word nelle colonne del foglio excel restano visibili anche avendo impostato un'origine diversa dei dati, come nell'immagine di seguito, ma non vengono rappresentati nel file autocomposto. Per poter visualizzare le date sull'asse delle ascisse è necessario impostare il formato (Data) e l'unità principale (1) nelle proprietà del grafico nel template word.

Diagramma a dispersione nel template Word

Diagramma a dispersione nel template Word

Corrispondente diagramma a dispersione nel file autocomposto

Corrispondente diagramma a dispersione nel file autocomposto

 

 

Grafico a torta:

si desidera, ad esempio, rappresentare come vengono ripartiti gli importi delle spese in base alla tipologia di spesa, utilizzando un grafico a torta. I nomi delle tipologie di spesa che verranno riportati nella legenda vanno specificati nel titolo del grafico con la seguente sintassi:

<<foreach [in NotaSpese.Fields["ElencoSpese"]]>><<x [Fields["TipologiaSpesa"]]>>

dove i nomi dei campi sono riportati tra doppi apici, utilizzando da tastiera il carattere del doppio apice ("), mentre i valori che verranno rappresentati in percentuale nel grafico vanno specificati nell'intestazione della colonna del foglio excel che alimenta il grafico nel template Word, con la seguente sintassi:

<<y [Fields["Importo"].Number]>>

Si segnala che i valori di default assegnati dal template Word nelle colonne del foglio excel restano visibili anche avendo impostato un'origine diversa dei dati, come nell'immagine di seguito, ma non vengono rappresentati nel file autocomposto.

Diagramma a torta nel template Word

Diagramma a torta nel template Word

Corrispondente diagramma a torta nel file autocomposto

Corrispondente diagramma a torta nel file autocomposto

 

 

Grafico a colonne:

si desidera, ad esempio, rappresentare come viene ripartito l'importo di una nota spese in base alla tipologia di spesa, utilizzando un grafico a colonne. I nomi delle tipologie di spesa che verranno riportati nella legenda vanno specificati nel titolo del grafico con la seguente sintassi, dove i nomi dei campi devono essere riportati tra doppi apici, utilizzando da tastiera il carattere del doppio apice (").

<<foreach [in NotaSpese.Fields["ElencoSpese"]]>><<x [Fields["TipologiaSpesa"]]>>

mentre i valori che verranno rappresentati sull'asse y del grafico vanno specificati nell'intestazione della colonna del foglio excel che alimenta il grafico nel template Word, con la seguente sintassi:

<<y [Fields["Importo"].Number]>>

Si segnala che i valori di default assegnati dal template Word nelle colonne del foglio excel restano visibili anche avendo impostato un'origine diversa dei dati, come nell'immagine di seguito, ma non vengono rappresentati nel file autocomposto.

Diagramma a colonne nel template Word

Diagramma a colonne nel template Word

Corrispondente diagramma a colonne nel file autocomposto

Corrispondente diagramma a colonne nel file autocomposto