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:
{
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,






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