Publicaciones recientes:
Respuestas recientes:

Buenos días, lancé esta misma pregunta en la comunidad global y me dieron la respuesta, explico la solución:

El problema que tenía con los $c(0) es que se insertaban cuando por SQL hacía un insert en un campo de tipo %String con el valor de string vacio ""

Este es un comportamiento estandar de cache para las propiedades de tipo %String. La solución que me dieron era sobreescribir el comportamiento del metodo Normalize, para esto creé una clase que extendiese de %String y sobreescribí el metodo Normalize modificando su comportamiento para que en la devolución hiciese la traducción del $c(0) por ""

Clase Extendida de %String con el metodo Normalize sobreescrito:

Class User.StringoNoEmpty Extends %String [ Language = objectscript ] {

ClassMethod Normalize(%val As %RawString) As %String [ CodeMode = generator, ServerOnly = 1 ]

{

{
    set code="%val"
    if %parameter("TRUNCATE"),%parameter("MAXLEN")'="" { set code="$e(%val,1,"_(+%parameter("MAXLEN"))_")" }
    $$$GENERATE("    RETURN $tr("_code_",$c(0),"""")")
    RETURN $$$OK
}

}

Y luego en la clase defino la propiedad del nuevo tipo en lugar de String

Property myString As User.StringoNoEmpty;

Espero que le sirva a alguien mas de ayuda.

Un saludo

Buenos días Pierre, 

Gracias por tu respuesta, el problema que tengo con lo $c(0) en los globals es que si hago por ejemplo esto:

(Imaginemos que en este nodo del global solo guardo por id de cliente un teléfono y para este idCliente tengo un $c(0) donde debería estar el teléfono)

Set telefono = $G(^myGlobalTelefonoCliente(idCliente))

if (telefono '=""){

    ....

}

como telefono sería igual a $c(0) entraría en la condición y no es lo que quiero.

Tengo funciones de limpieza de caracteres para evitar esto pero si se pudiese traducir los $c(0) directamente en la inserción no tendría que estar controlandolo en N sitios.

Se me ocurrió crear un trigger en la clase que compruebe los campos antes de grabar pero no me ha funcionado, ejemplo:

Trigger AntesInsert [ Event = INSERT, Time = BEFORE ]
{
    S:({telefono}=$c(0)) {telefono}=""
}

Un saludo,

Buenos días,

He probado tanto en una instancia docker local como un servidor local y servidor remoto.

Me pasa en todos.

Un saludo,

Seguidores:
Daniel aún no tiene seguidores.
Siguiente:
Daniel aún no sigue a nadie.
Insignias de Maestros Globales: