Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- Visual Studio Code med ett tillägg från Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – verktyg för nätverkskonsol
- Bruno
- curl
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 countegenskapen inställda på ett värde som är större än 1. Undvik att kapsla en XML-grupp med ettmax countegenskapsvärde större än 1 i en annan XML-grupp med enmax countegenskap 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:
Förbrukning: Lägga till scheman i integrationskonton för förbrukningsarbetsflöden
Standard: Lägga till scheman i integrationskonton för Standard-arbetsflöden
Lägg till en flat filkodningsåtgärd
Öppna logikappresursen i Azure Portal.
Ö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.
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.
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:
Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.
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.
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 .
I listan Schemanamn väljer du ditt schema.
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.
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. Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.
Lägg till en plan filkodningsåtgärd
Öppna logikappresursen i Azure Portal.
Ö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.
I designern följer du de här allmänna stegen för att lägga till den inbyggda åtgärden Flat File Decoding.
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:
Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.
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.
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 .
I listan Schemanamn väljer du ditt schema.
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.
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.
Öppna logikappresursen i Azure Portal.
Ö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.
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.
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:
Välj i rutan Innehåll och välj sedan blixtikonen för att öppna listan med dynamiskt innehåll.
I listan med dynamiskt innehåll väljer du det flata exempelfilinnehållet.
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 valdarecordStructurevärdet.I följande exempel visas konfigurationsparametrarna för avgränsad poststruktur:
Följande exempel visar konfigurationsparametrarna för poststrukturen av typen Positional:
Ange obligatoriska och valfria parametrar för den valda poststrukturen.
Vanliga parametrar (avgränsade och positionella)
Parameter Type Obligatoriskt beskrivning contentAny Ja Innehåll i exempeldata för flatfil (sträng eller binär). recordStructureString Ja Antingen DelimitedellerPositional.hasHeaderBoolean Ja Om true, behandlar den den första postraden som rubrikrad och använder dessa värden som de genererade fältnamnen.recordDelimiterString No Postavgränsare (rad). Parsning använder det här värdet bokstavligen (ingen hexdekodning). Använd faktiska tecken, till exempel \r\neller\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.recordDelimiterOrderString No Avgränsningsplacering: Infix(standard),Prefix, ellerPostfix.rootElementNameString No Rotelementnamnet för XSD. Förvald: Root.targetNamespaceString No Målnamnområde för schemat. Standardvärde: http://schemas.microsoft.com/FlatFile/{RootElementName}recordNameString No Namn på det upprepande underordnade postelementet. Standardvärde: {RootElementName}_RecordAvgränsade parametrar
Parameter Type Obligatoriskt beskrivning fieldDelimiterString 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).fieldDelimiterOrderString Ja Avgränsningsplacering: Infix(standard),Prefix, ellerPostfix.escapeCharacterString 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 countPositionsByByteBoolean Ja Mäter fältlängder i byte ( true) eller tecken (false). Relevant för kodningar i flerabyte.fieldPositionsArray Ja Matris med fältpositionsobjekt, var och en med lengthochjustification.fieldPositions[].lengthInteger Ja Fast bredd på fältet. fieldPositions[].justificationString Ja Styr justeringen av padding. Ange värdet LeftellerRight(skiftlägesokänsligt) manuellt.
Obs! Den aktuella designern tillhandahåller ingen lista där du kan välja ett värde.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 tillString.Split(). Ingen hexdekodning.XSD-utdata GetRecordDelimiterForSchema()konverterar på följande sätt:
- Om den har prefixet0x, släpp igenom.
– Om det är tomt är standardvärdet0x0D0A.
- Annars, konvertera literaltecken till hexbyte.Hex-indata Nej för parsning. Om du anger 0x0D0Aförsöker parsning att dela upp literaltexten0x0D0A.Vad du ska ange Använd de bokstavliga tecknen \r\n,\neller 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.FieldDelimiterskickas direkt tillSplitDelimitedRecord()som en literal strängjämförelse. Ingen hexdekodning.XSD-utdata Om värdet börjar med 0x, returnerarchild_delimiter_type="hex"; annars"char".Hex-indata Nej för parsning. 0x09matchar den bokstavliga texten0x09, inte tabbtecken.Vad du ska ange Använd faktiska tecken: ,,;,\t,|och så vidare.Beteende för escape-tecken
Aspect Behavior Tolkning (specialteckenhantering) options.EscapeCharacterjä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, genererarescape_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".Spara arbetsflödet. I verktygsfältet för designern väljer du Spara.
Om du vill använda de genererade schemautdata för avkodnings- eller kodningsåtgärder sparar du utdata manuellt som en
.xsdfil..xsdLadda 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')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" ] } } }Granska utdata, slutsatsdragningsregler och kända problem:
Resultat:
Egenskap Type beskrivning bodyString Genererat BizTalk-kompatibelt XSD-schema som en XML-sträng. Övergripande genererat XSD-innehåll:
-
b:schemaInfokommentar medstandard="Flat File",root_referenceochcodepage="65001"(UTF-8) -
b:recordInfoanteckningar per post medstructure,child_delimiter,child_delimiter_type,child_orderoch valfriaescape_charochescape_char_type -
b:fieldInfoannoteringar per fält medjustificationoch, för positionsscheman,pos_offsetochpos_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 trueellerfalsexs:boolean12345xs:integer19.99xs:decimal2025-01-15xs:date2025-01-15T10:30:00xs:dateTimeNågot annat värde xs:stringUnderordning (placering av avgränsare):
Beställ Meaning Exempel ( ;)InfixAvgränsare mellan fält A;B;CPrefixAvgränsare före varje fält ;A;B;CPostfixAvgränsare efter varje fält A;B;C;Sidhuvudhantering:
- När
hasHeaderärtruebehandlas 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ärfalse, namngesField1fä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:
I utlösaren Förfrågning letar du upp parametern HTTP POST URL och kopierar URL:en.
Ö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
POSTmed webbadressen.Inkludera DET XML-innehåll som du vill koda eller avkoda i begärandetexten.
När arbetsflödet är klart går du till arbetsflödets körningshistorik och undersöker flatfil-åtgärdens indata och utdata.