Escrito por

Project Manager & Head of Interoperability at Salutic Soluciones, S.L.
Pregunta Kurro Lopez · feb 12, 2024

¿Cómo obtener el Job id de un BS API Rest para depurar?

Hola a todos,

Como sabéis, es muy complicado depurar una API Rest de Business Service porque el objeto se crea cuando las aplicaciones reciben una solicitud, por lo que no podemos tener el JobId que podemos usar para depurar.

https://docs.intersystems.com/iris20211/csp/docbook/DocBook.UI.Page.cls…

Entonces, estoy tratando de obtener el JobId cuando se crea la clase, escribir una traza en el método OnInit() y escribir el JobId en es traza.

Method OnInit() As%Status
{
	$$$LOGINFO("JobId: "_$JOB)
	hang20breakQuit..OnInit()
}

Desgraciadamente, parece ignorar este método porque no muestra ningún rastro ni realiza la parada de 20 segundos.

Luego, mi segundo intento fue escribirlo directamente en el método.

/// MyMethod POSTClassMethod MyMethodPost() As%Status
{
	$$$LOGINFO("JobId: "_$JOB)
	hang20break
    ..... 
    Quit$$$OK
}

y funciona, pero necesito 20 segundos para abrir el Registro de eventos, obtener el JobId, adjuntar el Id en Studio o VS Code y depurar el código...

Puede que Superman puede hacerlo, con su supervelocidad.

Mi pregunta es...

¿Es posible tener una instrucción hang por mas tiempom pero poder romper el hang cuando yo quiera?

¿Hay algún método común (Como OnInit()) que es llamado cuando la aplicación recibe la petición? No quiero poner este trozo de código en todos los métodos de mi servicio API.

Gracias por adelantado.

Product version: IRIS 2021.1
$ZV: IRIS for Windows (x86-64) 2021.1.3 (Build 389U) Wed Feb 15 2023 14:50:06 EST

Comments

Pierre-Yves Duquesnoy · feb 13, 2024

Si trabajas en Windows y tu instancia de IRIS puede interactuar con el escritorio (esto se configura en el servicio de Windows de IRIS), puedes arrancar un IRIS Studio desde el código ObjectScript de tu servicio Rest y forzar un "attach" a tu proceso en curso:
 

set ns=$zu(5)   //El Namespace actualset username="_SYSTEM",password="SYS"set server="/fastconnect:127.0.0.1[51777]:"_ns_":"_username_":"_password
    set cmd="Start "_$SYSTEM.Util.InstallDirectory()_"bin\CStudio.exe "_server_" /pid="_$JOBdo$ZF(-2,cmd)   //Funcción "obsoleta", pero funciona...reemplazar por $ZF(-100,"/ASYNC",...)
0