Para empezar hay que tener en cuenta los 2 posibles escenarios donde vamos a querer debuggar: Front-end y back-end.

Debugar el front-end no tiene ninguna diferencia respecto a hacerlo con cualquier otra web, solo necesitas abrir en el navegador las herramientas de desarrollador en tu navegador, poner un break point y a disfrutar. Cada navegador tiene sus particularidades, utiliza con el que más cómodo te encuentres. Aunque hay un plugin para Chrome que facilita revisar los elementos SAPui5.

Debugar el back-end no es tan simple, aunque no es demasiado complejo hay unos cuantos detalles a tener en cuenta.
Tenemos dos herramientas donde debuggar: eclipse o hana workbench editor; y tres alternativas desde donde invocar el servicio a debuggar: nuestro front-end, la app de postman y el plugin postman web.

Vamos a ver que dos pasos hay que seguir para poder debuggar en hana workbench, que es el que yo utilizo, más que nada por la comodidad de poder hacerlo todo en web.
1.Habilitar el debug
Para ello hay que abrir una consola de comandos de SQL en el Catalog y ejecutar lo siguiente:

alter system alter configuration ('xsengine.ini','SYSTEM')set ('debugger','enabled')='true' with reconfigure;
alter system alter configuration ('xsengine.ini','SYSTEM') set ('httpserver','developer_mode')='true' with reconfigure;


Ni caso al mensaje de error en rojo.

2.Obtener los permisos necesarios
Los dos únicos permisos que necesitas para poder debugar son: sap.hana.xs.ide.roles::EditorDeveloper (que te otorga acceso al editor, si no puedes entrar mal vas a poder hacer nada) y sap.hana.xs.debugger::Debugger que te da acceso al Debugger. Aunque puedes utilizar mejor  sap.hana.xs.ide.roles::Developer en vez del primero, que engloba varios permisos, entre los que está el EditorDeveloper y ademas te otorga acceso al Catalog, Security y Trace; que tarde o temprano vas a necesitar.

Ahora necesitamos publicar un servicio (si no, a ver sobre que narices vamos a realizar el debug). Vamos a crear algo muy básico, un hola mundo personalizado que recibe y devuelve un JSON: le mandamos nuestro nombre y nos devuelve un saludo.

let oMessage = JSON.parse($.request.body.asString()),
    sName = oMessage.Name,
    oResponse = { Message: "Hello " + sName};
$.response.status = $.net.http.OK;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(oResponse));

Para poder publicar el servicio debemos definir cómo con 2 archivos .xsapp y .xsacceess:

No voy a entrar en mucho detalle, el primero con que contenga un json vacio es suficiente:

{}

y el segundo contiene como se expone el servicio al exterior. Lo mínimo es

{
    "exposed" : true,
    "authentication" : [{
        "method" : "Basic"
    }]
}

Pero vamos a añadir un poco de seguridad y robustez extra forzando tanto autenticarse como el uso del X-CSRF-Token:

{
    "exposed": true,
    "authentication": [{
        "method": "Basic"
    }],
    "prevent_xsrf": true,
    "anonymous_connection": null,
    "cache_control": "no-cache, no-store"
}

Una vez cumplidos estos pasos necesitamos algo para invocar nuestro flamante servicio, podemos hacerlo usando la extensión de Chrome Tabbed Postman Rest Client (postman web a partir de ahora). ¿Por que? Tan simple como triste: si queremos debugar nuestro back-end desde el hana workbench, no podemos hacerlo invocándolo desde una app web, solo podemos hacerlo invocando el servicio desde ahí.
Si tenemos que debugar un llamada desde una app web, podemos solucionarlo copiando la información que se envía (se puede ver en la pestaña Network) y pegándola en el postman web, para simular que estamos realizando la misma llamada que desde la app.

Introducimos nuestro usuario y contraseña en el authorization (el usuario de SCP, no el de la base de datos) y pinchamos en Refresh headers:

Hacemos un get con el X-CSRF-Token a fetch a la dirección donde hemos publicado el servicio:

Que es la url de nuestro servidor más la ruta donde está localizado el archivo:

Nos dará un error, no preocuparse, hemos obtenido el token, que es lo que nos interesa. Para verlo vamos a los Headers recibidos, está en la última línea:

Copiamos el valor en el Header de la llamada e indicamos el tipo de formato que enviamos mediante Content-Type ( en este caso application/json) y el contenido del mensaje:

Y le daremos a Send. ¡Quietos esos dedos! que todavía nos quedan 2 pasos:
1.Añadir el token del debug en el workbench:
A veces el token no se puede añadir correctamente, y se muestra el siguiente mensaje de error:
Si sucede esto, la solución es refrescar el navegador y volverlo a intentar. Cuando lo haga correctamente saldrá un mensaje así:
2.Poner el breakpoint pinchando en la línea que nos interesa:
 
Y ahora sí, si pulsamos el boton SEND del postman web, podremos ver que se queda pensando:
Señal de que ha parado en el punto que hemos indicado:

Como debuggar:

La herramienta para debuggar es una mierda bastante limitada. Podemos ver las variables, divididas en locales y globales, así como las funciones disponibles, tanto para el scope en el que estamos:
como las asociadas a cada objeto:
Tiene los típicos botones para moverte por las líneas:
Resume (F7 – hasta el final), Step in (F3 – siguiente instrucción), Step over (F4 – siguiente instrucción, pero sin entrar en otro scope), Step out (F5 – seguir hasta salir del scope) y una pequeña consola sobre la que escribir algo de código (como máximo acepta una instrucción, nada de meter un bucle o hacer llamadas anidadas):
A pesar de lo limitado y rústico que es el debugger, cumple su función, aunque a veces dan ganas de usar el eclipse, la verdad, pero eso lo veremos más adelante.
Y esto es todo sobre como debuggar un servicio en Hana desde Neo, espero que os sea útil.
Categorías: SCP

0 commentarios

Deja un comentario

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