Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: App per la logica di Azure (A consumo e Standard)
Per i flussi di lavoro di integrazione business-to-business (B2B), è spesso necessario convertire i dati tra formati di file XML e flat prima di poter scambiare questi dati con i partner commerciali.
Questa guida illustra come usare le azioni del connettore predefinite file flat per codificare o decodificare XML e generare schemi di file flat compatibili con BizTalk da dati di esempio.
Informazioni tecniche sul connettore
Il connettore File flat include le azioni di codifica, decodifica e generazione dello schema seguenti:
| Action | Consumption | Normale |
|---|---|---|
| Codifica del file flat | Sì | Sì |
| Decodifica di file di testo semplice | Sì | Sì |
| Generazione dello schema di file flat | No | Sì |
| Applicazione logica | Ambiente |
|---|---|
| Consumption | App per la logica di Azure multi-tenant |
| Normale | Soluzioni Azure Logic a tenant unico, Ambiente del servizio App Service v3 (solo piani Windows), e distribuzione ibrida |
Per altre informazioni, vedere Connettori predefiniti dell'account di integrazione.
Prerequisiti
Un account e una sottoscrizione di Azure. Ottenere un account Azure gratuito.
La risorsa e il flusso di lavoro dell'app Logic in cui si vogliono usare le operazioni Flat File.
Le operazioni sui file flat non includono trigger. Il flusso di lavoro può iniziare con qualsiasi trigger o usare qualsiasi azione per inserire il codice XML di origine.
Gli esempi in questo articolo usano il trigger di richiesta denominato Quando viene ricevuta una richiesta HTTP.
Per altre informazioni, vedere:
Una risorsa dell'account di integrazione per definire e archiviare i componenti per i processi di integrazione aziendale e B2B.
Sia l'account di integrazione che la risorsa dell'app per la logica devono essere presenti nella stessa sottoscrizione di Azure e nella stessa area di Azure.
Prima di iniziare a usare le operazioni File flat, è necessario collegare l'app per la logica a consumo o collegare l'app per la logica Standard all'account di integrazione per l'uso di artefatti come partner commerciali e contratti. È possibile collegare un account di integrazione a più risorse dell'app per la logica a consumo o Standard per condividere gli stessi artefatti.
Suggerimento
Se non si lavora con artefatti B2B, ad esempio partner commerciali e contratti nei flussi di lavoro Standard, potrebbe non essere necessario un account di integrazione. È invece possibile caricare gli schemi direttamente nella risorsa dell'app per la logica Standard. In entrambi i casi, è possibile usare lo stesso schema in tutti i flussi di lavoro figlio nella stessa risorsa dell'app per la logica. Per usare lo stesso schema tra più risorse dell'app per la logica, è necessario usare e collegare un account di integrazione.
Schema di file flat che specifica come codificare o decodificare il contenuto XML.
Nei flussi di lavoro Standard le operazioni file flat consentono di selezionare uno schema da un account di integrazione collegato o caricato in precedenza nell'app per la logica, ma non entrambi.
Per altre informazioni, vedere Aggiungere schemi agli account di integrazione.
Installare o usare uno strumento che può inviare richieste HTTP per testare la soluzione, ad esempio:
- Visual Studio Code con un'estensione da Visual Studio Marketplace
- Invoke-RestMethod di PowerShell
- Microsoft Edge - Strumento console di rete
- Bruno
- curl
Attenzione
Per scenari in cui sono presenti dati sensibili, ad esempio credenziali, segreti, token di accesso, chiavi API e altre informazioni simili, assicurarsi di usare uno strumento che protegge i dati con le funzionalità di sicurezza necessarie. Lo strumento deve funzionare offline o in locale e non richiede l'accesso a un account online o sincronizzare i dati nel cloud. Quando si usa uno strumento con queste caratteristiche, si riduce il rischio di esporre i dati sensibili al pubblico.
Limitazioni
Il contenuto XML da decodificare deve essere codificato in formato UTF-8.
Nello schema di file flat, verificare che i gruppi XML contenuti non abbiano numeri eccessivi della proprietà
max countimpostata su un valore maggiore di 1. Evitare di annidare un gruppo XML con un valore di proprietàmax countmaggiore di 1 all'interno di un altro gruppo XML con una proprietàmax countmaggiore di 1.Quando App per la logica di Azure analizza lo schema di file flat e quando lo schema consente la scelta del frammento successivo, App per la logica di Azure genera un simbolo e una stima per tale frammento. Se lo schema consente troppi costrutti, ad esempio più di 100.000, l'espansione dello schema diventa molto grande, che utilizza troppe risorse e troppo tempo.
Carica schema
Dopo aver creato lo schema, caricare lo schema in base al flusso di lavoro:
Consumo: aggiungere schemi agli account di integrazione per i flussi di lavoro a consumo
Standard: aggiungere schemi agli account di integrazione per i flussi di lavoro Standard
aggiungere un'azione di codifica per file flat
Nel portale di Azure apri la risorsa dell'app per la logica.
Nella finestra di progettazione aprire il flusso di lavoro.
Se il flusso di lavoro non ha un trigger o altre azioni necessarie per il flusso di lavoro, aggiungere prima tali operazioni.
In questo esempio viene usato il trigger Request denominato Quando viene ricevuta una richiesta HTTP. Per aggiungere un trigger, vedere Aggiungere un trigger per avviare il flusso di lavoro.
Nella finestra di progettazione seguire questa procedura generale per aggiungere l'azione predefinita denominata Codifica file flat.
Viene visualizzato il riquadro delle informazioni sull'azione con la scheda Parametri selezionata.
Nel parametro Contenuto dell'azione specificare il contenuto XML da codificare, ovvero l'output del trigger o di un'azione precedente, seguendo questa procedura:
Selezionare all'interno della casella Contenuto e quindi selezionare l'icona a forma di fulmine per aprire l'elenco di contenuto dinamico.
Nell'elenco di contenuto dinamico selezionare il contenuto XML da codificare.
L'esempio seguente mostra l'elenco dei contenuti dinamici aperto, l'output del trigger Quando viene ricevuta una richiesta HTTP e il contenuto Corpo selezionato dall'output del trigger.
Note
Se Body non viene visualizzato nell'elenco di contenuto dinamico, accanto all'etichetta di sezione Quando viene ricevuta una richiesta HTTP , selezionare Visualizza altro. È anche possibile immettere direttamente il contenuto da codificare nella casella Contenuto.
Nell'elenco Nome schema, selezionare lo schema.
Note
Se l'elenco di schemi è vuoto, la causa potrebbe essere:
- La risorsa dell'app per la logica non è collegata a un account di integrazione.
- L'account di integrazione collegato non contiene file di schema.
- La risorsa dell'app per la logica non contiene file di schema. Questo motivo si applica solo alle app per la logica Standard.
Per aggiungere altri parametri facoltativi all'azione, selezionarli dall'elenco Parametri avanzati .
Parametro valore Descrizione Modalità di generazione di nodi vuoti ForcedDisabled o HonorSchemaNodeProperty o ForcedEnabled Modalità da usare per la generazione di nodi vuoti con codifica file flat.
Per BizTalk, lo schema di file flat ha una proprietà che controlla la generazione di nodi vuoti. È possibile seguire il comportamento della proprietà di generazione di nodi vuoti per lo schema di file flat. In alternativa, è possibile usare questa impostazione per fare in modo che App per la logica di Azure generi o ometta nodi vuoti. Per altre informazioni, vedere Tag per elementi vuoti.Normalizzazione XML Sì o No Impostazione per abilitare o disabilitare la normalizzazione XML nella codifica file flat. Per altre informazioni, vedere XmlTextReader.Normalization. Salvare il flusso di lavoro. Sulla barra degli strumenti della finestra di progettazione selezionare Salva.
Aggiungere un'azione di decodifica file flat
Nel portale di Azure apri la risorsa dell'app per la logica.
Nella finestra di progettazione aprire il flusso di lavoro.
Se il flusso di lavoro non ha un trigger o altre azioni necessarie per il flusso di lavoro, aggiungere prima tali operazioni.
In questo esempio viene usato il trigger Request denominato Quando viene ricevuta una richiesta HTTP. Per aggiungere un trigger, vedere Aggiungere un trigger per avviare il flusso di lavoro.
Nella finestra di progettazione seguire questa procedura generale per aggiungere l'azione predefinita denominata Decodifica file flat.
Nel parametro Content dell'azione specificare il contenuto XML da decodificare come output dal trigger o da un'azione precedente seguendo questa procedura:
Selezionare all'interno della casella Contenuto e quindi selezionare l'icona a forma di fulmine per aprire l'elenco di contenuto dinamico.
Nell'elenco di contenuto dinamico selezionare il contenuto XML da decodificare.
L'esempio seguente mostra l'elenco dei contenuti dinamici aperto, l'output del trigger Quando viene ricevuta una richiesta HTTP e il contenuto Corpo selezionato dall'output del trigger.
Note
Se Body non viene visualizzato nell'elenco di contenuto dinamico, selezionare Visualizza altro accanto all'etichetta di sezione Quando viene ricevuta una richiesta HTTP . È anche possibile immettere direttamente il contenuto da decodificare nella casella Contenuto.
Nell'elenco Nome schema, selezionare lo schema.
Note
Se l'elenco di schemi è vuoto, la causa potrebbe essere:
- La risorsa dell'app per la logica non è collegata a un account di integrazione.
- L'account di integrazione collegato non contiene file di schema.
- La risorsa dell'app per la logica non contiene file di schema. Questo motivo si applica solo alle app per la logica Standard.
Salvare il flusso di lavoro. Sulla barra degli strumenti della finestra di progettazione selezionare Salva.
A questo punto la configurazione dell'azione di decodifica file flat è terminata. In un'app reale è possibile archiviare i dati decodificati in un'app line-of-business (LOB), ad esempio Salesforce. In alternativa è possibile inviare i dati decodificati a un partner commerciale. Per inviare l'output dall'azione di decodifica a Salesforce o al partner commerciale, usare gli altri connettori disponibili in App per la logica di Azure:
- Connettori gestiti in App per la logica di Azure
- Connettori predefiniti in App per la logica di Azure
Aggiungi un'azione di generazione dello schema per file flat
L'azione Generazione dello schema di file flat genera in fase di esecuzione uno schema XSD per file flat a partire dal contenuto di esempio di un file flat fornito come input. Lo schema generato è compatibile con le annotazioni di file flat BizTalk, ad esempio b:schemaInfo, b:recordInfoe b:fieldInfo.
Nel portale di Azure apri la risorsa dell'app per la logica.
Nella finestra di progettazione aprire il flusso di lavoro.
Se il flusso di lavoro non ha un trigger o altre azioni necessarie per il flusso di lavoro, aggiungere prima tali operazioni.
In questo esempio viene usato il trigger Request denominato Quando viene ricevuta una richiesta HTTP. Per aggiungere un trigger, vedere Aggiungere un trigger per avviare il flusso di lavoro.
Nella finestra di progettazione seguire questa procedura generale per aggiungere l'azione predefinita denominata Generazione dello schema file flat.
Nel parametro Content dell'azione specificare il contenuto dell'esempio di file flat.
È possibile usare il contenuto dall'output del trigger o da un'azione precedente:
Selezionare all'interno della casella Contenuto , quindi selezionare l'icona a forma di fulmine per aprire l'elenco di contenuto dinamico.
Nell'elenco di contenuto dinamico selezionare il contenuto del file flat di esempio.
Impostare il parametro Struttura del record su Delimited o Positional.
La finestra di progettazione usa parametri dinamici (
getFlatFileSchemaGenerationParameters) per visualizzare il set di parametri corretto, in base al valore selezionatorecordStructure.L'esempio seguente illustra i parametri di configurazione per la struttura di record delimitati :
L'esempio seguente illustra i parametri di configurazione per la struttura dei record Positional :
Per la struttura di record selezionata, impostare i parametri obbligatori e facoltativi.
Parametri comuni (delimitati e posizionali)
Parametro Type Obbligatorio Descrizione contentAny Sì Contenuto dei dati di esempio di file flat (stringa o binario). recordStructureString Sì DelimitedoPositional.hasHeaderBoolean Sì Se true, considera la prima riga di record come intestazione e usa tali valori come nomi di campo generati.recordDelimiterString No Delimitatore di record (riga). L'analisi usa questo valore letteralmente (nessuna decodifica esadecimale). Usare i caratteri effettivi, ad esempio \r\no\n. Per usare la divisione di riga predefinita, omettere questo valore. L'XSD generato può generare un valore esadecimale (0x0D0A) nelle annotazioni dello schema.recordDelimiterOrderString No Posizionamento del delimitatore: Infix(impostazione predefinita),PrefixoPostfix.rootElementNameString No Nome dell'elemento radice per l'XSD. Impostazione predefinita: Root.targetNamespaceString No Spazio dei nomi di destinazione dello schema. Impostazione predefinita: http://schemas.microsoft.com/FlatFile/{RootElementName}recordNameString No Nome dell'elemento record figlio che si ripete. Impostazione predefinita: {RootElementName}_RecordParametri specifici delimitati
Parametro Type Obbligatorio Descrizione fieldDelimiterString Sì Caratteri delimitatori di campo, ad esempio virgole, punto e virgola, tabulazioni, Specificare i caratteri effettivi, ad esempio ,,;o\t. L'analisi usa il confronto tra stringhe letterali (nessuna decodifica esadecimale).fieldDelimiterOrderString Sì Posizionamento del delimitatore: Infix(impostazione predefinita),PrefixoPostfix.escapeCharacterString No Carattere di escape per delimitatori incorporati nei valori dei campi. Specificare il carattere effettivo, ad esempio \o". L'analisi usa la corrispondenza letterale (nessuna decodifica esadecimale).Parametri specifici della posizione
Parametro Type Obbligatorio Descrizione countPositionsByByteBoolean Sì Misura le lunghezze dei campi in byte ( true) o caratteri (false). Rilevante per le codifiche multibyte.fieldPositionsArray Sì Array di oggetti di posizione dei campi, ciascuno con lengthejustification.fieldPositions[].lengthInteger Sì Larghezza fissa del campo. fieldPositions[].justificationString Sì Controlla l'allineamento della spaziatura interna. Immettere manualmente il valore LeftoRight(senza distinzione tra maiuscole e minuscole).
Nota: la finestra di progettazione corrente non fornisce un elenco che consente di selezionare un valore.Prima di eseguire il flusso di lavoro, controlla il comportamento del delimitatore e del carattere di escape:
Comportamento del delimitatore di record
Aspect Behavior Analisi sintattica (suddivisione delle righe) options.RecordDelimiter(valore utente non elaborato) passa direttamente aString.Split(). Nessuna decodifica esadecimale.Output XSD GetRecordDelimiterForSchema()converte come segue:
- Se ha il prefisso0x, lascia passare.
- Se vuoto, il valore predefinito è0x0D0A.
- In caso contrario, convertire caratteri letterali in byte esadecimale.Input esadecimale No per l'analisi sintattica. Se si fornisce 0x0D0A, il parser tenta di suddividere in corrispondenza del testo letterale0x0D0A.Cosa fornire Usare i caratteri letterali: \r\n,\n, oppure ometterli del tutto; in tal caso, per impostazione predefinita, la suddivisione avviene in base a\r\n/\n/\r.Comportamento del delimitatore di campo
Aspect Behavior Analisi (suddivisione dei campi) options.FieldDelimiterpassa direttamente aSplitDelimitedRecord()come confronto di stringhe letterali. Nessuna decodifica esadecimale.Output XSD Se il valore inizia con 0x, generachild_delimiter_type="hex"; in caso contrario,"char".Inserimento esadecimale No per l'analisi sintattica. 0x09corrisponde al testo letterale0x09, non alla tabulazione.Cosa fornire Usare i caratteri effettivi: ,,;,\t,|e così via.Comportamento del carattere di escape
Aspect Behavior Analisi sintattica (escape dei caratteri) options.EscapeCharacterviene confrontato letteralmente. In caso di corrispondenza, il carattere successivo viene interpretato così com'è. Nessuna decodifica esadecimale.Output in XSD Se il valore inizia con 0x, generaescape_char_type="hex"; in caso contrario,"char".Input esadecimale No per l'analisi sintattica. Stesso comportamento di corrispondenza letterale. Cosa fornire Usare il carattere effettivo, \ad esempio o".Salvare il flusso di lavoro. Sulla barra degli strumenti della finestra di progettazione selezionare Salva.
Per usare l'output dello schema generato per decodificare o codificare azioni, salvare manualmente l'output come
.xsdfile.Caricare il
.xsdfile nell'account di integrazione. In alternativa, per i flussi di lavoro Standard, caricare il file nella cartella Artifacts della risorsa dell'app per la logica. È anche possibile usare l'API REST per caricare l'artefatto dello schema.Lo schema generato viene restituito nel corpo dell'azione come stringa:
@body('Flat_File_Schema_Generation')Facoltativamente, usare gli esempi di definizione seguenti:
Esempio delimitato
{ "Flat_File_Schema_Generation": { "type": "FlatFileSchemaGeneration", "runAfter": {}, "inputs": { "content": "@triggerBody()", "recordStructure": "Delimited", "fieldDelimiter": ";", "fieldDelimiterOrder": "Infix", "recordDelimiter": "\\r\\n", "hasHeader": true, "rootElementName": "MerchantOrders", "targetNamespace": "http://schemas.contoso.com/FlatFile/MerchantOrders", "recordName": "MerchantOrder", "escapeCharacter": "\\" } } }Esempio posizionale
{ "Flat_File_Schema_Generation": { "type": "FlatFileSchemaGeneration", "runAfter": {}, "inputs": { "content": "@triggerBody()", "recordStructure": "Positional", "fieldPositions": [ { "length": 6, "justification": "Left" }, { "length": 5, "justification": "Left" }, { "length": 3, "justification": "Left" } ], "countPositionsByByte": false, "hasHeader": false, "rootElementName": "Ledger", "targetNamespace": "http://schemas.contoso.com/FlatFile/Ledger" } } }Passare lo schema generato all'azione successiva:
{ "Next_Action": { "inputs": { "schema": "@body('Flat_File_Schema_Generation')" }, "runAfter": { "Flat_File_Schema_Generation": [ "Succeeded" ] } } }Esaminare l'output, le regole di inferenza e i problemi noti:
Risultato:
Proprietà Type Descrizione bodyString Generata una stringa XML contenente lo schema XSD compatibile con BizTalk. Contenuto XSD generato di alto livello:
-
b:schemaInfoannotazione constandard="Flat File",root_referenceecodepage="65001"(UTF-8) -
b:recordInfoannotazioni per record constructure,child_delimiter,child_delimiter_type,child_ordere gli elementi facoltativiescape_chareescape_char_type -
b:fieldInfoannotazioni per campo conjustificatione, per gli schemi posizionali,pos_offsetepos_length - Inferenza del tipo di dati da dati di esempio:
xs:string,xs:integer,xs:decimal,xs:boolean,xs:date,xs:dateTime
Inferenza del tipo di dati dal primo record di dati non vuoto:
Valore di esempio Tipo XSD inferito trueoppurefalsexs:boolean12345xs:integer19.99xs:decimal2025-01-15xs:date2025-01-15T10:30:00xs:dateTimeQualsiasi altro valore xs:stringOrdine figlio (posizionamento del delimitatore):
Ordine Meaning Esempio ( ;)InfixDelimitatore tra campi A;B;CPrefixDelimitatore prima di ogni campo ;A;B;CPostfixDelimitatore dopo ogni campo A;B;C;Gestione delle intestazioni:
- Quando
hasHeaderètrue, la prima riga viene considerata come nomi di campo, non dati. - I valori dell'intestazione vengono convertiti in nomi di elementi XML validi. I caratteri speciali diventano
_e le cifre iniziali ottengono un_prefisso. - Se esiste solo una riga di intestazione e non esistono record di dati, per impostazione predefinita i campi sono
xs:string. - Se un campo di intestazione è vuoto, il nome del campo generato esegue il fallback a
Field{N}. - Quando
hasHeaderèfalse, i campi sono denominati automaticamenteField1,Field2,Field3e così via.
-
Limitazioni e problemi noti
| Limitation | Descrizione |
|---|---|
| L'inferenza di tipo si basa su un singolo record. | Il primo record di dati non vuoto determina i tipi di colonna. |
| Solo tipo di record singolo | L'azione genera una struttura di record ripetuta e non supporta layout di record eterogenei. |
| Nessun record annidato o gerarchico | Lo schema generato ha una struttura piatta, ossia presenta un elemento radice con un record figlio ripetuto e relativi campi. |
| I limiti posizionale non vengono rilevati automaticamente. | È necessario specificare le lunghezze esatte dei campi in fieldPositions. |
| Solo pagina codici UTF-8 | Genera insiemi di schemi codepage="65001" e non consente di selezionare la codifica. |
| Il comportamento dei caratteri di escape viene interpretato alla lettera. | La gestione delle sequenze di escape corrisponde al valore letterale e salta solo il carattere singolo successivo. |
recordName Predefinito |
Se non specificato, il valore predefinito è {RootElementName}_Record. |
| Input di giustificazione del Designer |
fieldPositions[].justification supporta solo Left e Right. |
| Problema | Resolution |
|---|---|
| Numero di campi errato | Verificare che fieldDelimiterOrder corrisponda al formato dei dati (Infix, Prefix, Postfix). |
| I valori esadecimali sono solo in uscita | Anche se l'XSD generato può mostrare i delimitatori come valori esadecimali (ad esempio, 0x0D0A) e riportare nelle annotazioni valori con prefisso 0x, l'analisi sintattica non decodifica l'input esadecimale. Per l'analisi, fornire sempre caratteri delimitatori effettivi (\r\n, \n, \t,, , ;). |
| I nomi dei campi di intestazione sembrano insoliti | I valori di intestazione vengono sanificati in nomi XML validi. Ad esempio, 1st Qty diventa _1st_Qty. |
| Comportamento del delimitatore di record | Se recordDelimiter viene omesso, l'analisi divide in base ai caratteri di nuova riga effettivi (\r\n, \n, \r). Nelle annotazioni XSD generate, per impostazione predefinita il delimitatore di record è 0x0D0A. |
Risoluzione dei problemi
| Error | Cause | Resolution |
|---|---|---|
The flat file sample data content is required. |
content è null o vuoto. |
Verificare che il trigger o l'azione precedente fornisca contenuto di file flat non vuoto. |
The schema generation options are required. |
Errore interno: l'oggetto options è Null. | Verificare che la definizione del flusso di lavoro contenga input validi. |
Failed to generate flat file schema: '{details}'. |
Errore di runtime imprevisto, ad esempio errori di codifica o dati non validi. | Esaminare i dettagli o il messaggio di errore interno per la causa radice. |
The field delimiter is required for delimited record structure. |
recordStructure è Delimited, ma fieldDelimiter è mancante o vuoto. |
Immettere fieldDelimiter, ad esempio una virgola, un punto e virgola o una tabulazione. Non immettere valori esadecimali come 0x09; immettere invece caratteri effettivi come \t. |
The field positions array is required for positional record structure. |
recordStructure è Positional ma fieldPositions è mancante o vuoto. |
Specificare fieldPositionslength e justification per ogni campo. |
The flat file sample data contains no data records. |
Non esistono righe di dati non vuote (oppure è presente solo la riga di intestazione quando hasHeader=true). |
Specificare almeno un record di dati non vuoto nel contenuto di esempio. |
Positional field '{N}' exceeds the record length. Record length: '{len}', position: '{pos}', field length: '{fieldLen}'. |
La lunghezza complessiva dei campi supera la lunghezza del record. | Regolare le lunghezze fieldPositions o verificare se countPositionsByByte deve essere modificato. |
Testare il flusso di lavoro
Per attivare il flusso di lavoro, seguire questa procedura:
Nel trigger Richiesta trovare il parametro HTTP POST URL e copiare l'URL.
Aprire lo strumento di richiesta HTTP e usare le istruzioni per inviare una richiesta HTTP all'URL copiato, incluso il metodo previsto dal trigger di Richiesta.
In questo esempio viene usato il metodo
POSTcon l'URL.Includere il contenuto XML da codificare o decodificare nel corpo della richiesta.
Al termine dell'esecuzione del flusso di lavoro, passare alla cronologia di esecuzione del flusso di lavoro ed esaminare gli input e gli output dell'azione File flat .