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

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
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]!



Source link


AppsBuildCSVImportaciónparaSAP

Artículos relacionados


Technical Articles
Desarrollo de una nueva fuente de datos personalizada en SAP C4C
#EnergyTransitionBetterFaster  ·  #greenhouseemissions  ·  #lineartocircular  ·  #SustainableEnergyTransition  ·  Business Trends
Transición energética y sostenibilidad… | Blogs de SAP
#OAuth2  ·  adapters  ·  rest adapter  ·  REST Sender  ·  REST Sender adapter  ·  REST Sender channel  ·  sap rest adapters  ·  Technical Articles
Autenticación OAuth 2.0 para SAP PI/PO REST Sender Channel

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

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.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar