Condividi tramite


Creare mappe per trasformare i dati nei flussi di lavoro dell'app per la logica con Visual Studio Code

Si applica: App per la logica di Azure (Standard)

Quando si scambiano messaggi che usano formati XML o JSON diversi in un flusso di lavoro dell'app per la logica, è necessario specificare come trasformare o convertire i dati dal formato di origine al formato di destinazione, ad esempio tra documenti XML o tra documenti JSON. Questa attività è importante soprattutto quando si presentano lacune tra le strutture di dati negli schemi di origine e di destinazione. Uno schema descrive gli elementi dati, gli attributi e i tipi di dati in un documento XML o JSON.

Per definire trasformazioni tra strutture di dati e colmare eventuali gap, è possibile creare una mappa (file con estensione xslt) che specifica le relazioni tra gli elementi dati negli schemi di origine e di destinazione. È possibile creare o modificare visivamente una mappa usando Visual Studio Code con l'estensione App per la logica di Azure (Standard) nel contesto di un progetto di app per la logica Standard. Lo strumento Data Mapper offre un'esperienza unificata per il mapping e la trasformazione tramite movimenti di trascinamento della selezione, funzioni predefinite per la creazione di espressioni e un modo per testare manualmente le mappe prima di usarle nei flussi di lavoro.

Dopo aver creato la mappa, è possibile chiamare direttamente tale mappa da un flusso di lavoro nel progetto dell'app per la logica o da un flusso di lavoro dell'app per la logica Standard nel portale di Azure. Per questa attività, è possibile usare l'azione Operazioni del mapper dati denominata Transform using Data Mapper XSLT nel flusso di lavoro.

Questa guida pratica illustra come creare una mappa dati vuota, scegliere gli schemi di origine e di destinazione, creare vari tipi di mapping tra gli elementi dello schema, salvare e testare la mappa e quindi chiamare la mappa da un flusso di lavoro nel progetto dell'app per la logica.

Limitazioni e problemi noti

  • Data Mapper attualmente funziona solo in Visual Studio Code in esecuzione nei sistemi operativi Windows.

  • Data Mapper è attualmente disponibile solo in Visual Studio Code, non nel portale di Azure e solo all'interno di progetti di app per la logica Standard, non in progetti di app per la logica a consumo.

  • Data Mapper attualmente non supporta schemi che usano il formato di file delimitato da virgole (.csv).

  • Il riquadro Codice in Data Mapper è attualmente di sola lettura.

  • Le posizioni di layout e elemento in Data Mapper sono attualmente automatiche e di sola lettura.

  • La funzione Filter elabora correttamente le condizioni numeriche racchiuse tra virgolette doppie, ad esempio ">=10". Tuttavia, questa funzione attualmente non si comporta in modo coerente per i confronti di stringhe, ad esempio un controllo se un nome di elemento è "= 'Pen'".

  • Quando si crea un mapping tra gli elementi della matrice padre negli schemi di origine e di destinazione, il mapper aggiunge automaticamente un ciclo per scorrere gli elementi dell'elemento della matrice. Tuttavia, è comunque necessario creare in modo esplicito mapping tra gli elementi dell'elemento della matrice di origine e di destinazione.

  • Per chiamare le mappe create con Data Mapper, è possibile usare solo l'azione Operazioni del mapper di dati denominata Transform usando Data Mapper XSLT. Per le mappe create da qualsiasi altro strumento, utilizzare l'azione Operazioni XML denominata Transform XML.

  • Per usare le mappe create con Data Mapper con flussi di lavoro nel portale di Azure, è necessario aggiungerle direttamente alla risorsa dell'app per la logica Standard.

