Koda, avkoda eller generera scheman för flata filer i Azure Logic Apps

Gäller för: Azure Logic Apps (Förbrukning + Standard)

För B2B-integreringsarbetsflöden (business-to-business) behöver du ofta konvertera data mellan XML- och flata filformat innan du kan utbyta dessa data med handelspartner.

Den här guiden visar hur du använder inbyggda anslutningsåtgärder för Flat File för att koda eller avkoda XML och generera BizTalk-kompatibla flata filscheman från exempeldata.

Teknisk referens för anslutningar

Flat File Connector innehåller följande åtgärder för kodning, avkodning och schemagenerering:

Action Consumption Norm
Flatfilkodning Ja Ja
Avkodning av flatfil Ja Ja
Generering av schema för flatfil No Ja
Logik-app Miljö
Consumption Azure Logic Apps för många användare
Norm Azure Logic Apps för en enda kund, App Service Environment v3 (endast Windows-planer) och hybriddistribution

Mer information finns i Inbyggda anslutningskopplingar för integrationskonto.

Förutsättningar

  • Ett Azure-konto och prenumeration. Skaffa ett kostnadsfritt Azure-konto.

  • Resursen och arbetsflödet för logikappen där du vill använda åtgärder för flat filer.

    Flat File-åtgärder innehåller inga utlösare. Arbetsflödet kan börja med valfri utlösare eller använda valfri åtgärd för att hämta käll-XML:en.

    Exemplen i den här artikeln använder utlösaren Begäran med namnet När en HTTP-begäran tas emot.

    Mer information finns i:

  • En integrationskontoresurs för att definiera och lagra artefakter för företagsintegrering och B2B-arbetsflöden.

    • Både integrationskontot och logikappresursen måste finnas i samma Azure-prenumeration och Azure-region.

    • Innan du börjar arbeta med Flat File-åtgärder måste du länka logikappen Förbrukning eller länka standardlogikappen till integrationskontot för att arbeta med artefakter som handelspartner och avtal. Du kan länka ett integrationskonto till flera förbruknings- eller standardlogikappresurser för att dela samma artefakter.

    Tips/Råd

    Om du inte arbetar med B2B-artefakter som handelspartner och avtal i Standard-arbetsflöden kanske du inte behöver ett integrationskonto. I stället kan du ladda upp scheman direkt till din standardlogikappresurs. Oavsett kan du använda samma schema i alla underordnade arbetsflöden i samma logikapputvecklingsmiljö. Om du vill använda samma schema över flera logikappresurser måste du använda och länka ett integrationskonto.

  • Ett platt filschema som anger hur du kodar eller avkodar XML-innehåll.

    I standardarbetsflöden låter åtgärder för Flat File dig välja ett schema från antingen ett länkat integrationskonto eller ett som du tidigare har laddat upp till din logikapp, men inte båda samtidigt.

    Mer information finns i Lägga till scheman i integrationskonton.

  • Installera eller använd ett verktyg som kan skicka HTTP-begäranden för att testa din lösning, till exempel:

    Varning

    För scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, bör du använda ett verktyg som skyddar dina data med nödvändiga säkerhetsfunktioner. Verktyget bör fungera offline eller lokalt och behöver inte logga in på ett onlinekonto eller synkronisera data till molnet. När du använder ett verktyg med dessa egenskaper minskar du risken för att exponera känsliga data för allmänheten.

Begränsningar

  • XML-innehåll som du vill avkoda måste vara kodat i UTF-8-format.

  • I ditt flata filschema kontrollerar du att de inneslutna XML-grupperna inte har alltför många av max count egenskapen inställda på ett värde som är större än 1. Undvik att kapsla en XML-grupp med ett max count egenskapsvärde större än 1 i en annan XML-grupp med en max count egenskap större än 1.

  • När Azure Logic Apps parsar det platta filschemat, och när schemat tillåter valet av nästa fragment, genererar Azure Logic Apps en symbol och en förutsägelse för fragmentet. Om schemat tillåter för många konstruktioner, till exempel mer än 100 000, blir schemaexpansionen mycket stor, vilket förbrukar för många resurser och för mycket tid.

Ladda upp schema

När du har skapat schemat laddar du upp schemat baserat på ditt arbetsflöde:

