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.

Hola,

El %JSONIGNORENULL lo que te hace es que si el valor viene como nulo, para los strings lo marca como cadena vacía.

El problema es que si guardamos la cadena con el JSon, y desde el terminal hago lo mismo de importación nos da el siguiente mensaje de error.

w pResponse.%JSONImport(content)

e^%JSONImportInternal+57^Kurro.app.Msg.Search.Response.1^1$e^%JSONImport+12^%JSON.Adaptor.1^1)e^zLoop+16^|"USER"|WebTerminal.Core.1^1)x^zLoop+16^|"USER"|WebTerminal.Core.1^1d^^^0

Como ves, no nos da muchas pistas de por donde va el error. Probando varias combinaciones, hemos llegado a que funcione si cambian el nodo de actParameters por [] en lugar de null.

Ya hemos hablado con el proveedor para que en esos caso, nos devuelva un array vacío en lugar de un valor nulo.

Muchas gracias por tu respuesta Luis Angel

Muchas gracias a los dos.

Efectivamente, va a realizarse en un entorno de producción, por lo que la parada técnica de la producción para hacer el backup externo debe de ser muy corto.

Afortunadamente no tiene mucho mapeo con otras librerías, pero sería un restore en el mismo servidor, no se como se podría hacer un backup y hacer el restore en el mismo servidor y en otro namespace.

Voy a poner la respuesta que me han dado en el grupo general y que es una solución muy buena. Muchas gracias @Julian Matthews


Hola Kurro.


No estoy seguro de una función incorporada para esto, pero si quisieras tener la tuya propia:

Class Demo.FunctionSets.Example
{

ClassMethod Format(InputString As %String, Params... As %String) As %String
{
	Set OutputString = InputString
	For i = 1 : 1 : $GET(Params, 0){
		Set OutputString = $Replace(OutputString,"{"_i_"}",Params(i))
	}
	
	Quit OutputString
}

}

Y entonces:

Write ##Class(Demo.FunctionSets.example).Format("My name is {1} and I'm {2} years","Kurro","18")
My name is Kurro and I'm 18 years

Podeis ver la respuesta original en el siguiente enlace

Muchas gracias,

Efectivamente el problema estaba siendo originado porque la dirección al que se va a conectar es variable, por lo que no está configurado el componente con el parámetro de Server ni URL.

Lo he solucionado de la siguiente forma:
 

set ..Adapter.HTTPServer = pRequest.Url
Set URL = pRequest.Url_"/search"
set tHttpResponse = ##class(%Net.HttpResponse).%New()
set tSC = ..Adapter.SendFormDataArray(.tHttpResponse,"POST",tHttpRequest,,,URL)

if $$$ISERR(tSC) && (tHttpResponse="") $$$ThrowStatus(tSC)
// Comprobamos cual es el código de respuesta
set contenido = ""
while (tHttpResponse.Data.AtEnd = 0) { 
    set contenido = contenido_tHttpResponse.Data.Read() 
}

do pResponse.%JSONImport(contenido)
set pResponse.StatusCode = tHttpResponse.StatusCode

Muchas gracias por la respuesta.

Un saludo,
Kurro Lopez

Al final no era un problema de firewall.

El problema era que la instalación no compiló correctamente el código. No tomó la versión de ISC correctamente.

Estoy usando la versión WebTerminal-v4.9.3, en la linea 1507 hay una inicialización del parámetro iscProductVersion

<Parameter name="iscProductVersion">
<Description>
In older Cache versions, method "GetISCProduct" does not exists</Description>
<Expression>$case(
        ##class(%Dictionary.CompiledMethod).IDKEYExists("%SYSTEM.Version", "GetISCProduct"),
        1: $CLASSMETHOD("%SYSTEM.Version", "GetISCProduct"),
        : 2
    )</Expression>
</Parameter>

Después, en la linea 1611, comprueba cuál es la versión para asignar el role requerido:

set requiredRole = $case(..#iscProductVersion >= 4, 1: "%DB_IRISSYS", : "%DB_CACHESYS")

Pero, si compruebo cuál es mi versión, la respuesta es 3, en lugar de 4, por lo que está intentando asignar %DB_CACHESYS en lugar de %DB_IRISSYS, por lo que la compilación no termina.

w ##class(%SYSTEM.Version).GetISCProduct() 
3

Entonces, he modificado el fichero y cambiado la comparación ..#iscProductVersion para que compruebe si es mayor o igual a 3, y funciona.

En la linea 1730, hay otra comparación para definir el dbPrefix, por lo que he cambiado esta linea también.

set dbPrefix = $case(..#iscProductVersion >= 3, 1: "IRIS", : "CACHE")

Ahora, tengo Webterminal funcionando bien.

Nota: Estoy usando IRIS for Windows (x86-64) 2021.1 (Build 215U) Wed Jun 9 2021 09:39:22 EDT

Saludos,
Francisco Lopez