Yo creo que en el Kahoot hubo hasta codazos!! laugh  La verdad es que estuvo genial poder compartir experiencias y sobre todo vernos después de casi 3 años... y las exposiciones super interesantes... personalmente me quedé con ganas de más... y los que exponían ya ni hablamos (David Cano y Carlos Fernández de Roche y Florencio López y Mario del Pozo por Arisnova)... yo creo que si no los paran aún seguían. laughlaugh  Estuvo genial. A ver si repetimos.

Seguro que hay todavía mucho %ZEN.proxyObject por ahí. ¡¡Nunca es tarde si la dicha es buena!! wink

La única precaución es que %ZEN.proxyObject es una clase de sistema... Si la modificamos, hay que preservarla en las actualizaciones y validar que no haya cambiado o hacer un merge... de otro modo perderemos los cambios nuestros o las correcciones de producto.

Por "IRIS-izarlo" un poco... aunque no tan automático como lo que presentas, podemos también alterar temporalmente los tipos en los %Library.DynamicObject.

set obj = {}
set objB = {}

set objB.phone = 961000000

set obj.phone = 91001001
set obj.nombre = "Luis"
set obj.objetoB = objB

set orig = obj.%GetSerial() //si queremos preservar el valor original
do obj.%Set("phone",obj.phone,"string")
do objB.%Set("phone",objB.phone,"string")

do obj.%ToJSON()

set obj = obj.%SetSerial(orig)  //para volver al objeto JSON original
do obj.%ToJSON()

Resultado:

{"phone":"91001001","nombre":"Luis","objetoB":{"phone":"961000000"}}
{"phone":91001001,"nombre":"Luis","objetoB":{"phone":961000000}}

Igual sería interesante ver todas las posibilidades de formateo de las antiguas clases %ZEN y ver si están cubiertas por %Dynamic*, %JSON.Adaptor y %JSON.Formatter,... y, si no,... pues igual toca funcionalidad nueva en OpenExchange! :laugh

El material online de eLearning de InterSystems no deja de mejorar. Cierto que viene con subtítulos, pero si aún así prefieres material en español, también tienes el curso on-line que preparé hace algo más de un año, aquí

Prueba esto:

ClassMethod Indirection()

{
    set TABLES(0)="EVEN"
    set TABLES(1)="ODD"
    for i=1:1:100
    {
        set table = TABLES((i#2))
        set @table@(i)=i 
    }

    zw @table
    set evenTotal=0
    set i=""
    for
    {
        set i=$ORDER(@table@(i)) QUIT:i=""  
        set evenTotal = evenTotal+@table@(i)
    }
    zwrite evenTotal
}

Hola, acabo de añadir un PDF con las diapositivas que utilicé en el tutorial. Siéntete libre de utilizarlas. Sí te pido que, si lo haces, incluyas un link referenciando a este post en la Comunidad.

Por cierto, para los que me habéis comentado, efectivamente tenía el repositorio de ejemplos en GitHub marcado como privado... ya está accesible: Repositorio GitHub - Ejemplos

Como ya extiendes de %XML.Adaptor, directamente pueden utilizarse las funcionalidades de esa clase para obtener el XML, por ejemplo: 

do objectTest.XMLExportToString(.xml)
write xml

que ya te generará:

<Test><Person><name>John</name><age>22</age></Person><Address><location>New York NY 10036</location></Address></Test>