Prerequisiti

  • Visual Studio Code e l'estensione App per la logica di Azure (Standard) per creare flussi di lavoro di app per la logica Standard.

    Nota

    L'estensione Data Mapper precedentemente separata viene ora unita all'estensione App per la logica di Azure (Standard). Per evitare conflitti, qualsiasi versione esistente dell'estensione Data Mapper viene rimossa quando si installa o si aggiorna l'estensione App per la logica di Azure (Standard). Dopo l'installazione o l'aggiornamento dell'estensione, riavviare Visual Studio Code.

  • File dello schema di origine e di destinazione che descrivono i tipi di dati da trasformare. Questi file possono avere uno dei formati seguenti:

    • File di definizione di XML Schema con estensione xsd

    • Un file JavaScript Object Notation con l'estensione di file .json

  • Un progetto di app per la logica Standard che include almeno un flusso di lavoro con stato o senza stato con un trigger. Se non si ha un progetto, seguire questa procedura in Visual Studio Code:

    1. Connettersi all'account Azure, se non è già stato fatto.

    2. Creare una cartella locale, un'area di lavoro e un progetto per l'app per la logica Standard e un flusso di lavoro con o senza stato. Durante la creazione del flusso di lavoro, selezionare Apri nella finestra corrente.

  • Dati di input di esempio se si vuole testare la mappa e verificare che la trasformazione funzioni come previsto.

Creare una mappa dati

  1. In Visual Studio Code aprire la cartella per il progetto di app per la logica Standard.

  2. Nel menu a sinistra di Visual Studio Code selezionare l'icona di Azure .

  3. Nella finestra di Azure, in Data Mapper selezionare Crea mappa dati.

    Screenshot che mostra Visual Studio Code con la finestra di Azure e il pulsante selezionato per Crea mappa dati.

    Nella barra del titolo di Visual Studio Code viene visualizzata una casella di richiesta in modo da poter specificare un nome per la mappa.

  4. Nella finestra di richiesta immettere un nome per la mappa.

    Per questa guida, questi passaggi usano il nome Example-data-map.

    Screenshot che mostra la casella di richiesta e il nome della mappa dati di esempio.

    Data Mapper crea e apre una mappa dati vuota.

  5. Scegliere gli schemi di origine e di destinazione seguendo questa procedura:

    1. Nel riquadro Origine selezionare Aggiungi nuova>sfoglia per trovare e caricare lo schema di origine.

      Screenshot che mostra il riquadro Data Mapper e Source con le opzioni selezionate per Aggiungi nuovo e Sfoglia.

      Dopo aver aggiunto lo schema di origine, il riquadro Origine viene popolato con l'elemento XML "nodes" per i tipi di dati nello schema di origine, ad esempio:

      Screenshot che mostra il riquadro Origine popolato con nodi elemento XML dello schema di origine.

    2. Nel riquadro Destinazione selezionare Aggiungi nuovo>sfoglia per trovare e caricare lo schema di destinazione.

      Screenshot che mostra il riquadro Data Mapper e Destination con le opzioni selezionate per Aggiungi nuovo e Sfoglia.

      Dopo aver aggiunto lo schema di destinazione, il riquadro Destinazione viene popolato con l'elemento XML "nodes" per i tipi di dati nello schema di destinazione, ad esempio:

      Screenshot che mostra il riquadro Destinazione popolato con nodi elemento XML dello schema di origine.

Suggerimento

Se si verificano problemi durante il caricamento degli schemi, è possibile aggiungere i file di schema di origine e di destinazione alla cartella Schemi artefatti/ locale del progetto di app per la logica. In questo scenario, per specificare lo schema di origine e di destinazione in Data Mapper, nei riquadri Origine e destinazione aprire l'elenco Seleziona esistente anziché usare Aggiungi nuovo e selezionare lo schema.

Tipi di dati dello schema

Nella tabella seguente vengono descritti i possibili tipi di dati che potrebbero essere visualizzati in uno schema:

Simbolo TIPO Altre informazioni
Icona che rappresenta un tipo di dati Array. Complesso (matrice) Contiene elementi o nodi di elemento ripetuti.

Un elemento matrice visualizza anche il punto di connessione seguente:

Icona per il punto di connessione dell'elemento della matrice.
Icona che rappresenta un tipo di dati Bool. Bool Solo True o false
Icona che rappresenta un tipo di dati complesso. Complesso Oggetto XML con proprietà figlio, simile al tipo JSON object
Icona che rappresenta un tipo di dati DateTime. Data/Ora
Icona che rappresenta un tipo di dati Decimal. Decimale
Icona che rappresenta un tipo di dati Integer. Intero Solo numeri interi
Icona che rappresenta un tipo di dati String. Stringa

Creare un mapping diretto tra elementi

