• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

Descarga de datos de un backend VCF de SAP Build Apps a archivos CSV

By s4pcademy 


En mi blog anterior, mostré cómo se pueden cargar los datos de un archivo CSV en un backend de SAB Build Apps Visual Cloud Functions (VCF).

Hoy quiero cubrir otro caso de uso: desarrolló una aplicación SAP Build Apps y la ejecutó algunas veces en una subcuenta BTP, guardando datos valiosos en el backend VCF. Ahora necesita migrar su aplicación a otra subcuenta y desea mover también los datos que guardó al backend.

Como mencioné en mi blog anterior, en la actualidad, VCF no brinda la capacidad de cargar o descargar datos masivamente utilizando, por ejemplo, un archivo CSV.

En este artículo, explicaré cómo se pueden descargar datos desde su backend VCF a archivos CSV. Los datos guardados en archivos CSV se pueden utilizar con fines de migración, pero también para diferentes actividades: por ejemplo, puede cargarlos en una hoja de Excel y realizar manipulaciones masivas en ellos.

Comencemos el desarrollo de nuestra aplicación simplemente creando un nuevo proyecto, habilitando la autenticación BTP e instalando la integración con el backend VCF que desea usar. esta entrada de blog explica cómo completar esta tarea (consulte el Habilitación del backend desde la interfaz de usuario sección).

Luego necesitamos instalar un componente adicional del Marketplace, para administrar la descarga del archivo CSV. Esto se puede hacer simplemente haciendo clic en Marketplace:

y buscando «archivo»:

y seleccionando e instalando el componente requerido: «Descargar texto Base64 como archivo (solo web)».

En el lienzo de la interfaz de usuario vacío, solo necesitamos agregar un botón y, tal vez, algún texto que brinde una explicación:

Definimos las variables que necesita la lógica de procesamiento:

Nombre de variable: listas de objetos

Tipo de variable: variable de datos

Esta variable debe definirse para leer una colección de registros desde el backend de VCF:

La lógica de variable de datos predeterminada debe eliminarse, porque queremos que nuestra lógica se ejecute después de presionar el botón, no al cargar la página inicial.

Solo se necesita declarar otra variable:

Nombre de variable: texto convertido

Tipo de variable: texto.

Aquí siguiendo la lógica a ser definida para el Descargar datos botón:

Repasemos cada uno de los pasos:

Obtener colección de registros: este paso lee todo el registro que tenemos en el backend de VCF.

Establecer variable de datos: este paso llena la variable de datos ObjectList con todo el registro leído en el paso anterior.

JS: este paso es el corazón de nuestro proceso de descarga y se implementa como una rutina de JavaScript. La rutina escanea todos los registros de la variable de datos ObjectList (en entrada) y genera una variable de texto como salida que contiene todos los registros en formato CSV. Aquí siguiendo el código que usé:

try {
    a = inputs.input1;
    for (var i = 0; i < a.length; i++) {
                  delete a[i].id
                }
      
    let topLine = Object.keys(a[0]).join(";");
    const lines = a.reduce( (acc, val) => 
    acc.concat( Object.values(val).join(";") ), [] );
    const csv = topLine.concat(`\r\n${lines.join("\r\n")}`); 
    return { result: csv };
            
}

catch (err) {
    const error = {
      code: 'unknownError',
      message: 'Something went wrong.',
      rawError: err,
    }
  
    return [1, { error }]

    }

Tenga en cuenta que en la fila n. ° 4 eliminé la propiedad identificación de todos los registros. Esto se debe a que quiero que mi archivo CSV no contenga el UUID generado automáticamente por VCF al cargar datos. Si desea tener esta información en su archivo CSV, debe eliminar las filas #3, #4 y #5.

Establecer variable de página: este paso establece la variable convertText en el resultado del paso anterior, codificándolo en el formato base64. Usé la siguiente fórmula:

ENCODE_BASE64(outputs["Function"].result)

Descargar texto Base64 como archivo (solo web): este paso descarga el archivo CSV a su PC. Debe configurarlo proporcionando como entrada la variable convertText, definiendo el nombre asignado al archivo cuando se descarga (en mi caso: Output.csv) y configurando el Tipo MIME en Texto sin formato:

Nuestra aplicación ya está lista. Puede ejecutarlo simplemente haciendo clic en INICIAR, abriendo el portal de vista previa y seleccionando la opción Vista previa web.

Después de hacer clic en el botón Descargar datos, el archivo CSV se descargará a su PC (tal vez deba proporcionar alguna autorización, dependiendo de la configuración de su navegador).

