• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
csv  ·  Technical Articles  ·  Visual Cloud Functions

Importación de CSV para SAP Build Apps

By s4pcademy 


La semana pasada, Fabio Vettore publicó esta entrada de blog sobre la carga de un archivo CSV en SAP Build Apps y luego en un backend de Visual Cloud Functions. Esto me intrigó porque estaba planeando hacer una importación de CSV a una aplicación en la que estaba trabajando, pero pensé en hacerlo de una manera que no incluyera la carga de archivos, la conversión de archivos y JavaScript personalizado. Terminé ayer y quería mostrar mi solución simplista.

Como contexto, estoy creando una aplicación de preguntas frecuentes que tiene dos entidades de datos: preguntas y etiquetas. Cada pregunta puede tener varias etiquetas, y mi lógica verifica si las etiquetas existen y crea otras nuevas para la pregunta si no las hay. Este tipo de datos relacionales o anidados hace que parte de mi lógica sea más compleja de lo que sería en un caso en el que las etiquetas solo serían texto sin formato en lugar de objetos con la opción de agregar sinónimos para una etiqueta más adelante para mejorar la funcionalidad de búsqueda.

Para empezar, esto es lo que sucede cuando un usuario ingresa a esta página (ver vídeo):

  1. La copia del usuario pega CSV en el campo de entrada
  2. El usuario convierte CSV a JSON presionando un botón
  3. El usuario comprueba que el formato se ve correcto
  4. El usuario carga los datos en el backend

Paso 1: Convertir CSV a JSON

La realización más simple aquí es lo que es CSV: Valores Separados por Comas. Por lo tanto, puedo dividirlo fácilmente usando el DIVIDIR fórmula en listas de textos, que luego puedo convertir para satisfacer mis necesidades.

Cuando el usuario presiona el botón «Convertir CSV a JSON», ocurre la siguiente lógica:

Captura de pantalla%20de%20el%20botón%20lógico%20lienzo

Captura de pantalla de mi lógica adjunta al botón

Ya que necesito tener el encabezados o nombres de columna para una funcionalidad posterior, los divido en su propia variable de página.

Aquí puede ver la fórmula SPLIT ya en acción, ya que primero separo la primera línea o fila del CSV separándola del salto de línea (\n). Solo necesito la primera fila, así que la selecciono con [0]. Luego lo dividí nuevamente para obtener una lista ordenada de textos, donde cada texto es el nombre de la columna.

SPLIT(SPLIT(pageVars.input, "\n")[0], ";")

El siguiente paso podría omitirse, pero hago una división similar, elimino la primera fila con los encabezados y guardo esto en el filas página variable para mayor claridad. Tenga en cuenta que no divido las filas en listas de textos en este punto, sino que lo hago en el siguiente paso.

MAP(REMOVE_ITEMS_AT(SPLIT(pageVars.input, "\n"),0), item)

Entonces ocurre la magia: la conversión del CSV al formato JSON.

Me encanta el MAPA fórmula. Es básicamente un bucle for-each y lo uso todo el tiempo.

Aquí lo estoy usando para recorrer las filas, y para cada fila que uso REDUCE_INIT para convertir el texto que tiene la fila en un objeto. La fórmula REDUCE_INIT repite los encabezados que separé de las filas anteriores y, basándose en un objeto vacío (el acumulador), establece pares clave-valor con el valor del encabezado como clave y el valor de la fila como valor.

MAP<row, i>(pageVars.rows, REDUCE_INIT<accumulator, header, index>(pageVars.headers, {}, SET_KEY(accumulator, header, PICK_ITEM(SPLIT(row, ";"), index))))

Y eso es. ¡Los datos están en formato JSON ahora!

Paso 2: Mostrar datos JSON arbitrarios (opcional)

Este debería/podría ser también un paso en el que la aplicación verifica si los datos parecen correctos, pero esta es la forma más rápida y sucia, ya que el usuario verifica los datos por sí mismo.

La forma más rápida de ver los datos JSON es simplemente tomar la variable completa en la que está almacenada y usar la fórmula ENCODE_JSON. Hago esto a medida que desarrollo para depurar rápidamente la aplicación todo el tiempo.

ENCODE_JSON(pageVars.csv)

Esto, sin embargo, no es fácil de leer ni de usar, por lo que muestro los datos de esta manera:

Captura de pantalla%20de%20la%20aplicación

Captura de pantalla de la aplicación que hice.

Esto podría hacerse para mostrar todos los datos en el CSV, pero dado que los CSV pueden tener cientos de filas, solo muestro la primera fila de datos para verificar que los encabezados y los valores se alineen correctamente.

Por lo tanto, para mostrar pares de clave y valor en la interfaz de usuario, hice una fórmula que tomó las claves del primer Objeto en la lista y luego obtuvo el valor de esa clave para ese primer Objeto.

MAP(KEYS(pageVars.csv[0]), {key: item, value: LOOKUP(pageVars.csv[0], item)})

Paso 3: creación por lotes de JSON a VCF (anidado)

No voy a entrar en tantos detalles en este paso, ya que debido al contexto en el que estoy haciendo esto, tengo un bucle de creación anidado más complejo en marcha.

Sin embargo, cada vez que desee realizar operaciones por lotes como crear, deberá hacer lógica de bucle. Mi recomendación es tener una variable que establezca como verdadera cuando la operación esté en curso (y usar esta variable para mostrar un botón giratorio y deshabilitar botones) y otra variable de página para que el índice repita su lógica e incremente con cada ciclo. Una vez más, como un bucle for-each.

Como tengo datos anidados, tengo dos bucles uno dentro del otro.

Captura de pantalla%20de%20el%20complejo%20lógico%20I%20he%20realizado%20para%20mis%20relaciones%20datos%20creación%20a%20VCF

Captura de pantalla de la lógica compleja que hice para mi creación de datos relacionales para VCF

¡Hecho!

Ahí lo tiene, una forma de convertir CSV en JSON y luego cargarlo en el backend de su elección. Deje un comentario a continuación con sus pensamientos, preguntas o ideas de mejora, y para otros temas relevantes, consulte el [SAP Builders group]!




AppsBuildCSVImportaciónparaSAP

Artículos relacionados


event  ·  Event Information  ·  newsletter  ·  saputilities
Obtenga más detalles sobre la Conferencia internacional de SAP para servicios públicos y energía
CoE Platform Japan  ·  Technical Articles
BW/4HANAのモデリングにおける留意点 | Blogs de SAP
admin's blog  ·  Blogs  ·  Home
C_TADM70_22 Prueba de práctica: Evalúe su posición en la preparación para el examen de migración de SAP OS/DB | Preparación ERP
Impulse su oferta RISE con el portal de proveedores de SAP Business Network
Previo
Blog de la serie de gestión financiera n.º 1: Inicio de la serie
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.