Per specificare una trasformazione semplice tra elementi con lo stesso tipo negli schemi di origine e di destinazione, seguire questa procedura:

  1. Per visualizzare ciò che accade nel codice durante la creazione del mapping, nell'angolo superiore destro del mapper selezionare Visualizza codice.

  2. Nell'area del mapper, nel riquadro Origine , trovare l'elemento di origine di cui si vuole eseguire il mapping.

    • Per impostazione predefinita, gli elementi padre vengono espansi automaticamente per visualizzare i relativi elementi figlio.

    • Questo esempio avvia il mapping dall'elemento di origine, ma è possibile scegliere di avviare il mapping dall'elemento di destinazione.

  3. Spostare il puntatore del mouse sul cerchio accanto al nome dell'elemento di origine fino a quando il puntatore non passa a un segno più (+).

    In questo esempio viene creato un mapping a partire dall'elemento di origine ID dipendente.

    Screenshot che mostra Data Mapper con puntatore sull'elemento di origine.

  4. Trascinare e disegnare una linea in modo che l'elemento di origine si connetta al cerchio per l'elemento di destinazione nel riquadro Destinazione .

    In questo esempio viene completato il mapping con l'elemento di destinazione ID , che ha lo stesso tipo di dati dell'elemento di origine.

    Screenshot che mostra Data Mapper, un puntatore sull'elemento di destinazione e una linea tra gli elementi di origine e di destinazione.

    A questo punto è stato creato un mapping diretto tra entrambi gli elementi con gli stessi tipi di dati.

    Screenshot che mostra un mapping completo tra EmployeeID e ID rispettivamente negli schemi di origine e di destinazione.

    Il riquadro Codice mostra la relazione di mapping creata:

    Screenshot che mostra il riquadro Codice con mapping diretto tra EmployeeID e ID rispettivamente negli schemi di origine e di destinazione.

    Suggerimento

    Per verificare se i mapping presentano problemi, selezionare Visualizza problemi. Ad esempio, un avviso viene visualizzato nell'elenco Problemi della scheda Avvisi se si crea un mapping tra elementi con tipi di dati non corrispondenti:

    Screenshot che mostra il mapping tra tipi di dati non corrispondenti.

Creare un mapping complesso tra elementi

Per specificare una trasformazione più complessa tra gli elementi negli schemi di origine e di destinazione, ad esempio gli elementi che si desidera combinare o avere tipi di dati diversi, è possibile usare una o più funzioni che eseguono la trasformazione desiderata nel mapping.

Nell'area del mapper l'etichetta della funzione è codificata a colori in base al gruppo di funzioni. Accanto al nome della funzione, viene visualizzato il simbolo della funzione, ad esempio:

Screenshot che mostra l'etichetta della funzione di esempio.

Nella tabella seguente sono elencati i gruppi di funzioni e alcune funzioni di esempio che è possibile usare. Per l'elenco completo, vedere l'elenco Funzioni in Data Mapper.

Raggruppa Esempi di funzioni
Raccolta Media, Conteggio, Accesso diretto, Valori distinti, Filtro, Indice, Unisci, Massimo, Minimo, Inverti, Ordinamento, Sottosequenza, Somma
Conversione Da data, a numero intero, da numero a stringa
Data e ora Aggiungere giorni, data corrente, ora corrente, data uguale a
Confronto logico uguale, esiste, maggiore, maggiore o uguale, se, se else, è nullo, è nullo, è numero, è stringa, minore, minore o uguale, logico AND, logico NOT, logico OR, non uguale
Matematiche Absolute, Add, Arctangent, Ceiling, Cosine, Divide, Esponenziale (base 10), Floor, Integer Divide, Log, Log (base 10), Module, Multiply, Power, Round, Sine, Square Root, Subtract, Tangente
Stringa Punti di codice in String, Concat, Contains, Ends with, Length, Lowercase, Name, Regular Expression Matches, Regular Expression Replace, Replace, Starts with, String to Codepoints, Substring, Substring after, Substring before, Trim, Trim Left, Trim Right, Uppercase
Utilità Copia, Errore, Esecuzione XPath, Formattazione DateTime, Formattazione numero, Esecuzione XSLT

Aggiungere una funzione senza mapping