Lägg till en flat filkodningsåtgärd

  1. Öppna logikappresursen i Azure Portal.

  2. Öppna arbetsflödet i designern.

    Om arbetsflödet inte har någon utlösare eller andra åtgärder som arbetsflödet behöver lägger du först till dessa åtgärder.

    I det här exemplet används utlösaren Förfrågning med namnet När en HTTP-begäran tas emot. Information om hur du lägger till en utlösare finns i Lägga till en utlösare för att starta arbetsflödet.

  3. I designern följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Flat File Encoding.

    Åtgärdsinformationsfönstret öppnas med fliken Parametrar markerad.

  4. I åtgärdens innehållsparameter anger du DET XML-innehåll som ska kodas, som antingen är utdata från utlösaren eller från en tidigare åtgärd, genom att följa dessa steg:

    1. Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.

    2. I listan med dynamiskt innehåll väljer du det XML-innehåll som ska kodas.

    I följande exempel visas den öppna listan med dynamiskt innehåll, utdata från utlösaren När en HTTP-begäran tas emot och det valda brödtextinnehållet från utlösarens utdata.

    Skärmbild som visar azure-portalen, arbetsflödesdesignern, åtgärden Flat File Encoding och innehållsparametern med dynamisk innehållslista och innehåll som valts för kodning.

    Kommentar

    Om Brödtext inte visas i listan med dynamiskt innehåll väljer du Visa mer bredvid avsnittsetiketten När en HTTP-begäran tas emot. Du kan också ange innehållet som ska kodas direkt i rutan Innehåll .

  5. I listan Schemanamn väljer du ditt schema.

    Skärmbild som visar designern och öppnade listan Schemanamn med valt schema för kodning.

    Kommentar

    Om schemalistan är tom kan orsaken vara:

    • Resursen för logikapp är inte länkad till ett integrationskonto.
    • Det länkade integrationskontot innehåller inga schemafiler.
    • Logikappresursen innehåller inga schemafiler. Den här orsaken gäller endast för standardlogikappar.
  6. Om du vill lägga till andra valfria parametrar i åtgärden väljer du dessa parametrar i listan Avancerade parametrar .

    Parameter Värde beskrivning
    Läge för tom nodgenerering ForcedDisabled eller HonorSchemaNodeProperty eller ForcedEnabled Läget som ska användas för tom nodgenerering med flat filkodning.

    För BizTalk har det platta filschemat en egenskap som styr den tomma nodgenereringen. Du kan följa egenskapsbeteendet för tom nodgenerering för ditt flata filschema. Du kan också använda den här inställningen för att låta Azure Logic Apps generera eller utelämna tomma noder. Mer information finns i Taggar för tomma element.
    XML-normalisering Ja eller Nej Inställningen för att aktivera eller inaktivera XML-normalisering i flat filkodning. Mer information finns i XmlTextReader.Normalization.
  7. Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.

Lägg till en plan filkodningsåtgärd

  1. Öppna logikappresursen i Azure Portal.

  2. Öppna arbetsflödet i designern.

    Om arbetsflödet inte har någon utlösare eller andra åtgärder som arbetsflödet behöver lägger du först till dessa åtgärder.

    I det här exemplet används utlösaren Förfrågning med namnet När en HTTP-begäran tas emot. Information om hur du lägger till en utlösare finns i Lägga till en utlösare för att starta arbetsflödet.

  3. I designern följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Flat File Decoding.

  4. I åtgärdens innehållsparameter anger du DET XML-innehåll som ska avkodas, antingen som utdata från utlösaren eller från en tidigare åtgärd genom att följa dessa steg:

    1. Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.

    2. I listan med dynamiskt innehåll väljer du det XML-innehåll som ska avkodas.

    I följande exempel visas den öppna listan med dynamiskt innehåll, utdata från utlösaren När en HTTP-begäran tas emot och det valda brödtextinnehållet från utlösarens utdata.

    Skärmbild som visar azure-portalen, arbetsflödesdesignern, åtgärden flat filavkodning och innehållsparametern med dynamisk innehållslista och innehåll som valts för avkodning.

    Kommentar

    Om Brödtext inte visas i listan med dynamiskt innehåll väljer du Visa mer bredvid avsnittsetiketten När en HTTP-begäran tas emot . Du kan också ange innehållet direkt för att avkoda i rutan Innehåll .

  5. I listan Schemanamn väljer du ditt schema.

    Skärmbild som visar designern och öppnade listan Schemanamn med valt schema för avkodning.

    Kommentar

    Om schemalistan är tom kan orsaken vara:

    • Resursen för logikapp är inte länkad till ett integrationskonto.
    • Det länkade integrationskontot innehåller inga schemafiler.
    • Logikappresursen innehåller inga schemafiler. Den här orsaken gäller endast för standardlogikappar.
  6. Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.

