ir a la publicación Daniel Aguilar · 8 feb, 2022 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.StringNoEmpty 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.StringNoEmpty; Espero que le sirva a alguien mas de ayuda. Un saludo
ir a la publicación Daniel Aguilar · 7 feb, 2022 Buenos días Kurro, A mi me pasaba lo mismo al hacer inserts por SQL, lo solucioné generándome una clase que extendiese de String y parseando el $c(0) por "" Mira este artículo donde escribí la solución que me funcionó a mi: https://es.community.intersystems.com/post/evitar-c0-en-globals#comment-... Espero que te sea de ayuda .
ir a la publicación Daniel Aguilar · 10 sep, 2020 Muchas gracias David, Estuve probando con esos flags pero no me funcionaba. Por lo visto trasteando con el control de versiones hice algo que corrompió el namespace en el que estaba trabajando. Finalmente conseguí solucionarlo haciendo lo siguiente: Desde: Sistema -> Sql Pulsé en "Ajustar todas las tablas" creo que esto lanza también la opción "Purgrar consultas en memoria caché". Tras esto volví a lanzar un: Do $System.OBJ.CompileAll("cukb") Me recompiló todas las rutinas correctamente y empezó a funcionar todo de nuevo. Muchas gracias. Un saludo.