L'esempio in questa sezione trasforma i dati nell'elemento di origine da String a DateTime, ovvero il tipo di elemento di destinazione. L'esempio inizia senza prima creare un mapping e usa la funzione To Date , che accetta un singolo input.

  1. Per visualizzare ciò che accade nel codice durante la creazione del mapping, nell'angolo superiore destro del mapper selezionare Visualizza codice.

  2. Nell'elenco Funzioni trovare e selezionare la funzione che si vuole usare, che aggiunge la funzione all'area del mapper. Se l'elenco Funzioni è compresso, nell'angolo superiore sinistro del mapper selezionare l'icona della funzione (Icona per l'elenco funzioni.).

    In questo esempio viene selezionata la funzione To Date , che si trova nel gruppo di funzioni conversioni .

    Screenshot che mostra la funzione selezionata denominata To Date.

    Nota

    Se non esiste alcun mapping sulla mappa o se è selezionato un mapping quando si aggiunge una funzione alla mappa, la funzione viene visualizzata ma non è connessa ad alcun elemento o ad altre funzioni, ad esempio:

    Screenshot che mostra la funzione disconnessa denominata To Date.

  3. Connettere la funzione agli elementi di origine e di destinazione.

    1. Trascinare e disegnare una linea tra l'elemento di origine e il cerchio sul bordo sinistro della funzione. È possibile iniziare dall'elemento di origine o dalla funzione .

      Screenshot che mostra il mapping tra un elemento di origine e una funzione.

    2. Trascinare e disegnare una linea tra il bordo destro della funzione e l'elemento di destinazione. È possibile iniziare dall'elemento di destinazione o dalla funzione .

      Screenshot che mostra il mapping tra la funzione e l'elemento di destinazione.

    Il riquadro Codice mostra la relazione di mapping creata:

    Screenshot che mostra il riquadro Codice con la relazione di mapping diretto tra gli elementi di origine e di destinazione.

  4. Nell'area del mapper selezionare la forma della funzione per visualizzare i dettagli della funzione.

  5. Nella scheda Input confermare o modificare l'input da usare.

    Screenshot che mostra la scheda Input per la funzione denominata To Date.

    Alcuni scenari richiedono la definizione di una trasformazione oltre la coppia immediata di elementi di origine e di destinazione. Ad esempio, per definire una trasformazione tra una coppia di matrici e i relativi elementi, è necessario creare un ciclo tra le matrici. In alternativa, per eseguire un'attività quando il valore di un elemento soddisfa una condizione, è necessario aggiungere una condizione tra gli elementi.

Aggiungere una funzione che usa più input

L'esempio in questa sezione concatena più elementi di origine come input e esegue il mapping di un singolo output all'elemento di destinazione. Nell'esempio viene usata la funzione Concat , che accetta più input.

  1. Per visualizzare ciò che accade nel codice durante la creazione del mapping, nell'angolo superiore destro del mapper selezionare Visualizza codice.

  2. Nell'elenco Funzioni trovare e selezionare la funzione che si vuole usare, che aggiunge la funzione all'area del mapper.

    Se l'elenco Funzioni è compresso, nell'angolo superiore sinistro del mapper selezionare l'icona della funzione (Icona per l'elenco funzioni.).

    In questo esempio viene selezionata la funzione Concat , che si trova nel gruppo di funzioni String .

    Screenshot che mostra la funzione selezionata denominata Concat.

    Nota

    Se non esiste alcun mapping sulla mappa o se è selezionato un mapping quando si aggiunge una funzione alla mappa, la funzione viene visualizzata ma non è connessa ad alcun elemento o ad altre funzioni, ad esempio:

    Screenshot che mostra la funzione disconnessa denominata Concat.

  3. Nell'area del mapper selezionare la forma della funzione per visualizzare i dettagli della funzione.

  4. Nella scheda Input selezionare gli elementi dello schema di origine da usare come input.

    In questo esempio vengono selezionati gli elementi dello schema di origine FirstName e LastName come input della funzione. Il mapper aggiunge automaticamente i rispettivi mapping tra gli elementi di origine e la funzione .

    Screenshot che mostra più elementi di origine come input di funzione.

  5. Per completare il mapping, trascinare e disegnare una linea tra il bordo destro della funzione e l'elemento di destinazione. È possibile iniziare dall'elemento di destinazione o dalla funzione .

    Screenshot che mostra i mapping completati tra più input, funzione Concat e elemento di destinazione.

    Il riquadro Codice mostra le relazioni di mapping create:

    Screenshot che mostra il riquadro Codice con la funzione Concat, con più input e un singolo output.

Scorrere le matrici

