Arquitectura técnica básica de ServiceNow

¡Enhoabuena por seguir aprendiendo! Nos metemos de lleno a la parte de desarrollo de ServiceNow.

Arquitectura técnica

ServiceNow funciona como una enorme caja negra, con bastantes cosas ocultas al acceso del desarrollador. Estas partes se encargan de orquestar las distintas herramientas y personalizaciones y de que todo funcione como debe funcionar. Internamente, todos los datos y lógica se almacenan bajo una estructura tipo SQL. Los desarrolladores lo vemos todo como tablas con columnas: la tabla de incidencias, la tabla de peticiones, la tabla de usuarios, o incluso la tabla de scripts.

Cada tabla está compuesta de diversas columnas, que pueden ser de distintos tipos. Cada tabla tiene registros, que pueden tener valores para las columnas. Por ejemplo, la tabla de incidencias puede tener un registro que en la columna number será «INC000001» y en la columna short_description será «Hemos identificado un error». En general, todas las tablas tienen una columna llamada sys_id, que es un identificador único de cada registro y que es de uso interno.

Las columnas pueden ser de distintos tipos, y uno de ellos es el tipo referencia, que significa que se almacena un dato que está en otra tabla. Muy común para indicar qué usuario ha abierto una incidencia, o sobre qué servicio aplica una oferta de servicio.

Los registros de una tabla se crean con un formulario.

Programación en ServiceNow

ServiceNow no necesita compilar al desplegar código, y va ejecutando conforme se publica cualquier customización (si decidieras hacerla directamente en producción, como recomienda nadie). Puesto que la personalización y programación en ServiceNow está integrada dentro de la propia estructura de tablas, no hay solo una única forma de programar en ServiceNow, y dependerá de cada necesidad.

Aunque también depende del requisito concreto, la programación se realiza en JavaScript. Una versión bastante antigua de Javascript. Esto está cambiando pero aún falta bastante.

Programación en servidor

Si la necesidad es en servidor, suele ser, casi siempre, dentro de la sección de Business Rules. Desde esa tabla se permiten añadir reglas que se ejecutaran cuando se guarde un dato en algúna otra tabla. Por ejemplo, verificar que no hay insultos en una descripción de incidencia o verificar que no hay una incidencia abierta por el mismo usuario.

Aunque entraremos de lleno en otro momento en la programación de servidor, como introducción hay que tener en cuenta cómo se acceden a los datos de las tablas. No se tiene acceso directo a SQL, por lo que para acceder a los datos de una tabla en ServiceNow se utilizan distintas clases y funciones que facilitan, siendo la más importante de todas: GlideRecord.

var grIncident = new GlideRecord("incident");
grIncident.addQuery("number", "INC00001");
grIncident.query();
grIncident.next();
gs.print(grIncident.getValue("description"));

El código anterior, aunque es horroroso dados los estándares actuales de desarrollo, es fácil de comprender. Accede a la tabla incident, localiza el registro con el número «INC00001», y dame su descripción.

Programación en cliente

De nuevo, la programación en cliente no está unificada. Es común añadir diversas comprobaciones de datos antes de permitir enviar un formulario u obtener información sobre la marcha a través de métodos asíncronos. Para este tipo de cosas, se utiliza lógica en cliente, siendo la más destacada los Client Scripts. Aquí deja de funcionar correctamente la clase GlideRecord, y normalmente se trabaja bajo la clase g_form, que indica los datos del formulario.

También se incluye en programación de cliente las personalizaciones sobre los portales, que requieren un esfuerzo mayor al estar compuestos por plugins, que tienen diversas partes de comunicación entre cliente y servidor, también incluye partes de Angular y hojas de estilo.

En resumen

ServiceNow es todo tablas, cada tabla tiene registros que tienen distintos valores en las columnas, los registros se ven y se introducen a través de formularios. Cuando se introduce un registro en una tabla, pueden aplicarse business rules, que incluye código JavaScript. Y cuando se está en un formulario también puede aplicarse código Javascript, a través de Client Script.

¡Todo claro!