Esta pequeña serie sobre scripts en Service Layer consta de tres partes:
Una vez montado el cliente OData de Service Layer, realizar las operaciones individuales que hasta ahora hacía por B1WS, como, no sé, hacer traslados, crear y modificar ofertas y pedidos, crear y modificar UDOs varios, ha sido sencillo. Otra cosa muy distinta son las operaciones complejas que encapsulo en una transacción por Di Server, algo que no permite B1WS.
En Service Layer tenemos dos opciones para atacar este problema: uno es el procesamiento por lotes. El formador que tuvimos para Service Layer ni lo tocó por lo complicado que es preparar la petición, pero podemos hacer casi lo mismo que en Di Server. La otra es a través de su propio SDK, que nos permite hacer una suerte de addons en JavaScript que, sin ser tan potentes como lo que podemos hacer por Di Api, es, en algunos aspectos, más potente que lo que nos ofrece Di Server.
Me he lanzado a probar este extraño mundo con una operación sencilla en mente, pero que en la empresa se hace con mucha frecuencia: un recibo de producción con su emisión de componentes correspondiente.
El primer paso es preparar el entorno de trabajo para hacer los scripts. Siendo JavaScript, esto es opcional, pero nos permite aprovechar el Intellisense de Visual Studio.
Las instrucciones vienen en el manual de Service Layer que tenemos en nuestro servidor (https://<miservidor>:50000/Working_with_SAP_Business_One_Service_Layer.pdf) y que también podemos consultar aquí, el punto 3.20.5.
1. Preparar Visual Studio
Modificamos la instalación y marcamos, si no lo tenemos ya, Desarrollo de Node.js.
Una vez lo tengamos, ya podemos crear un proyecto para trabajar con él. Por ejemplo, una Aplicación de consola en blanco de Node.js.
Cuando tengamos el proyecto abierto, nos saldrá un aviso pidiendo que instalemos el entorno en tiempo de ejecución de Node.js, si no lo tenemos ya. No es necesario, ya que realmente no vamos a ejecutar nada.
2. Generar el SDK
Para generar el SDK, SAP nos ofrece una herramienta que nos lo creará personalizado a nuestra base de datos, a partir de sus metadatos, obtenidos de Service Layer. La herramienta es Metadata2JavaScript.jar y la encontramos en la carpeta bin de Service Layer (por ejemplo, en C:\Program Files\SAP\SAP Business One ServerTools\ServiceLayer\bin de nuestro servidor.
Tiene dos formas de uso. La primera, directamente contra Service Layer:
java -jar Metadata2JavaScript.jar --addr https://<miservidor>:50000/b1s/v1/ --user yoquese --pasword nomeacuerdo --company SBO_MICOMPANY_ES
La otra, usando un archivo de metadatos:
Java -jar Metadata2JavaScript.jar -a metadatafile.xml -o ./carpeta_destino
Yo prefiero la segunda: me llevé el generador a una carpeta de mi equipo, generé el archivo de metadatos con Postman y lo lancé.
Cualquiera que sea el camino, hay que tener cuidado de usar la V1, es decir, la configuración para OData 3. Lo normal será que, para el resto de cosas, trabajemos con la V2, correspondiente a OData 4. Yo, por lo menos, tengo el cliente de OData generado para V2.
Esto nos genera cuatro carpetas (Base, Complex Type, Entity Type y Enum Type) y dos archivos aparte (HttpModule.js y ServiceLayerContext.js). Todo esto nos lo llevaremos a nuestro proyecto de Node.js.
Y con esto, ya estamos listos para empezar. Pero de eso hablaré mañana.