Nu är du klar med att konfigurera avkodningsåtgärden för flata filer. I en verklig app kanske du vill lagra de avkodade data i en verksamhetsspecifik app (LOB), till exempel Salesforce. Eller så kan du skicka de avkodade data till en handelspartner. Om du vill skicka utdata från avkodningsåtgärden till Salesforce eller till din handelspartner använder du de andra anslutningsprogrammen som är tillgängliga i Azure Logic Apps:

Lägga till en plan filschemagenereringsåtgärd

Åtgärden Flat File Schema Generation genererar ett platt XSD-filschema vid körning från exempel på platt filinnehåll som du anger som indata. Det genererade schemat är kompatibelt med BizTalk-anteckningar för flatfiler, till exempel b:schemaInfo, b:recordInfo och b:fieldInfo.

  1. Öppna logikappresursen i Azure Portal.

  2. Öppna arbetsflödet i designern.

    Om arbetsflödet inte har någon utlösare eller andra åtgärder som arbetsflödet behöver lägger du först till dessa åtgärder.

    I det här exemplet används utlösaren Förfrågning med namnet När en HTTP-begäran tas emot. Information om hur du lägger till en utlösare finns i Lägga till en utlösare för att starta arbetsflödet.

  3. I Designer följer du dessa allmänna steg för att lägga till den inbyggda åtgärden med namnet Generering av schema för platt fil.

  4. I åtgärdens innehållsparameter anger du det flata filexempelinnehållet.

    Du kan använda innehåll från utlösarens utdata eller en tidigare åtgärd:

    1. Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.

    2. I listan med dynamiskt innehåll väljer du det flata exempelfilinnehållet.

  5. Ange parametern poststruktur till antingen avgränsad eller positionell.

    Designern använder dynamiska parametrar (getFlatFileSchemaGenerationParameters) för att visa rätt parameteruppsättning baserat på det valda recordStructure värdet.

    I följande exempel visas konfigurationsparametrarna för avgränsad poststruktur:

    Skärmbild som visar Azure-portalen, arbetsflödesdesignern, åtgärden för schemagenerering av flat fil och innehållsparametern med avgränsad poststruktur.

    Följande exempel visar konfigurationsparametrarna för poststrukturen av typen Positional:

    Skärmbilden visar Azure-portalen, arbetsflödesdesignern, åtgärden för generering av schema för flat file och innehållsparametern med positionell poststruktur.

  6. Ange obligatoriska och valfria parametrar för den valda poststrukturen.

    Vanliga parametrar (avgränsade och positionella)

    Parameter Type Obligatoriskt beskrivning
    content Any Ja Innehåll i exempeldata för flatfil (sträng eller binär).
    recordStructure String Ja Antingen Delimited eller Positional.
    hasHeader Boolean Ja Om true, behandlar den den första postraden som rubrikrad och använder dessa värden som de genererade fältnamnen.
    recordDelimiter String No Postavgränsare (rad). Parsning använder det här värdet bokstavligen (ingen hexdekodning). Använd faktiska tecken, till exempel \r\n eller \n. Om du vill använda standardraddelning utelämnar du det här värdet. Den genererade XSD:en kan generera ett hexvärde (0x0D0A) i schemaanteckningar.
    recordDelimiterOrder String No Avgränsningsplacering: Infix (standard), Prefix, eller Postfix.
    rootElementName String No Rotelementnamnet för XSD. Förvald: Root.
    targetNamespace String No Målnamnområde för schemat. Standardvärde: http://schemas.microsoft.com/FlatFile/{RootElementName}
    recordName String No Namn på det upprepande underordnade postelementet. Standardvärde: {RootElementName}_Record

    Avgränsade parametrar

    Parameter Type Obligatoriskt beskrivning
    fieldDelimiter String Ja Fältavgränsare, till exempel kommatecken, semikolon, flik, Ange faktiska tecken, till exempel ,, ;eller \t. Parsning använder literal strängjämförelse (ingen hex-avkodning).
    fieldDelimiterOrder String Ja Avgränsningsplacering: Infix (standard), Prefix, eller Postfix.
    escapeCharacter String No Escape-tecken för inbäddade avgränsare i fältvärden. Ange det faktiska tecknet, till exempel \ eller ". Parsning använder literalmatchning (ingen hexdekodning).

    Positionsspecifika parametrar

    Parameter Type Obligatoriskt beskrivning
    countPositionsByByte Boolean Ja Mäter fältlängder i byte (true) eller tecken (false). Relevant för kodningar i flerabyte.
    fieldPositions Array Ja Matris med fältpositionsobjekt, var och en med length och justification.
    fieldPositions[].length Integer Ja Fast bredd på fältet.
    fieldPositions[].justification String Ja Styr justeringen av padding. Ange värdet Left eller Right (skiftlägesokänsligt) manuellt.

    Obs! Den aktuella designern tillhandahåller ingen lista där du kan välja ett värde.
  7. Innan du kör arbetsflödet bör du granska avgränsnings- och escape-teckenbeteendet:

    Registrera avgränsningsbeteende

    Aspect Behavior
    Radtolkning (dela upp rader) options.RecordDelimiter (rå användarvärde) skickas direkt till String.Split(). Ingen hexdekodning.
    XSD-utdata GetRecordDelimiterForSchema() konverterar på följande sätt:

    - Om den har prefixet 0x, släpp igenom.
    – Om det är tomt är standardvärdet 0x0D0A.
    - Annars, konvertera literaltecken till hexbyte.
    Hex-indata Nej för parsning. Om du anger 0x0D0Aförsöker parsning att dela upp literaltexten 0x0D0A.
    Vad du ska ange Använd de bokstavliga tecknen \r\n, \n eller utelämna helt, vilket som standard innebär att strängen delas vid \r\n/\n/\r.

    Beteende för fältgränsare

    Aspect Behavior
    Parsning (dela upp fält) options.FieldDelimiter skickas direkt till SplitDelimitedRecord() som en literal strängjämförelse. Ingen hexdekodning.
    XSD-utdata Om värdet börjar med 0x, returnerar child_delimiter_type="hex"; annars "char".
    Hex-indata Nej för parsning. 0x09 matchar den bokstavliga texten 0x09, inte tabbtecken.
    Vad du ska ange Använd faktiska tecken: ,, ;, \t, |och så vidare.

    Beteende för escape-tecken

    Aspect Behavior
    Tolkning (specialteckenhantering) options.EscapeCharacter jämförs ordagrant. När en matchning sker tolkas nästa tecken som det är. Ingen hexdekodning.
    XSD-utdata Om värdet börjar med 0x, genererar escape_char_type="hex"; annars "char".
    Hexadecimalindata Nej för parsning. Samma beteende för literal matchning.
    Vad du ska ange Använd det faktiska tecknet, till exempel \ eller ".
  8. Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.

  9. Om du vill använda de genererade schemautdata för avkodnings- eller kodningsåtgärder sparar du utdata manuellt som en .xsd fil.

  10. .xsd Ladda upp filen till ditt integrationskonto. Eller, för Standard-arbetsflöden, laddar du upp filen till logikappresursens mapp Artifacts. Du kan också använda REST-API:et för att ladda upp schemaartefakten.

    Det genererade schemat returneras i åtgärdens utdatas brödtext som en sträng:

    @body('Flat_File_Schema_Generation')
    
  11. Du kan också använda följande definitionsexempel:

    Avgränsat exempel

    {
       "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": "\\"
          }
       }
    }
    

    Positionsexempel

    {
       "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"
          }
       }
    }
    

    Skicka det genererade schemat till nästa åtgärd:

    {
       "Next_Action": {
          "inputs": {
             "schema": "@body('Flat_File_Schema_Generation')"
          },
          "runAfter": {
             "Flat_File_Schema_Generation": [ "Succeeded" ]
          }
       }
    }
    
  12. Granska utdata, slutsatsdragningsregler och kända problem:

    Resultat:

    Egenskap Type beskrivning
    body String Genererat BizTalk-kompatibelt XSD-schema som en XML-sträng.

    Övergripande genererat XSD-innehåll:

    • b:schemaInfo kommentar med standard="Flat File", root_referenceoch codepage="65001" (UTF-8)
    • b:recordInfo anteckningar per post med structure, child_delimiter, child_delimiter_type, child_orderoch valfria escape_char och escape_char_type
    • b:fieldInfo annoteringar per fält med justification och, för positionsscheman, pos_offset och pos_length
    • Slutsatsdragning av datatyp från exempeldata: xs:string, xs:integer, xs:decimal, xs:boolean, , xs:datexs:dateTime

    Slutsatsdragning av datatyp från den första icke-tomma dataposten:

    Exempelvärde Härledd XSD-typ
    true eller false xs:boolean
    12345 xs:integer
    19.99 xs:decimal
    2025-01-15 xs:date
    2025-01-15T10:30:00 xs:dateTime
    Något annat värde xs:string

    Underordning (placering av avgränsare):

    Beställ Meaning Exempel (;)
    Infix Avgränsare mellan fält A;B;C
    Prefix Avgränsare före varje fält ;A;B;C
    Postfix Avgränsare efter varje fält A;B;C;

    Sidhuvudhantering:

    • När hasHeader är truebehandlas den första raden som fältnamn, inte data.
    • Rubrikvärden saneras till giltiga XML-elementnamn. Specialtecken blir _, och inledande siffror får ett _ prefix.
    • Om det bara finns en rubrikrad och inga dataposter finns, är standardvärdet för fälten xs:string.
    • Om ett rubrikfält är tomt återgår det genererade fältnamnet till Field{N}.
    • När hasHeader är false, namnges Field1fält automatiskt , Field2, Field3och så vidare.

