Actualmente se está investigando. En lo que concierne a tecnología de InterSystems, toda la información sobre este tema se puede encontrar aquí.
- Inicie sesión para enviar comentarios
Actualmente se está investigando. En lo que concierne a tecnología de InterSystems, toda la información sobre este tema se puede encontrar aquí.
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
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
}
A tener en cuenta... las variables creadas vía indirección son variables públicas aunque se utilicen dentro de un procedimiento (en este caso dentro de un método de clase donde ProcedureBlock = 1 por defecto).
Por tanto, para que no estén accesibles a la salida del método, debemos hacer un kill.
Buen artículo!! Una pregunta... ¿en qué momento ocurre la autenticación en cada escenarioy y cuales serían los actores?
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í.
Seguro que hay todavía mucho %ZEN.proxyObject por ahí. ¡¡Nunca es tarde si la dicha es buena!! ![]()
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! :![]()
Yo creo que en el Kahoot hubo hasta codazos!!
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. ![]()
Estuvo genial. A ver si repetimos.
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)
Una pregunta, ¿se podría conseguir lo mismo con las clases ya preconstruidas en IRIS, en el paquete EnsLib.PubSub?
Buen ejemplo Daniel. Una duda... ¿para poner esto en producción, no sería mejor almacenar las keys válidas en IRIS en lugar de en el código? Así podríamos generar distintas keys y cambiarlas o que expirasen cada X tiempo... o sólo la pones en el parámetro para facilitar el ejemplo?
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?
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.
Interesante Robert! ... Buen truco para salir de los límites del contenedor desde IRIS... Gracias por compartirlo! Aunque los administradores de sistemas no sé si estarán muy contentos ;-)
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.
Enhorabuena a todos los que habéis participado... y gracias por compartir vuestra experiencia y conocimiento.
El año que viene volvemos a la carga! :-)
Muy interesante!!
La cosa va de MaLaga 🤩
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...
Muy interesante!!
Gracias por el aporte @Daniel Aguilar . Muy interesante!
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! 😉
👏👏👏 Esta pequeña herramienta puede ser de gran ayuda. No dejéis de probarla y sobre todo, ¡¡dad feedback!! por favor, y proponed posibles mejoras o informad de errores. En la propia página hay una pequeña pestañita para hacerlo y va en beneficio de todos.
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.
Webinar muy recomendable para quien este interesado en securizar acceso a sus aplicaciones vía OAuth.
La verdad es que es impresionante. Dos órdenes de magnitud y sólo hablamos de 200000 filas... la mejora de rendimiento será incluso más evidente con mayor volumen de datos!
Hola @caichar yo , puedes incluir algo más de información de lo que necesitas hacer? por ejemplo si necesitas o no procesar algún tipo de información contenida en los XML en el Business Process o el BP sólo encamina ese XML como un stream hacia otro lado? ..algún ejemplo de los tipos de XML que estás recibiendo?
Muy buen artículo @Luis Angel Pérez Ramos ... nos quedamos con ganas de más! 😉
A fuego lento todo sale mejor... así que, venga! Tiempo de sobra para elegir los mejores ingredientes para ese artículo que lleváis dentro!! 😉💪
Añadido el código de iris.script, CSP.conf y CSP.inial artículo. Gracias a @Steve Lubars por indicármelo.