Se gli schemi di origine e di destinazione contengono matrici, è possibile creare un ciclo per scorrere gli elementi delle matrici. L'esempio in questa sezione crea un ciclo attraverso una matrice di origine Employee e una matrice di destinazione Person insieme ai mapping tra gli elementi delle matrici.

  1. Per visualizzare ciò che accade nel codice durante la creazione del mapping, nell'angolo superiore destro del mapper selezionare Visualizza codice.

  2. Nell'area del mapper, nei riquadri Origine e Destinazione individuare le matrici di cui si vuole eseguire il mapping.

  3. Trascinare e disegnare una linea tra la coppia di elementi della matrice. È possibile iniziare dal riquadro Origine o dal riquadro Destinazione .

    L'esempio seguente inizia dal riquadro Origine ed esegue il mapping degli elementi Name nella matrice di origine Employee e nella matrice di destinazione Person :

    Screenshot che mostra l'area del mapper e il disegno di un mapping tra gli elementi Name nelle matrici Employee di origine e Person di destinazione.

    Dopo aver completato il mapping della prima coppia di elementi della matrice, il mapper aggiunge automaticamente un ciclo tra gli elementi padre della matrice di origine e di destinazione, che hanno il tipo di punto di connessione seguente: Icona per l'elemento matrice completato punto di connessione.

    L'esempio seguente evidenzia il ciclo aggiunto automaticamente tra le matrici padre Employee di origine e Person di destinazione:

    Screenshot che mostra il mapping del ciclo tra le matrici padre employee di origine e persona di destinazione.

    Il riquadro Codice mostra il mapping e il ciclo creati:

    Screenshot che mostra il riquadro Codice con mapping di cicli tra matrici padre di origine e di destinazione e elementi di matrice.

  4. Continuare a eseguire il mapping degli altri elementi della matrice, ad esempio:

    Screenshot che mostra altri mapping tra altri elementi della matrice nelle matrici di origine e di destinazione.

Valutare una condizione per eseguire un'attività

Si supponga di voler aggiungere un mapping che valuta una condizione ed esegue un'attività quando viene soddisfatta la condizione. Per questo scenario, è possibile usare più funzioni.

Nell'esempio seguente, quando la quantità di acquisto supera i 20 articoli, il mapping calcola uno sconto da applicare usando le funzioni seguenti:

Gruppo di funzioni Funzione Scopo in questo esempio
Confronto Maggiore Controllare se la quantità di acquisto è superiore a 20.
Confronto Se Controllare se la funzione Greater restituisce true.
Matematiche Per Se la condizione è true, moltiplicare il prezzo dell'articolo del 10% per calcolare lo sconto.
  1. Nei riquadri Origine e Destinazione trovare gli elementi da mappare nello scenario.

    In questo esempio vengono utilizzati gli elementi seguenti:

    • Riquadro origine : ItemPrice e ItemQuantity

    • Riquadro destinazione : ItemPrice, ItemQuantity e ItemDiscount

      Screenshot che mostra la superficie del mapper e gli elementi dati per uno scenario di condizione di esempio.

  2. Nell'elenco Funzioni trovare e selezionare le funzioni da usare, che aggiunge le funzioni all'area del mapper.

    • Se l'elenco Funzioni è compresso, nell'angolo superiore sinistro del mapper selezionare l'icona della funzione (Icona per il riquadro Funzioni.).

    • Se necessario, spostare le forme della funzione sulla superficie del mapper per renderle più facili da selezionare.

    In questo esempio vengono aggiunte le funzioni seguenti all'area del mapper: Greater, If e Multiply

    Screenshot che mostra la superficie del mapper, gli elementi dati e le funzioni per uno scenario di condizione di esempio.

  3. Per visualizzare ciò che accade nel codice durante la creazione dei mapping, nell'angolo superiore destro del mapper selezionare Visualizza codice.

  4. Connettere gli elementi di origine, le funzioni e gli elementi di destinazione nell'ordine specifico in base alle esigenze dello scenario.

    In questo esempio vengono connessi gli elementi seguenti nell'ordine specificato per creare correttamente i mapping:

    Inizia Fine
    Elemento di origine ItemPrice Elemento di destinazione ItemPrice
    Elemento di origine ItemQuantity Input della funzione maggiore sul bordo sinistro della forma. Questo input fornisce i dati per il campo Valore 1 nei dettagli della funzione.
    Output della funzione maggiore sul bordo destro della forma Se l'input della funzione sul bordo sinistro della forma. Questo input fornisce i dati per il campo Condizione nei dettagli della funzione.
    Elemento di origine ItemPrice Input della funzione di moltiplicazione sul bordo sinistro della forma. Questo input fornisce i dati per il campo Multiplicand nei dettagli della funzione.
    Moltiplicare l'output della funzione sul bordo destro della forma. Se l'input della funzione sul bordo sinistro della forma. Questo input fornisce i dati per il campo Valore nei dettagli della funzione.
    Se l'output della funzione sul bordo destro della forma. Elemento di destinazione ItemDiscount

    L'esempio seguente illustra i mapping in questo momento:

    Screenshot che mostra la superficie del mapper, gli elementi dati e le funzioni con mapping per uno scenario di condizione di esempio.

  5. Nei dettagli della funzione seguenti, nella scheda Input , confermare o specificare i valori seguenti:

    Funzione Campo e valore di input
    Maggiore - Valore 1: elemento di origine ItemQuantity
    - Valore 2: 20 come valore personalizzato
    Per - Multiplicand 1: elemento di origine ItemPrice
    - Moltiplicatore 2: .10 come valore personalizzato
    Se - Condizione: is-greater-than(ItemQuantity, 20)
    - Valore: multiply(ItemPrice, .10)

    La mappa seguente mostra l'esempio completato:

    Screenshot che mostra l'esempio di condizione completata.

    Il riquadro Codice mostra il mapping creato:

    Screenshot che mostra il riquadro Codice con mapping condizionale tra gli elementi di origine e di destinazione usando le funzioni, Greater, Multiply e If.

