Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: Azure Logic Apps (consumo + estándar)
En el caso de los flujos de trabajo de integración de negocio a negocio (B2B), a menudo es necesario convertir datos entre formatos xml y archivos planos antes de poder intercambiar estos datos con socios comerciales.
En esta guía se muestra cómo usar acciones del conector integrado de archivos planos para codificar o descodificar XML y generar esquemas de archivos planos compatibles con BizTalk a partir de datos de ejemplo.
Referencia técnica del conector
El conector de archivos planos incluye las siguientes acciones de codificación, descodificación y generación de esquemas:
| Action | Consumption | Estándar |
|---|---|---|
| Codificación de archivos planos | Sí | Sí |
| Descodificación de archivos planos | Sí | Sí |
| Generación de esquemas de archivos planos | No | Sí |
| Aplicación lógica | Medio ambiente |
|---|---|
| Consumption | Azure Logic Apps multiinquilino |
| Estándar | Implementación híbrida, Azure Logic Apps de un solo inquilino y App Service Environment v3 (solo planes de Windows) |
Para obtener más información, consulte Conectores integrados de la cuenta de integración.
Requisitos previos
Una cuenta y una suscripción de Azure. Obtenga una cuenta gratuita de Azure.
El recurso y flujo de trabajo de Logic App donde desea usar las operaciones de Flat File.
Las operaciones de archivos planos no incluyen ningún desencadenador. El flujo de trabajo puede comenzar con cualquier desencadenador o usar cualquier acción para incorporar el XML de origen.
En los ejemplos de este artículo se usa el desencadenador Solicitud denominado Cuando se recibe una solicitud HTTP.
Para obtener más información, consulte:
Un recurso de cuenta de integración para definir y almacenar artefactos para flujos de trabajo de integración empresarial y B2B.
Tanto la cuenta de integración como el recurso de aplicación lógica deben existir en la misma suscripción de Azure y en la misma región de Azure.
Antes de empezar a trabajar con operaciones de archivos planos, debe vincular la aplicación lógica de consumo o vincular la aplicación lógica estándar a la cuenta de integración para trabajar con artefactos como socios comerciales y contratos. Puede vincular una cuenta de integración a varios recursos de aplicaciones lógicas de tipo Consumo o Estándar para compartir los mismos artefactos.
Sugerencia
Si no está trabajando con artefactos B2B, como socios comerciales y contratos en flujos de trabajo estándar, es posible que no necesite una cuenta de integración. En su lugar, puede cargar esquemas directamente en el recurso de aplicación lógica estándar. En cualquier caso, puede usar el esquema en todos los flujos de trabajo secundarios dentro del mismo recurso de aplicación lógica. Para usar el mismo esquema en varios recursos de aplicación lógica, debe usar y vincular una cuenta de integración.
Esquema de archivo plano que especifica cómo codificar o descodificar contenido XML.
En flujos de trabajo estándar, las operaciones de archivo plano le permiten elegir un esquema de una cuenta de integración vinculada o de uno que haya cargado previamente en su aplicación lógica, pero no ambos al mismo tiempo.
Para obtener más información, consulte Adición de esquemas a cuentas de integración.
Instale o use una herramienta que pueda enviar solicitudes HTTP para probar la solución, por ejemplo:
- Extensión de Visual Studio Code con una de Visual Studio Marketplace
- Invoke-RestMethod de PowerShell
- Microsoft Edge - Herramienta de consola de red
- Bruno
- curl
Precaución
En escenarios en los que tiene datos confidenciales, como credenciales, secretos, tokens de acceso, claves de API y otra información similar, asegúrese de usar una herramienta que proteja los datos con las características de seguridad necesarias. La herramienta debe funcionar sin conexión o localmente y no requerir el inicio de sesión en una cuenta en línea o sincronizar datos en la nube. Cuando se usa una herramienta con estas características, se reduce el riesgo de exponer datos confidenciales al público.
Limitaciones
El contenido XML que desea descodificar debe codificarse en formato UTF-8.
En el esquema del archivo planos, asegúrese de que los grupos XML incluidos no tengan números excesivos de la propiedad
max countestablecida en un valor mayor que 1. Evite anidar un grupo XML con un valor de propiedadmax countmayor que 1 dentro de otro grupo XML con una propiedadmax countmayor que 1.Cuando Azure Logic Apps analiza el esquema de archivo plano y, cuando el esquema permite la elección del siguiente fragmento, Azure Logic Apps genera un símbolo y una predicción para ese fragmento. Si el esquema permite demasiadas construcciones, por ejemplo, más de 100 000, la expansión del esquema se vuelve muy grande, lo que consume demasiados recursos y demasiado tiempo.
Cargar esquema
Después de crear el esquema, cargue el esquema en función del flujo de trabajo:
Consumo: Adición de esquemas a cuentas de integración para flujos de trabajo de consumo
Estándar: adición de esquemas a cuentas de integración para flujos de trabajo estándar
Agregar una acción de codificación de archivos planos
En el portal de Azure, abra su recurso de aplicación lógica.
En el diseñador, abra el flujo de trabajo.
Si el flujo de trabajo no tiene ningún desencadenador ni ninguna otra acción que necesite, agregue primero estas operaciones.
En este ejemplo se usa el desencadenador De solicitud denominado Cuando se recibe una solicitud HTTP. Para agregar un desencadenador, consulte Adición de un desencadenador para iniciar el flujo de trabajo.
En el diseñador, siga estos pasos generales para agregar la acción integrada denominada Codificación de archivos planos.
Se abre el panel de información de acción con la pestaña Parámetros seleccionada.
En el parámetro Content de la acción, proporcione el contenido XML para codificar, que es la salida del desencadenador o de una acción anterior, siguiendo estos pasos:
Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.
En la lista de contenido dinámico, seleccione el contenido XML que se va a codificar.
En el ejemplo siguiente se muestra la lista de contenido dinámico abierto, la salida del desencadenador Cuando se recibe una solicitud HTTP y el contenido body seleccionado de la salida del desencadenador.
Nota:
Si Body no aparece en la lista de contenido dinámico, junto a la etiqueta de sección Cuando se recibe una solicitud HTTP , seleccione Ver más. También puede especificar directamente el contenido que se va a codificar en el cuadro Contenido.
En la lista Nombre de esquema, seleccione el esquema.
Nota:
Si la lista de esquemas está vacía, la causa podría ser:
- El recurso de aplicación lógica no está vinculado a una cuenta de integración.
- La cuenta de integración vinculada no contiene ningún archivo de esquema.
- El recurso de aplicación lógica no contiene ningún archivo de esquema. Este motivo solo se aplica a las aplicaciones lógicas estándar.
Para agregar otros parámetros opcionales a la acción, seleccione esos parámetros en la lista Parámetros avanzados .
Parámetro Value Descripción Modo de generación de nodos vacíos ForcedDisabled o HonorSchemaNodeProperty o ForcedEnabled Modo que se va a usar para la generación de nodos vacíos con la codificación de archivos planos.
Para BizTalk, el esquema de archivo plano tiene una propiedad que controla la generación de nodos vacía. Puede seguir el comportamiento de la propiedad de generación de nodos vacíos para su esquema de archivo plano. Como alternativa, puede usar esta configuración para que Azure Logic Apps genere o omita nodos vacíos. Para obtener más información, vea Etiquetas para elementos vacíos.Normalización de XML Sí o No Opción para habilitar o deshabilitar la normalización XML en la codificación de archivos planos. Para obtener más información, consulte XmlTextReader.Normalization. Guarde el flujo de trabajo. En la barra de herramientas del diseñador, seleccione Save (Guardar).
Agregar una acción de descodificación de archivos planos
En el portal de Azure, abra su recurso de aplicación lógica.
En el diseñador, abra el flujo de trabajo.
Si el flujo de trabajo no tiene ningún desencadenador ni ninguna otra acción que necesite, agregue primero estas operaciones.
En este ejemplo se usa el desencadenador De solicitud denominado Cuando se recibe una solicitud HTTP. Para agregar un desencadenador, consulte Adición de un desencadenador para iniciar el flujo de trabajo.
En el diseñador, siga estos pasos generales para agregar la acción integrada denominada Descodificación de archivos planos.
En el parámetro Content de la acción, proporcione el contenido XML que se va a descodificar, ya sea como salida del desencadenador o desde una acción anterior siguiendo estos pasos:
Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.
En la lista de contenido dinámico, seleccione el contenido XML que se va a descodificar.
En el ejemplo siguiente se muestra la lista de contenido dinámico abierto, la salida del desencadenador Cuando se recibe una solicitud HTTP y el contenido body seleccionado de la salida del desencadenador.
Nota:
Si Body no aparece en la lista de contenido dinámico, seleccione Ver más junto a la etiqueta de sección Cuando se recibe una solicitud HTTP . También puede especificar directamente el contenido que desea descodificar en el cuadro Contenido.
En la lista Nombre de esquema, seleccione el esquema.
Nota:
Si la lista de esquemas está vacía, la causa podría ser:
- El recurso de aplicación lógica no está vinculado a una cuenta de integración.
- La cuenta de integración vinculada no contiene ningún archivo de esquema.
- El recurso de aplicación lógica no contiene ningún archivo de esquema. Este motivo solo se aplica a las aplicaciones lógicas estándar.
Guarde el flujo de trabajo. En la barra de herramientas del diseñador, seleccione Save (Guardar).
Ahora ya ha terminado de configurar la acción de descodificación de archivos planos. En una aplicación real, podría almacenar los datos descodificados en una aplicación de línea de negocio (LOB) como Salesforce. O bien, puede enviar los datos descodificados a un socio comercial. Para enviar el resultado de la acción de descodificación a Salesforce o a su socio comercial, use los otros conectores disponibles en Azure Logic Apps:
Agregar una acción de generación de esquema de archivo plano
La acción Generación de esquema de archivo plano genera un esquema de archivos planos XSD en tiempo de ejecución a partir del contenido de archivo plano de ejemplo que se proporciona como entrada. El esquema generado es compatible con anotaciones de archivo plano de BizTalk, como b:schemaInfo, b:recordInfoy b:fieldInfo.
En el portal de Azure, abra su recurso de aplicación lógica.
En el diseñador, abra el flujo de trabajo.
Si el flujo de trabajo no tiene ningún desencadenador ni ninguna otra acción que necesite, agregue primero estas operaciones.
En este ejemplo se usa el desencadenador De solicitud denominado Cuando se recibe una solicitud HTTP. Para agregar un desencadenador, consulte Adición de un desencadenador para iniciar el flujo de trabajo.
En el diseñador, siga estos pasos generales para agregar la acción integrada denominada Generación de esquemas de archivos planos.
En el parámetro Content de la acción, proporcione el contenido de ejemplo de archivo plano.
Puede usar contenido de la salida del desencadenador o una acción anterior:
Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.
En la lista de contenido dinámico, seleccione el contenido de archivo plano de ejemplo.
Establezca el parámetro Estructura de registros en Delimitado o Posicional.
El diseñador usa parámetros dinámicos (
getFlatFileSchemaGenerationParameters) para mostrar el conjunto de parámetros correcto, en función del valor seleccionadorecordStructure.En el ejemplo siguiente se muestran los parámetros de configuración de la estructura de registros delimitados :
El siguiente ejemplo muestra los parámetros de configuración de la estructura de registro Posicional:
Para la estructura de registros seleccionada, establezca los parámetros obligatorios y opcionales.
Parámetros comunes (delimitados y posicionales)
Parámetro Tipo Obligatorio Descripción contentAny Sí Contenido de datos de ejemplo de archivo plano (cadena o binario). recordStructureString Sí DelimitedoPositional.hasHeaderBoolean Sí Si se establece true, trata la primera línea de registro como encabezado y usa esos valores como nombres de campo generados.recordDelimiterString No Delimitador de registros (línea). El análisis usa este valor literalmente (sin descodificación hexadecimal). Use caracteres reales, como \r\no\n. Para usar la división de líneas predeterminada, omita este valor. El XSD generado puede emitir un valor hexadecimal (0x0D0A) en anotaciones de esquema.recordDelimiterOrderString No Ubicación del delimitador: Infix(valor predeterminado),PrefixoPostfix.rootElementNameString No Nombre del elemento raíz del XSD. Valor predeterminado: Root.targetNamespaceString No Espacio de nombres de destino para el esquema. Opción predeterminada: http://schemas.microsoft.com/FlatFile/{RootElementName}recordNameString No Nombre del elemento de registro secundario repetido. Opción predeterminada: {RootElementName}_RecordParámetros específicos delimitados
Parámetro Tipo Obligatorio Descripción fieldDelimiterString Sí Caracteres delimitadores de campo, como coma, punto y coma o tabulador. Proporcione los caracteres reales, como ,,;o\t. El análisis usa la comparación de cadenas literales (sin descodificación hexadecimal).fieldDelimiterOrderString Sí Ubicación del delimitador: Infix(valor predeterminado),PrefixoPostfix.escapeCharacterString No Carácter de escape para delimitadores incrustados en valores de campo. Proporcione el carácter real, como \o". El análisis usa coincidencias literales (sin descodificación hexadecimal).Parámetros específicos de la posición
Parámetro Tipo Obligatorio Descripción countPositionsByByteBoolean Sí Mide las longitudes de campo en bytes ( true) o caracteres (false). Relevante para las codificaciones multibyte.fieldPositionsArray Sí Matriz de objetos de posición de campo, cada uno con lengthyjustification.fieldPositions[].lengthInteger Sí Ancho fijo del campo. fieldPositions[].justificationString Sí Controla la alineación del relleno. Introduzca manualmente el valor LeftoRight(sin distinguir entre mayúsculas y minúsculas).
Nota: El diseñador actual no proporciona una lista para seleccionar un valor.Antes de ejecutar el flujo de trabajo, revise el comportamiento del delimitador y del carácter de escape:
Comportamiento del delimitador de registros
Aspecto Comportamiento Análisis (división de líneas) options.RecordDelimiter(valor de usuario sin procesar) pasa directamente aString.Split(). Sin descodificación hexadecimal.Salida de XSD GetRecordDelimiterForSchema()convierte de la siguiente manera:
- Si tiene el prefijo0x, déjelo pasar.
- Si está vacío, el valor predeterminado es0x0D0A.
- De lo contrario, convierta caracteres literales en bytes hexadecimales.Entrada hexadecimal No para el análisis sintáctico. Si proporciona 0x0D0A, el proceso de análisis intenta dividir usando como separador el texto literal0x0D0A.Qué proporcionar Use los caracteres literales: \r\n,\nu omita por completo, lo que, de forma predeterminada, divide en\r\n/\n/\r.Comportamiento del delimitador de campo
Aspecto Comportamiento Análisis (división de campos) options.FieldDelimiterpasa directamente aSplitDelimitedRecord()como una comparación de cadenas literales. Sin descodificación hexadecimal.Salida XSD Si el valor comienza por 0x, emitechild_delimiter_type="hex"; de lo contrario,"char".Entrada hexadecimal No para el análisis sintáctico. 0x09coincide con el texto literal0x09, no con la pestaña.Qué proporcionar Use caracteres reales: ,,;,\t,|, etc.Comportamiento del carácter de escape
Aspecto Comportamiento Análisis (escape) options.EscapeCharacterse compara literalmente. Cuando hay coincidencia, el siguiente carácter se consume tal cual. Sin descodificación hexadecimal.Salida XSD Si el valor comienza por 0x, emiteescape_char_type="hex"; de lo contrario,"char".Entrada hexadecimal No para el análisis sintáctico. Mismo comportamiento de coincidencia literal. Qué proporcionar Use el carácter real, por ejemplo, \o".Guarde el flujo de trabajo. En la barra de herramientas del diseñador, seleccione Save (Guardar).
Para usar la salida del esquema generado para las acciones de descodificación o codificación, guarde manualmente esta salida como un
.xsdarchivo.Suba el archivo
.xsda su cuenta de integración. O bien, para flujos de trabajo estándar, cargue el archivo en la carpeta Artefactos del recurso de la aplicación lógica. También puede usar la API REST para subir el artefacto del esquema.El esquema generado se devuelve en el cuerpo de las salidas de acción como una cadena:
@body('Flat_File_Schema_Generation')Opcionalmente, use los ejemplos de definición siguientes:
Ejemplo delimitado
{ "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": "\\" } } }Ejemplo posicional
{ "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" } } }Pase el esquema generado a la siguiente acción:
{ "Next_Action": { "inputs": { "schema": "@body('Flat_File_Schema_Generation')" }, "runAfter": { "Flat_File_Schema_Generation": [ "Succeeded" ] } } }Revise la salida, las reglas de inferencia y los problemas conocidos:
Salida:
Propiedad Tipo Descripción bodyString Esquema XSD compatible con BizTalk generado como una cadena XML. Contenido XSD generado de alto nivel:
-
b:schemaInfoanotación constandard="Flat File",root_referenceycodepage="65001"(UTF-8) -
b:recordInfoanotaciones por registro constructure,child_delimiter,child_delimiter_type,child_orderyescape_charyescape_char_typeopcionales -
b:fieldInfoanotaciones por campo conjustificationy, para esquemas posicionales,pos_offsetypos_length - Inferencia de tipos de datos a partir de datos de ejemplo:
xs:string,xs:integer,xs:decimal,xs:boolean,xs:date,xs:dateTime
Inferencia de tipos de datos desde el primer registro de datos no vacío:
Valor de ejemplo Tipo XSD inferido trueofalsexs:boolean12345xs:integer19.99xs:decimal2025-01-15xs:date2025-01-15T10:30:00xs:dateTimeCualquier otro valor xs:stringOrden secundario (selección de ubicación del delimitador):
Order Meaning Ejemplo ( ;)InfixDelimitador entre campos A;B;CPrefixDelimitador antes de cada campo ;A;B;CPostfixDelimitador después de cada campo A;B;C;Control de encabezados:
- Cuando
hasHeaderestrue, la primera línea se trata como nombres de campo, no como datos. - Los valores de encabezado se sanearán en nombres de elementos XML válidos. Los caracteres especiales se convierten en
_y los dígitos iniciales obtienen un_prefijo. - Si solo existe una línea de encabezado y no existe ningún registro de datos, los campos tienen como valor predeterminado
xs:string. - Si un campo de encabezado está en blanco, el nombre del campo generado vuelve a
Field{N}. - Cuando
hasHeaderesfalse, los campos se denominanField1automáticamente ,Field2,Field3, etc.
-
Limitaciones y problemas conocidos
| Limitación | Descripción |
|---|---|
| La inferencia de tipos usa un único registro. | El primer registro de datos no vacío determina los tipos de columna. |
| Solo un tipo de registro | La acción genera una estructura de registros de repetición y no admite diseños de registros heterogéneos. |
| No hay registros anidados ni jerárquicos | El esquema generado es plano, lo que significa que tiene un elemento raíz con un registro y campos secundarios repetidos. |
| Los límites posicionales no se detectan automáticamente. | Debe proporcionar longitudes de campo exactas en fieldPositions. |
| Página de códigos UTF-8 únicamente | Los conjuntos de esquemas generados codepage="65001" no exponen la selección de codificación. |
| El comportamiento de los caracteres de escape es literal. | El procesamiento de las secuencias de escape se corresponde con el valor literal y omite solo el siguiente carácter. |
recordName valor predeterminado |
Si no se especifica, el valor predeterminado es {RootElementName}_Record. |
| Entrada de justificación del diseñador |
fieldPositions[].justification solo admite Left y Right. |
| Issue | Resolution |
|---|---|
| Recuento de campos incorrecto | Compruebe que fieldDelimiterOrder coincide con el formato de datos (Infix, Prefix, Postfix). |
| Los valores hexadecimales son solo de salida | Aunque el XSD generado podría mostrar los delimitadores como valores hexadecimales (por ejemplo, 0x0D0A) y dejar pasar en las anotaciones valores con prefijo 0x, el análisis sintáctico no decodifica la entrada hexadecimal. Para analizar, proporcione siempre caracteres delimitadores reales (\r\n, \n, \t, ,, ;). |
| Los nombres de campo de encabezado tienen un aspecto inesperado | Los valores de encabezado se sanearán en nombres de XML válidos. Por ejemplo, 1st Qty se convierte en _1st_Qty. |
| Comportamiento del delimitador de registros | Si recordDelimiter se omite, el análisis se divide en caracteres de nueva línea reales (\r\n, \n, \r). En las anotaciones XSD generadas, el delimitador de registros tiene como valor predeterminado 0x0D0A. |
Solucionar problemas
| Error | Causa | Resolution |
|---|---|---|
The flat file sample data content is required. |
content es null o está vacío. |
Asegúrese de que el desencadenador o la acción anterior proporcionan contenido de archivo plano no vacío. |
The schema generation options are required. |
Error interno: el objeto options es NULL. | Compruebe que la definición de flujo de trabajo contiene entradas válidas. |
Failed to generate flat file schema: '{details}'. |
Error inesperado en tiempo de ejecución, por ejemplo, codificación o datos con formato incorrecto. | Inspeccione los detalles o el mensaje de error interno para la causa principal. |
The field delimiter is required for delimited record structure. |
recordStructure es Delimited pero fieldDelimiter falta o está vacío. |
Proporcione fieldDelimiter, por ejemplo, coma, punto y coma o tabulación. No proporcione texto hexadecimal como 0x09; proporcione caracteres reales como \t. |
The field positions array is required for positional record structure. |
recordStructure es Positional pero fieldPositions falta o está vacío. |
fieldPositions Proporcione length y justification para cada campo. |
The flat file sample data contains no data records. |
No existen líneas de datos no vacías (o solo encabezado cuando hasHeader=true). |
Proporcione al menos un registro de datos no vacío en el contenido de ejemplo. |
Positional field '{N}' exceeds the record length. Record length: '{len}', position: '{pos}', field length: '{fieldLen}'. |
Las longitudes de campo totales superan la longitud del registro. | Ajuste las longitudes de fieldPositions, o compruebe si countPositionsByByte debe cambiarse. |
Pruebe el flujo de trabajo
Para desencadenar el flujo de trabajo, siga estos pasos:
En el desencadenador Solicitud , busque el parámetro HTTP POST URL y copie la dirección URL.
Abra la herramienta de solicitud HTTP y use sus instrucciones para enviar una solicitud HTTP a la dirección URL copiada, incluyendo el método que espera el desencadenador Solicitud.
En este ejemplo se usa el método
POSTcon la URL.Incluya el contenido XML que desea codificar o descodificar en el cuerpo de la solicitud.
Una vez que el flujo de trabajo termine de ejecutarse, vaya al historial de ejecución del flujo de trabajo y examine las entradas y salidas de la acción Archivo plano .