Este tipo de utilidades siempre vienen bien! Como nota adicional, en la última versión de IRIS (2023.3), se ha implementado un nuevo algoritmo que mejora la velocidad de cálculo... Ahí va el link a las release notes: si alguno tiene un global bien crecidito, podría mandar tiempos de cálculo entre otras versiones y esta última... a ver la mejora.

Casi, casi,... se acerca mucho pero esas clases representan los recursos tal cual de las distintas releases... está muy bien, pero no podríamos usarlas cuando estemos utilizando un profile específico que sea distinto de la versión estándar. Por ejemplo, si tuvieramos un profile para España que modificase el recurso paciente para añadir un segundo apellido, ¿cómo lo haríamos? Quizá valdría con tener una utilidad que genere automáticamente un paquete, similar al *.vR4.Model.Resource.*, para ese profile específico... Es una idea para una solución en OpenExchange... a ver si alguien coge el testigo! 😉 

Excelente resumen!. Además, desde hace unos meses, ZPM fue adoptado oficialmente por InterSystems y pasa a llamarse IPM. Se mantiene eso sí como open source, pero pasa a estar soportado por InterSystems como Package Manager... Para el que quiera contribuir dando ideas para mejorarlo, comentar problemas, dudas, etc... dejo aquí el GitHub: GitHub - intersystems/ipm: InterSystems ObjectScript Package Manager. Tambien tendréis acceso a versiones beta...

Gracias por compartir Tomás. Muy interesante... seguro que ayudará a muchos que no puedan esperar a la acualización de su versión de IRIS y tengan que utilizar Exchange. Si es posible, te pediría que compartieses el código como proyecto en GitHub... puede resultar más fácil para otros si quieren aportar correcciones o mejoras.

Hola Ramón! Bienvenido a la Comunidad... Gracias por compartir!! Interesante artículo, con un caso de uso que es bastante común y que otros seguro aprovechan. La ventaja de ir a través de una BO es que igual que en este caso tu has decidido realizar directamente la inserción vía SQL en IRIS, esa misma BO y toda la lógica de negocio anterior, podría estar dirigida a otra BD externa, que puede ser IRIS o no, e incluso a otra tabla. Es decir, la BO te encapsula el almacenamiento. El Business Process o Business Service que la llama, no sabe ni cómo ni dónde se va a almacenar la información... el BO se encarga y puede cambiar sin afectar al resto. Este desacople nos simplifica muchísimo el trabajo de mantenimiento y evolución de la solución!!

Estaría muy bien si pudieras poner tu código en un GitHub y compartirlo junto con el artículo. Seguro que otros lo pueden aprovechar.

Gracias por compartir tu experiencia Heloisa... mucha gente no sabe que tiene la posibilidad de decidir el formato de los objetos JSON... y que puede predefinir distintos formatos de exportación e importación y utilizar uno u otro según necesite.

Duda... las clases de las que quieres exportar objetos en JSON, ¿no deberían heredar de %JSON.Adaptor? O es que consigues hacerlo de otro modo?

Muy ingenioso. Gracias por compartir!

Me ha gustado cómo le sacas partido a las funciones de asignación dinámica tanto de métodos ( $classmethod(clase,metodo)), como de propiedades ( $property(objRef,propName)). Igualmente el utilizar las macros del sistema $$$comMemberNext y $$$cCLASSproperty. 

Como sugerencia, en lugar de utilizar directamente estas macros, quizá ahí sería mejor utilizar el API que ya existe en %SYSTEM.Dictionary. En concreto esa línea podría ser:

set prop = $system.Dictionary.comMemberNext(claseRequest,$$$cCLASSproperty,prop)