Salvare la mappa

Al termine, sulla barra degli strumenti della mappa selezionare Salva.

Visual Studio Code salva il mapping dei dati come gli elementi seguenti:

  • Un file Data Mapper (<your-map-name.LML>) nella cartella del progetto Artifacts>MapDefinitions
  • Un file di mapping dei dati (<your-map-name.xslt>) nella cartella del progetto Mappe artefatti>

Testare la mappa

Per verificare che la trasformazione funzioni come previsto, sono necessari dati di input di esempio.

  1. Prima di testare la mappa, < your-map-name.xslt>

  2. Sulla barra degli strumenti della mappa selezionare Apri pannello test.

  3. Nella casella Dati di esempio del riquadro Mappa di test incollare l'input di esempio e selezionare Test.

    La casella Risultato mostra i risultati del test.

Chiamare la mappa da un flusso di lavoro nel progetto

  1. Nella barra delle attività di Visual Studio Code selezionare Esplora (icona file) per visualizzare la struttura del progetto dell'app per la logica.

  2. Espandere la cartella con il nome del flusso di lavoro. Dal menu di scelta rapida del file di workflow.json selezionare Apri finestra di progettazione.

  3. Nella finestra di progettazione del flusso di lavoro seguire questi passaggi generali per aggiungere l'azione predefinita Operazioni di Gestione dei dati denominata Transform using Data Mapper XSLT (Trasformazione tramite XsLT di Data Mapper).

  4. Nella finestra di progettazione selezionare l'azione Transform using Data Mapper XSLT .On the designer, select the Transform using Data Mapper XSLT action.

  5. Nel riquadro delle informazioni sull'azione visualizzato specificare il valore Contenuto e lasciare l'opzione Origine mappa impostata su LogicApp.

  6. Aprire l'elenco Nome mappa e selezionare la mappa (file con estensione xslt).

    Screenshot che mostra Visual Studio Code, Finestra di progettazione del flusso di lavoro Standard, con l'azione selezionata denominata Transform using Data Mapper XSLT and action properties .Screenshot shows Visual Studio Code, Standard workflow designer, with selected action named Transform using Data Mapper XSLT and action properties.

    Per usare la stessa azione Transform using Data Mapper XSLT nella portale di Azure, è necessario aggiungere la mappa alla risorsa dell'app per la logica Standard.

Eseguire XSLT da una mappa dati

È possibile eseguire frammenti di codice XSLT eseguibili all'interno di un file di mapping dei dati (con estensione xslt) utilizzando la funzione Esegui XSLT . Quando si utilizza questa funzione, si ottiene un file di mapping dei dati che contiene l'eseguibile XSLT effettivo. Il file Data Mapper (.LML) contiene un riferimento al file XSLT eseguibile (.xslt o .xml).

