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:






Como debuggar:




0 comentarios