Begränsningar och kända problem

Limitation beskrivning
Typinferens använder en enda post. Den första dataposten som inte är tom avgör kolumntyper.
Endast en posttyp Åtgärden genererar en upprepande poststruktur och stöder inte heterogena postlayouter.
Inga kapslade eller hierarkiska poster Det genererade schemat är platt, vilket innebär att du har ett rotelement med en upprepad underordnad post och fält.
Positionsgränser identifieras inte automatiskt. Du måste ange exakta fältlängder i fieldPositions.
Endast UTF-8-kodsida Genererade schemauppsättningar codepage="65001" och exponerar inte kodningsval.
Escape-character-beteendet är literalt. Escape-hanteringen matchar literalvärdet och hoppar bara över nästa enda tecken.
recordName standardvärde Om det är ospecificerat är standardvärdet {RootElementName}_Record.
Indata för designermotivering fieldPositions[].justification stöder endast Left och Right.
Issue Lösning
Fel antal fält Kontrollera att fieldDelimiterOrder matchar ditt dataformat (Infix, Prefix, Postfix).
Hexvärden är endast utdata Även om genererad XSD kan visa avgränsare som hexvärden (till exempel 0x0D0A) och passera genom 0x-prefixerade värden i anteckningar, avkodar parsning inte hexindata. För parsning anger du alltid faktiska avgränsartecken (\r\n, , \n\t, ,, ;).
Namn på rubrikfält ser oväntade ut Rubrikvärden saneras till giltiga XML-namn. Till exempel kommer 1st Qty att bli _1st_Qty.
Registrera avgränsningsbeteende Om recordDelimiter utelämnas parsar du delningar på faktiska nyradstecken (\r\n, \n, \r). I genererade XSD-annoteringar är standardvärdet för postavgränsare 0x0D0A.

