¿Como explotar la información de tu SAP ECC (previo a HANA) y utilizarla para crear aplicaciones web y moviles a través de Node.js (via RFC)?

Node.js es una plataforma muy versátil y poderosa y puede ser un punto de partida muy interesante para crear aplicaciones web y móviles tanto on premise como en la nube. Si sumamos además la agilidad de construcción de estas aplicaciones a través del ecosistema NPM (el registro de software más grande del mundo) tenemos como resultado un enorme potencial de construcción de soluciones de software. Si a este potencial sumamos la facilidad de extraer información de nuestros sistemas SAP incluso a través de Function Modules ya existentes (expuestos a través de RFC) obtenemos el poder de agilizar la creación de aplicaciones empresariales con alta responsividad y una excelente experiencia de usuario.

En los últimos tiempos SAP reconoce oficialmente el potencial de Node.js a través del desarrollo de aplicaciones nativas de HANA con XS Advanced. Pero si aún contamos con un stack tradicional previo a HANA, no significa que no podamos explotar su potencial.

A continuación mostramos un diagrama de la arquitectura que estamos utilizando con respecto a esta solución.

 

arquitectura_node_Sap_eng1

Básicamente, esta arquitectura nos permite como ya lo hemos comentado, exponer la información de nuestro ECC (u otras cajas SAP como CRM, SRM, etc), pudiendo crear APIs REST que podemos consumir desde prácticamente cualquier tecnología front end en la actualidad (las posibilidades son casi infinitas :D)

Ventajas de esta arquitectura

Las ventajas que hemos encontrado al utilizar esta arquitectura:

  • Flexibilidad para exponer la información
  • Rapidez de respuesta
  • Confiabilidad y estabilidad en la ejecución de la aplicación
  • Crear una base de código (el código en Node.js) que puede ser reutilizada después de migrar a HANA (después de hacer algunos ajustes)

Ahora veamos como lograr esta conexión:

Conectando Node.js con SAP

Para comenzar, utilizaremos el componente node-rfc. Este componente nos permitira establecer la conexión entre SAP y Node.js.

De acuerdo a la documentación, un pre requisito es descargar el componente SAP NW RFC Library que funge como intermediario entre node-rfc y el modulo RFC dentro de SAP (Para hacer esta descarga requeriremos un S-User para acceder al SAP Marketplace).

No ahondaremos mucho en temas de instalación, ya que esta está cubierta en las instrucciones de los componentes, sin embargo, aquí tenemos un tip que puede ser útil:

nwrfcsdk

Tip de instalación de node-rfc:

Por default, el componente node-rfc queda instalado dentro de un directorio correspondiente a la plataforma. Esto puede generar un error al momento de ejecutar el proyecto Node. Para solventarlo, se recomienda copiar el componente a una carpeta superior como se muestra en la imagen a continuación:

rfcnode

Una vez instalado, procedemos a crear un nuevo proyecto Node.js y agregamos el modulo de node-rfc:

npm init noderfcsample
npm install node-rfc

nodejs_rfc

Una vez creado nuestro proyecto e instalado el modulo node-rfc podemos crear el código que nos ayudara a establecer la conexión hacia SAP y extraer información desde un Function Module habilitado para RFC. Para nuestro ejemplo, utilizaremos el Function Module STFC_CONNECTION, una función standard que nos contestara la información que le enviemos y que nos será útil para probar nuestra conexión.

A continuación especifiquemos los datos de conexión de nuestra instancia SAP.

code

Posteriormente creamos la conexión utilizando client.connect e invocamos el Function Module a través de client.invoke.

Una vez que ejecutamos el código podemos ver el resultado de la llamada que es arrojado como un objeto Javascript que podemos manipular posteriormente a nuestra conveniencia. Misión cumplida!

console

Siguientes pasos

Aunque nuestro ejemplo fue en realidad sencillo, podemos utilizar esta misma arquitectura para crear aplicaciones más complejas y poderosas. Para el backend podemos utilizar frameworks como Express, Sails o muchas otras. Una vez generada y expuesta nuestra API podemos consumirla en el front end con muchas combinaciones. Algunos ejemplos para aplicaciones mobiles pueden ser Flutter, aplicaciones nativas, React Native o Aplicaciones web encapsuladas en Cordova. Para aplicaciones web algunas de las más populares pueden ser SAPUI5, React, Angular.

Esperamos que esta técnica te permita comenzar a desarrollar proyectos con conexión a SAP. Déjanos saber tu opinión y algunos de los proyectos que tengas en mente que puedan utilizar esta tecnología en los comentarios.

Muchas gracias!

Saludos!

 

3 Thoughts

  1. Muchas gracias por este ejemplo, podrías dejar más información al respecto de como habría que hacer la parte de Sails ?????

    He seguido los pasos que comentas y he conseguido desde node ejecutar una RFC y me contesta datos desde SAP, pero ahora no tengo claro como tengo que hacer para crear en sails una RestApi para ejecutar por ejemplo 50 RFC´s ???? Alguna información al respecto ???? Algún ejemplo ??? Como haría la llamada a cada una de mis RFC´s ???

    La verdad que veo mucho potencial en usar esto, porque la verdad Sag Gateway no me gusta nada, veo más sencillo usar RFC´s igual que uso en .NET con Sap Connector.

    Muchas gracias y un saludo.

    Like

    1. Que tal Alfonso.

      En realidad para la creación de la REST API te te recomiendo seguir el paradigma estándar de Sails, creando acciones y rutas para cada llamada. La parte que habría que ajustar sería dentro de la acción, llamando al cliente SAP.
      En realidad tienes la libertad de llamar el cliente dentro de cada acción/ruta las veces necesarias, pero por supuesto el consejo es encapsular una función principal por ruta.

      A continuación te dejo un pequeño fragmento de código, espero te sirva de referencia.

      Como comentario adicional, coincido contigo, el potencial es enorme.

      Saludos!

      findOrdersByUser: async function (req, res) {
      try {
      if (req.query.imInd == “”) {

      return res.serverError({
      msg: “There has been an error with the provided credentials, please log in again to continue.”
      });

      }
      await client.open();
      let isAlive = await client.ping();
      if (isAlive) {
      let result = await client.call(
      ‘ZGET_SORDERS’, { IM_IND: req.query.imInd, IM_CUSTNO: ”, IM_USERNAME: req.query.userName}
      );
      return res.ok({
      msg: result
      });
      } else {
      return res.serverError({
      msg: “Backend is down!”
      });
      }

      } catch (e) {
      SAPAdapter.showError(e);
      return res.serverError({
      msg: e.key
      })
      }
      }

      Like

  2. Hola Edgar, lo primero de todo muchas gracias. Por lo que entiendo necesitare un controlador y un modelo por cada tabla de la RFC que recupere, pero tengo una duda es posible recuperar más de una tabla de una RFC en las llamadas desde Sails ???? Imagina que a una RFC le paso un dato y me tiene que devolver 3 tablas con 3 líneas cada tabla, se puede recuperar 3 modelos diferentes en la misma llamada get ????? O solo voy a poder recuperar 1 solo modelo ????

    En Sap Gateway solo te permite recuperar una única tabla por eso lo pregunto.

    Por lo demás me pongo ahora mismo para ver como Sails para ver si consigo hacer algo básico y seguro que alguna preguntilla te hago del tema.

    Muchas gracias…..

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s