Pregunta
· 12 feb, 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)
	hang 20 break
	Quit ..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 POST
ClassMethod MyMethodPost() As %Status
{
	$$$LOGINFO("JobId: "_$JOB)
	hang 20 break
    ..... 
    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
Comentarios (2)2
Inicie sesión o regístrese para continuar

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 actual
    set 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="_$JOB
    do $ZF(-2,cmd)   //Funcción "obsoleta", pero funciona...reemplazar por $ZF(-100,"/ASYNC",...)

Gracias por tu respuesta.

El problema es que no usamos una instancia local, sino que se ejecutan desde otro servidor.

Voy a poner en práctica lo que ha recomendado Robert en el foro en inglés.

https://community.intersystems.com/post/how-get-job-id-bs-api-rest-debug...

Es mas sencillo modificar el valor del global en el servidor y tener el Job para depurar.