Åtgärda problem

Error Orsak Lösning
The flat file sample data content is required. content är null eller tomt. Se till att den utlösande åtgärden eller föregående åtgärd tillhandahåller innehåll i en flatfil som inte är tomt.
The schema generation options are required. Internt fel: alternativobjektet är null. Kontrollera att arbetsflödesdefinitionen innehåller giltiga indata.
Failed to generate flat file schema: '{details}'. Oväntat körningsfel, till exempel teckenkodning eller felformaterade data. Kontrollera detaljerna eller det interna felmeddelandet för att hitta grundorsaken.
The field delimiter is required for delimited record structure. recordStructure är Delimited men fieldDelimiter saknas eller är tom. Ange fieldDelimiter, till exempel kommatecken, semikolon eller flik. Ange inte hextext, 0x09till exempel , ange faktiska tecken, \ttill exempel .
The field positions array is required for positional record structure. recordStructure är Positional men fieldPositions saknas eller är tom. Ange fieldPositions med length och justification för varje fält.
The flat file sample data contains no data records. Det finns inga tomma datarader (eller endast sidhuvud när hasHeader=true). Ange minst en datapost som inte är tom i exempelinnehållet.
Positional field '{N}' exceeds the record length. Record length: '{len}', position: '{pos}', field length: '{fieldLen}'. Den sammanlagda fältlängden överskrider postlängden. Justera fieldPositions längder eller kontrollera om countPositionsByByte ska ändras.

Testa arbetsflödet

Följ dessa steg för att utlösa arbetsflödet:

  1. I utlösaren Förfrågning letar du upp parametern HTTP POST URL och kopierar URL:en.

  2. Öppna http-begärandeverktyget och använd dess instruktioner för att skicka en HTTP-begäran till den kopierade URL:en, inklusive den metod som begärandeutlösaren förväntar sig.

    I det här exemplet används metoden POST med webbadressen.

  3. Inkludera DET XML-innehåll som du vill koda eller avkoda i begärandetexten.

  4. När arbetsflödet är klart går du till arbetsflödets körningshistorik och undersöker flatfil-åtgärdens indata och utdata.