Buenos días David,
A nosotros nos serviría ver estos 2 puntos:
- Configuración ECP en fichero configuración Docker
- Integración contínua con Doker y Jenkins.
Muchas gracias!
- Inicie sesión para enviar comentarios
Buenos días David,
A nosotros nos serviría ver estos 2 puntos:
Muchas gracias!
Good morning Dimitry, I'm glad to be back to talk to you.
Thanks for your reply ( I will try to answer you in English
)
I have never use %Installer, I have been investigating and I seem to understand that it is a class with a manifest in which the server configuration is defined, the class must be have a method called setup and that it can be executed by terminal, I understand that a condition can also be included to force the compilation of all the classes and routines (It is right?)
.png)
Does using %Intaller offer any performance improvement?
Would the steps to follow be the following ?:
1 -> Change branch from VsCode
2 -> Launch the "setup" method of the %Intaller class from terminal (for import and compile routines in server side, Would this be equivalent to clicking "Import and Compile", right? ), Should this method be launched from within VsCode terminal?
.png)
3 -> Could the execution of the% Installer be automated after the branch change?
Thank you very much Dimitry
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
.png)
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.
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 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:
Trigger AntesInsert [ Event = INSERT, Time = BEFORE ]
{
S:({telefono}=$c(0)) {telefono}=""
}
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.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
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 .
Muchas gracias por el aviso Esther. Si, estaba mal el enlace
.
Ya está corregido, Gracias!!
Muchas gracias Esther!! 🤞😅
Muchas gracias @Esther Sanchez, animo a todos a participar!!
Hola Tomás, si! efectivamente para un entorno de producción yo grabaría como bien dices el apikey en base de datos y comprobaria si existe el apikey con un $Data por ejemplo de este modo podrianos activarlas o desactivarlas como bien dices 👏
Enhorabuena a todos los participantes!!. 👏👏
Gracias! en mi caso me daba error WSL --stop tuve que lanzar WSL --shutdown liberados 50gb!!
Buenos días @Luis Angel Pérez Ramos, muy interesante el artículo, nunca he usado producciones y tengo una duda, ¿Qué beneficios nos aporta usar la producción en lugar de llamar al metodo de la clase directamente?
Veo que se puede explorar la request y la response por las capturas que pones:
.png)
En caso de tener miles de peticiones se puede filtrar la petición por algún valor para buscar que se recibió en la petición X del día Y ?
Estos "logs" se almacenan por defecto durante días, meses... para siempre?
¿Nos aporta alguna ventaja adicional el uso de producciones frente a llamar al metodo de una clase directamente?
Muchas gracias!
Muchas gracias @Esther Sanchez!!, animo a todos a participar en el siguiente 👏
Jajaja, muchas gracias Esther.
He escrito un artículo en la comunidad con las mejoras que he añadido en esta versión de IrisApiTester:
https://es.community.intersystems.com/post/irisapitester-20-nuevas-opci…
Espero que os guste!
Muchas gracias @Esther Sanchez!!. Es todo un orgullo. 😍
Muchas gracias @Esther Sanchez!!
Enhorabuena a @Kurro Lopez
y @Luis Angel Pérez Ramos
!! Un gran año sin duda 🎉
Ya he contestado la mía! Si os gusta la idea de la "ginkana" os la puedo explicar mas detalladamente 😉
Buenas tardes Luis Angel,
Efectivamente me encontraba en la misma situación que Robert.
Por lo visto mi procesador no es compatible con la versión Docker de IRIS 2024, he modificado mi Dockerfile para que use una versión 2023 y vuelve a funcionar correctamente.
Por si alguien está en la misma situación he cambiado esta línea:
ARG IMAGE=intersystemsdc/iris-communityPor esta otra:
ARG IMAGE=intersystems/iris-ml-community:2023.1.0.235.0.png)
Muchas gracias!
Muchas gracias @Luis Angel Pérez Ramos 🙌
Buenas noches,
La verdad que hay muchísimas cosas de InterSystems IRIS que me encantan. Me encanta la facilidad con la que puedes integrar librerías de otros lenguajes como Java, .Net, Phyton... también lo sencillo que es importar un WSDL y empezar a trabajar con el. Que puedas acceder como quieras a la base de datos, mediante API, ODBC... que puedas mapear tablas de base de datos de otros sistemas y usarlas como tablas SQL internas...
Pero lo que realmente me encanta es el poder trabajar con Globals. Me encanta poder realizar programas que me permita iterarlos de la forma que quiera y poder enlazar unos con otros con Cache Object Script. Está muy bien tener la opción de usar clases y hacer consultas por SQL o trabajar con objetos y en muchos casos es lo más rápido, pero cuando quieres realmente velocidad o múltiples consultas a varios Globals recorriéndolos en el modo que prefieras, es cuando ves el verdadero potencial de los Globals y de que no hay nada que se le acerque ni de lejos en rendimiento.
Así que si tuviese que elegir algo sería el rendimiento de los Globals y la posibilidad de poder trabajar con ellos al nivel mas bajo.