Codificación, descodificación o generación de esquemas para archivos planos en Azure Logic Apps

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
Descodificación de archivos planos
Generación de esquemas de archivos planos No
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:

    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 count establecida en un valor mayor que 1. Evite anidar un grupo XML con un valor de propiedad max count mayor que 1 dentro de otro grupo XML con una propiedad max count mayor 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:

Agregar una acción de codificación de archivos planos

  1. En el portal de Azure, abra su recurso de aplicación lógica.

  2. 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.

  3. 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.

  4. 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:

    1. Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.

    2. 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.

    Captura de pantalla que muestra Azure Portal, el diseñador de flujos de trabajo, la acción Codificación de archivos planos y el parámetro Content con la lista de contenido dinámico y el contenido seleccionado para la codificación.

    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.

  5. En la lista Nombre de esquema, seleccione el esquema.

    Captura de pantalla que muestra el diseñador y la lista de nombres de esquemas abierta con el esquema seleccionado para codificación.

    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.
  6. 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 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.
  7. 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

  1. En el portal de Azure, abra su recurso de aplicación lógica.

  2. 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.

  3. En el diseñador, siga estos pasos generales para agregar la acción integrada denominada Descodificación de archivos planos.

  4. 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:

    1. Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.

    2. 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.

    Captura de pantalla que muestra Azure Portal, el diseñador de flujos de trabajo, la acción Descodificación de archivos planos y el parámetro Content con la lista de contenido dinámico y el contenido seleccionado para la descodificación.

    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.

  5. En la lista Nombre de esquema, seleccione el esquema.

    Captura de pantalla que muestra el diseñador y la lista de nombres de esquema abierta con el esquema seleccionado para la descodificación.

    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.
  6. 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.

  1. En el portal de Azure, abra su recurso de aplicación lógica.

  2. 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.

  3. En el diseñador, siga estos pasos generales para agregar la acción integrada denominada Generación de esquemas de archivos planos.

  4. 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:

    1. Seleccione dentro del cuadro Contenido y, a continuación, seleccione el icono de rayo para abrir la lista de contenido dinámico.

    2. En la lista de contenido dinámico, seleccione el contenido de archivo plano de ejemplo.

  5. 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 seleccionado recordStructure .

    En el ejemplo siguiente se muestran los parámetros de configuración de la estructura de registros delimitados :

    Captura de pantalla que muestra el portal de Azure, el diseñador de flujos de trabajo, la acción de generación de esquemas de archivos planos y el parámetro Content con estructura de registros delimitada.

    El siguiente ejemplo muestra los parámetros de configuración de la estructura de registro Posicional:

    Captura de pantalla que muestra el portal de Azure, el diseñador de flujos de trabajo, la acción de generación de esquemas de archivos planos y el parámetro Content con estructura de registros posicionales.

  6. 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
    content Any Contenido de datos de ejemplo de archivo plano (cadena o binario).
    recordStructure String Delimited o Positional.
    hasHeader Boolean Si se establece true, trata la primera línea de registro como encabezado y usa esos valores como nombres de campo generados.
    recordDelimiter String No Delimitador de registros (línea). El análisis usa este valor literalmente (sin descodificación hexadecimal). Use caracteres reales, como \r\n o \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.
    recordDelimiterOrder String No Ubicación del delimitador: Infix (valor predeterminado), Prefixo Postfix.
    rootElementName String No Nombre del elemento raíz del XSD. Valor predeterminado: Root.
    targetNamespace String No Espacio de nombres de destino para el esquema. Opción predeterminada: http://schemas.microsoft.com/FlatFile/{RootElementName}
    recordName String No Nombre del elemento de registro secundario repetido. Opción predeterminada: {RootElementName}_Record

    Parámetros específicos delimitados

    Parámetro Tipo Obligatorio Descripción
    fieldDelimiter String 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).
    fieldDelimiterOrder String Ubicación del delimitador: Infix (valor predeterminado), Prefixo Postfix.
    escapeCharacter String 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
    countPositionsByByte Boolean Mide las longitudes de campo en bytes (true) o caracteres (false). Relevante para las codificaciones multibyte.
    fieldPositions Array Matriz de objetos de posición de campo, cada uno con length y justification.
    fieldPositions[].length Integer Ancho fijo del campo.
    fieldPositions[].justification String Controla la alineación del relleno. Introduzca manualmente el valor Left o Right (sin distinguir entre mayúsculas y minúsculas).

    Nota: El diseñador actual no proporciona una lista para seleccionar un valor.
  7. 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 a String.Split(). Sin descodificación hexadecimal.
    Salida de XSD GetRecordDelimiterForSchema() convierte de la siguiente manera:

    - Si tiene el prefijo 0x, déjelo pasar.
    - Si está vacío, el valor predeterminado es 0x0D0A.
    - 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 literal 0x0D0A.
    Qué proporcionar Use los caracteres literales: \r\n, \n u 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.FieldDelimiter pasa directamente a SplitDelimitedRecord() como una comparación de cadenas literales. Sin descodificación hexadecimal.
    Salida XSD Si el valor comienza por 0x, emite child_delimiter_type="hex"; de lo contrario, "char".
    Entrada hexadecimal No para el análisis sintáctico. 0x09 coincide 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.EscapeCharacter se 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, emite escape_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 ".
  8. Guarde el flujo de trabajo. En la barra de herramientas del diseñador, seleccione Save (Guardar).

  9. Para usar la salida del esquema generado para las acciones de descodificación o codificación, guarde manualmente esta salida como un .xsd archivo.

  10. Suba el archivo .xsd a 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')
    
  11. 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" ]
          }
       }
    }
    
  12. Revise la salida, las reglas de inferencia y los problemas conocidos:

    Salida:

    Propiedad Tipo Descripción
    body String Esquema XSD compatible con BizTalk generado como una cadena XML.

    Contenido XSD generado de alto nivel:

    • b:schemaInfo anotación con standard="Flat File", root_referencey codepage="65001" (UTF-8)
    • b:recordInfo anotaciones por registro con structure, child_delimiter, child_delimiter_type, child_order y escape_char y escape_char_type opcionales
    • b:fieldInfo anotaciones por campo con justification y, para esquemas posicionales, pos_offset y pos_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
    true o false xs:boolean
    12345 xs:integer
    19.99 xs:decimal
    2025-01-15 xs:date
    2025-01-15T10:30:00 xs:dateTime
    Cualquier otro valor xs:string

    Orden secundario (selección de ubicación del delimitador):

    Order Meaning Ejemplo (;)
    Infix Delimitador entre campos A;B;C
    Prefix Delimitador antes de cada campo ;A;B;C
    Postfix Delimitador después de cada campo A;B;C;

    Control de encabezados:

    • Cuando hasHeader es true, 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 hasHeader es false, los campos se denominan Field1automá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:

  1. En el desencadenador Solicitud , busque el parámetro HTTP POST URL y copie la dirección URL.

  2. 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 POST con la URL.

  3. Incluya el contenido XML que desea codificar o descodificar en el cuerpo de la solicitud.

  4. 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 .