Per completare questa attività, effettuare i seguenti passaggi:

  1. Creare un nuovo file di mapping dei dati (con estensione xslt o .xml) che contenga il frammento di codice XSLT eseguibile che si desidera eseguire.

  2. Inserire o spostare il file del frammento di codice XSLT nella seguente cartella di progetto:

    Manufatti>DataMapper\Extensions>In lineaXSLT

    Lo screenshot mostra Visual Studio Code, il progetto di app per la logica standard e la cartella del progetto InlineXslt con il file InlineXslt.xsd.

    Nota

    Se si crea o si salva questo file XSLT eseguibile in Visual Studio Code, il file viene visualizzato automaticamente nella cartella del progetto Mappe artefatti>. Assicurati di spostare i file di frammenti XSLT nella cartella InlineXslt .

  3. Aprire la mappa dati da cui si desidera eseguire l'XSLT.

  4. Nel riquadro Funzioni , in Utilità, selezionare Esegui XSLT per aggiungere la funzione alla superficie del mapper.

  5. Sulla superficie del mapper, selezionare Esegui XSLT.

  6. Dall'elenco a discesa File , selezionare il file eseguibile con estensione xslt aggiunto alla cartella InlineXSLT , ad esempio:

    Lo screenshot mostra la superficie del mappatore di dati aperta e l'esecuzione della funzione XSLT con il file InlineXslt.xsd selezionato.

  7. Connettere la funzione Esegui XSLT al nodo di destinazione in cui si desidera applicare la logica XSLT, ad esempio:

    Lo screenshot mostra la superficie del mappatore di dati aperta e la funzione Esegui XSLT connessa al nodo di destinazione.

    Poiché la logica XSLT si applica solo al nodo di destinazione, non è necessario connettere la funzione Esegui XSLT a un nodo di origine.

  8. Testare la mappa per verificare che i risultati previsti vengano visualizzati nello schema di destinazione.

Per la distribuzione, è necessario solo il mapping dei dati risultante con l'eseguibile XSLT inline.

Accedere ai nodi in XML nidificato

Si supponga di disporre di uno schema con nodi XML nidificati e di voler utilizzare questi nodi nei modi seguenti:

  • Accedere agli attributi o agli elementi nidificati.
  • Applicare la logica in base alla struttura o al contenuto dei dati in entrata.