El archivo CSV se puede editar con un editor de texto o Excel y se puede cargar en el backend VCF de otra subcuenta BTP, utilizando el enfoque que describí en mi blog anterior.

Si su backend VCF contiene pocos registros (50 – 100), esta aplicación es suficiente para sus requisitos. Pero si necesita descargar más registros, no funcionará: la variable que declaramos para almacenar internamente los registros después de leerlos desde el backend (lista de objetos), se convierte en un cuello de botella, porque el sistema no es capaz de asignar a esa variable toda la memoria necesaria para manejar una gran cantidad de registros.

En ese caso, necesitamos cambiar la aplicación: podemos descargar todos los registros que tenemos en nuestro backend VCF particionando el proceso de descarga en una secuencia de unidades de trabajo. Y esto se puede hacer usando la capacidad de Paginación provista por el backend VCF: es posible configurar un Obtener registro componente que dice el número de registro que queremos leer para cada página y la configuración del número de página que queremos leer. Luego, el enfoque consiste en leer del backend VCF una secuencia de páginas y descargar un archivo CSV para cada página que se haya leído.

La lógica de la aplicación extendida se ve así:

Como primer paso, un nuevo índice La variable (tipo = número) debe declararse y establecerse en 1. Esta variable se utilizará para identificar el número de página que se leerá desde el backend durante cada iteración.

En el siguiente paso, llamado Primera lecturaaccedemos al backend para obtener la primera página, usando un Obtener registro componente. En mi ejemplo, decidí establecer el tamaño de página en 50 registros.

El Obtener registro debe configurarse el componente, configurando el Paginación propiedad como un objeto:

y ese objeto se debe configurar con el número de registros por página (50 en mi ejemplo), el número de página (correspondiente al contenido de la variable index) e incluyendo el Total Count como variable de salida:

Luego, el resultado de este paso se almacena, como de costumbre, en una variable de datos y Cuenta total La salida se utiliza para calcular el número total de páginas que se leerán desde el backend VCF. Podemos usar la siguiente fórmula para establecer el valor de la número de páginas variable:

INTEGER(outputs["FirstRead"].totalCount /50) + 1

En este punto, un ciclo comienza a realizar los siguientes pasos:

  • convertir la variable ObjectList al formato CSV utilizando la rutina de JavaScript explicada anteriormente;
  • codifique en el formato base64 de la salida de JavaScrip, como se explicó anteriormente;
  • descargar un archivo CSV; en este caso podemos usar el contenido de la variable index para generar un nombre diferente para cada archivo (Output1.csv, Output2.csv,…);
  • aumentar en 1 el valor de la variable índice;
  • compruebe si el contenido de la variable de índice ahora es mayor que el número de páginas calculado. Si es así, el ciclo termina. Si no, continúa con los siguientes pasos:
  • lea la página siguiente del VCF (en el InCycleRead paso) y establecer como de costumbre el contenido de la variable ObjectList (el índice variable se utiliza para identificar el número de la página que se va a leer);
  • saltar al principio del ciclo para la siguiente iteración.

Y eso es todo !

Al ejecutar la aplicación, después de hacer clic en el Descargar datos botón, un conjunto de archivos CSV se descargará automáticamente a su PC.

Puede cargarlos en el backend VCF de otra subcuenta BTP, utilizando el enfoque que describí en mi blog anterior. O puede fusionarlos en un solo archivo CSV usando un script simple.

Ahora podrá extraer datos de sus backends VCF, para migrarlos a otro entorno o para procesarlos manualmente y volver a cargarlos en el mismo backend. Algunos de los conceptos que describí en este artículo pueden reutilizarse para implementar otro tipo de aplicaciones. Los más interesantes son:

  • cómo analizar un objeto JavaScript y convertirlo al formato CSV;
  • cómo usar la capacidad de paginación proporcionada por el backend VCF (esta capacidad también está disponible en otros servicios de integración);
  • cómo descargar un archivo generado por la aplicación a su PC.

¡Y eso es todo por hoy! Ahora puede continuar siguiendo la página del tema del entorno SAP Build Apps (https://community.sap.com/topics/build-apps), publicar y responder preguntas (https://answers.sap.com/tags/6cfd8176-04ae-4548-8f38-158456e1a47a), y leer otras publicaciones sobre el tema (https://blogs.sap.com/tags/6cfd8176-04ae-4548-8f38-158456e1a47a/).

¡Diviértete con SAP Build Apps! Y continúe siguiendo mi perfil para nuevos blogs y déjeme sus comentarios.




Edición de contenido de cola para colas fallidas de EWM a ERP
Previo
Cree e implemente su aplicación SAPUI5 utilizando SAP Business Application Studio en el repositorio ABAP (sistema local).
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.