Per completare queste attività, utilizzare la funzione Esegui XPath :

  1. Aprire la mappa dei dati su cui si desidera lavorare.

  2. Nel riquadro Funzioni , in Utilità, selezionare Esegui XPath per aggiungere la funzione alla superficie del mapper.

  3. Nella superficie del mappatore, selezionare Esegui XPath.

  4. Nella casella Espressione XPATH immettere un'espressione che esegua il lavoro desiderato.

    Per informazioni sulla sintassi delle espressioni, vedere Sintassi XPath.

    In questo esempio viene utilizzata l'espressione //Address insieme a un payload di test:

    Lo screenshot mostra la superficie del mappatore di dati aperta e la funzione Esegui XPath con espressione.

    Nota

    Le doppie barre (//) selezionano i nodi dal nodo corrente che corrispondono alla selezione, indipendentemente dalla posizione in cui si trovano.

  5. Connettere la funzione Execute XPath al nodo di destinazione in cui si vuole eseguire la funzione.

    In questo esempio la funzione viene connessa al nodo Address nello schema di destinazione:

    Lo screenshot mostra la superficie del mappatore di dati aperta e la funzione Execute XPath connessa al nodo di destinazione.

    Nota

    I nomi dei nodi vengono racchiusi automaticamente tra virgolette doppie (" ").

  6. Testare la mappa per verificare che i risultati previsti vengano visualizzati nello schema di destinazione.

    In questo esempio viene utilizzato un payload di test e vengono prodotti correttamente i risultati con più nodi Address perché il nodo Address di origine esiste in una matrice Employee , mentre il nodo Address di destinazione esiste in una matrice Person .

    Lo screenshot mostra la superficie del mappatore di dati aperta, la funzione Esegui XPath e i risultati del test nello schema di destinazione.

    Nota

    Se si crea un mapping tra matrici negli schemi di origine e di destinazione, viene visualizzato automaticamente un ciclo sulla superficie del mappatore per scorrere gli elementi della matrice. Tuttavia, è comunque necessario creare mapping tra gli elementi dell'array di origine e di destinazione. Per informazioni sul ciclo delle matrici, vedere Scorrere le matrici.

Creare funzioni XML personalizzate

Per definire la logica riutilizzabile nella mappa, è possibile creare funzioni XML personalizzate, che offrono i vantaggi seguenti:

  • Riduci la duplicazione e supporta le trasformazioni specifiche dello schema.
  • Racchiudi la logica complessa in componenti gestibili.
  • Gestire i casi limite specifici dello schema.

Per creare una funzione XML personalizzata, attenersi alla seguente procedura:

  1. Crea un file XML (.xml) con un nome significativo che descriva lo scopo della tua funzione.

    Il file XML deve utilizzare uno schema specifico per le definizioni delle funzioni. Se sono presenti più funzioni correlate, è possibile usare un singolo file per queste funzioni. Anche se è possibile usare qualsiasi nome di file, un nome di file o una categoria significativa semplifica l'identificazione, la ricerca e l'individuazione delle funzioni.

  2. Aggiungere questo file XML al progetto dell'app per la logica nella cartella seguente:

    Manufatti>DataMapper\Extensions>Funzioni

  3. Aprire la mappa dati in cui si desidera utilizzare la funzione.

  4. Nel riquadro Funzioni , in Utilità, selezionare la funzione personalizzata, che viene visualizzata sulla superficie del mapper.

  5. Nella superficie del mappatore, selezionare la funzione. Fornire l'input necessario per il funzionamento della funzione.

  6. Connettere la funzione agli endpoint necessari.

    Nell'esempio seguente viene illustrata una funzione personalizzata denominata Age che restituisce l'età per la data di nascita specificata. La funzione si connette al nodo di origine Dat_of_Birth e al nodo Altro di destinazione. Per esaminare la definizione di questa funzione personalizzata, vedere Esaminare la definizione della funzione di esempio.

    Lo screenshot mostra la superficie del mappatore dati aperta e la funzione personalizzata denominata Età.

  7. Testare la mappa per verificare che i risultati previsti vengano visualizzati nello schema di destinazione, ad esempio:

    Lo screenshot mostra la superficie del mappatore di dati aperta, la funzione personalizzata denominata Età e i risultati della funzione.

Esaminare lo schema per una definizione di funzione

Il file XML deve utilizzare lo schema seguente per la definizione di una funzione. Ogni elemento XML con il "function" nome implementa una funzione di stile XSLT 3.0 con alcuni attributi aggiuntivi. L'elenco delle funzioni Di mapper dati include il nome della funzione, la descrizione, i nomi dei parametri e i tipi di parametro.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="customfunctions">
      <xs:complexType>
         <xs:sequence>
            <xs:element maxOccurs="unbounded" name="function">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element maxOccurs="unbounded" name="param">
                        <xs:complexType>
                           <xs:attribute name="name" type="xs:string" use="required" />
                           <xs:attribute name="as" type="xs:string" use="required" />
                        </xs:complexType>
                     </xs:element>
                     <xs:any minOccurs="0" />
                  </xs:sequence>
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="as" type="xs:string" use="required" />
                  <xs:attribute name="description" type="xs:string" use="required" />
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

Esaminare le definizioni delle funzioni di esempio

Nel file SampleFunctions.xml seguente viene illustrata l'implementazione per le funzioni seguenti:

  • "age"
  • "custom-if-then-else"
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<customfunctions>
   <function name="age" as="xs:float" description="Returns the current age.">
      <param name="inputDate" as="xs:date"/> 
      <value-of select="round(days-from-duration(current-date() - xs:date($inputDate)) div 365.25, 1)"/>
   </function> 
   <function name="custom-if-then-else" as="xs:string" description="Evaluates the condition and returns corresponding value.">
      <param name="condition" as="xs:boolean"/>
      <param name="thenResult" as="xs:anyAtomicType"/>
      <param name="elseResult" as="xs:anyAtomicType"/>
      <choose>
         <when test="$condition">
            <value-of select="$thenResult"></value-of>
         </when>
         <otherwise>
            <value-of select="$elseResult"></value-of>
         </otherwise>
      </choose>
   </function>
</customfunctions>