Tengo que convertir "dd/MMM/yy" a "YYYYmmdd".
Input = dd/MMM/yy
Output = YYYYmmdd
ejemplo
Input = 13/Jun/23
Output = 20230613
He usado lo siguiente, pero obtengo 1923 como año y necesito 2023.
$ZDATE($ZDATEH("13/Jun/23",8),8) = 19230613
InterSystems ObjectScript es un lenguaje de programación para operar con datos mediante cualquier modelo de datos que se encuentre en InterSystems Data Platform (Objetos, relacionales, valores clave, documentos, globales) y desarrollar lógica empresarial para aplicaciones del lado del servidor en InterSystems Data Platform.
Tengo que convertir "dd/MMM/yy" a "YYYYmmdd".
Input = dd/MMM/yy
Output = YYYYmmdd
ejemplo
Input = 13/Jun/23
Output = 20230613
He usado lo siguiente, pero obtengo 1923 como año y necesito 2023.
$ZDATE($ZDATEH("13/Jun/23",8),8) = 19230613
En términos sencillos, el Web scraping, también conocido como recolección de datos de sitios web o extracción de datos de sitios web es un proceso automatizado que permite la recopilación de grandes volúmenes de datos (no estructurados) de los sitios web. El usuario puede extraer datos de sitios web específicos, según sus necesidades. Los datos recopilados se pueden almacenar en un formato estructurado para su posterior análisis.

¡Hola!
Me gustaría encontrar programáticamente todas las clases que no están actualizadas en un namespace.
Con IRIS Studio, podemos ver el signo "+", pero no sé cómo hacerlo con un script.
Set sql = "SELECT ID, Name FROM %Dictionary.ClassDefinition WHERE NOT ID %STARTSWITH ?"
Set params($Increment(params)) = "%"
Set tResult = ##class(%SQL.Statement).%ExecDirect(, sql, params...)
If (tResult.%SQLCODE'=0)&&(tResult.%SQLCODE'=100) Set sc = $$$ERROR($$$SQLError, tResult.%SQLCODE, tResult.%Message) Quit sc
While tResult.%Next() {
// if class not up to date ??
}¿Alguien tiene alguna idea?
Traducción del artículo originalmente publicado el 27 de Febrero de 2023
Me complace anunciar la versión 2.6.0 de la extensión VS Code ObjectScript, que contiene un buen número de mejoras para hacer más fácil la vida de los desarrolladores. Describo más abajo las más destacadas. Como siempre, podéis encontrar la lista de modificaciones en el CHANGELOG, incluyendo muchas correcciones de errores y vulnerabilidades.
Gracias a @Olli Tanskanen de nuestro partner JediSoft Oy por esta mejora!
¡Hola Comunidad!
Me gustaría presentaros una nueva utilidad para importar CSV a IRIS - ¡csvgenpy!
Instalación
USER>zpm "install csvgenpy"
Uso:
do ##class(shvarov.csvgenpy.csv).Generate("file or url","table","schema")Ejemplo:
USER>do ##class(shvarov.csvgenpy.csv).Generate("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv","titanic","data")Esto creará la tabla y la clase data.titanic en IRIS y a continuación cargará los datos. Podéis probarlo con:
Buenos días,
Antes que nada agradecer el tiempo de ustedes al leer, reflexionar y sobre todo responder y aclarar las dudas.
Tenemos una cuestión:
¿Cuál es la forma recomendada de convertir un Objeto de Ensemble a JSON?,
en concreto, para ser más preciso:
¿cuál es la manera idónea de transformar un Mensaje Response con cualquier tipo de Property: %String, %List of String, otros objetos de Ensemble (EsquemasDatos); a un GlobalCharacterStream que represente al JSON? a retornar a Sistema Origen, desde el Servicio.
Este artículo tiene la intención de ser un sencillo tutorial de cómo crear conexiones ODBC y trabajar con ellas, ya que me pareció que empezar con ellas es un poco confuso. Yo tuve la ayuda de unas personas increíbles, y creo que todos merecemos ese apoyo.
Voy dividir cada pequeña parte en sesiones, así que puedes ir directamente a la que necesites, aunque recomiendo leerlo todo.
Voy a usar los datos de ejemplo creados en un artículo previo, Tutorial rápido para crear bases de datos de ejemplo: Samples.PersistentData, con las propiedades Name y Age.
Estoy seguro de que os habéis encontrado esta situación:
¡Hola a todos!
En este artículo, me gustaría revisar las extensiones de VS Code que uso para trabajar con InterSystems y que hacen mi trabajo mucho más cómodo. Estoy segura de que este artículo será útil para aquellos que acaban de empezar su viaje aprendiendo las tecnologías de InterSystems. Y también espero que pueda resultar útil para los desarrolladores más experimentados, con muchos años de experiencia, y les descubra nuevas posibilidades cuando usen VS Code para desarrollo.
Os recomiendo a todos los que trabajáis con InterSystems que instaléis estas extensiones y en este artículo os mostraré cómo usar algunas de ellas.
Si estás desarrollando soluciones en IRIS y quieres utilizar Git, ¡es genial! Sólo tienes que utilizar VSCode con un repositorio git local y enviar los cambios al servidor, así de fácil.
Pero qué sucede si:
A lo largo de los años, me he encontrado con la necesidad de crear varios mensajes HL7 basados en un solo mensaje entrante. Por lo general, toman la forma de un pedido o son el resultado de un laboratorio. Cada vez que he afrontado el reto, he intentado empezar de cero, con la convicción de que el intento anterior podría haberse hecho mejor.
Recientemente, volvió a surgir la necesidad y pude crear una solución de la que no me avergonzaba. Mi principal preocupación era que siempre me encontraría enterrado en un BPL, o usaría ObjectScript e intentaría editar mensajes usando el método SetValueAt para la clase de mensaje HL7.
Problema
Cuando el Sistema A procesa múltiples pedidos para un solo paciente, el resultado vendrá en un solo mensaje con ORCgrp repetido con los segmentos OBR y OBX contenidos en este. El sistema B solo puede recibir un único OBR por mensaje.
Comenzando este año 2023, hemos programado una serie de cursos oficiales sobre InterSystems IRIS que iremos realizando a lo largo del año. Los cursos se impartirán on-line y ya están abiertos para que os podáis registrar si estáis interesados (hasta un máximo de 10 personas por curso, quorum mínimo 5 asistentes). Toda la información está disponible en nuestro sitio web: Formación en el aula virtual | InterSystems
Para todos aquellos que aún utilizáis el IDE Studio para programar con ObjectScript y vais a pasar por el proceso de migración a VS Code, ¿sabíais que hay una sección en la documentación de VS Code justo para vosotros? Echad un vistazo al apartado Migración desde Studio. Incluye los siguientes aspectos:
Y ahora hay una sección llamada Atajos de teclado, que muestra los atajos equivalentes en VS Code a los que estéis acostumbrados, para que las manos no tengan que dejar el teclado. En muchos casos el atajo es el mismo, por lo que no será necesario re-aprender. Y recordad, todos los atajos en VS Code son configurables por el usuario, por lo que tendréis un nivel de control que Studio nunca ofreció.
Muy sencillo: ¿cómo depurar? Las configuraciones recomendadas en la documentación no funcionan. Necesito una manera útil de hacer seguimiento de lo que devuelve una función, como en otros idiomas, mostrándolo en la consola.
Hola Desarrolladores!
"objectscript.conn" :{
"ns": "IRISAPP",
"active": true,
"docker-compose": {
"service": "iris",
"internalPort": 52773
}Quiero compartir con vosotros una estupenda nueva funcionalidad que he descubierto en la nueva versión 0.8 del plugin de VSCode ObjectScript desarrollado por @Dmitry.Maslennikovy CaretDev.
La versión viene con un nuevo parámetro de configuración: "docker-compose"; que resuelve el problema con los puertos que necesitas para conectar tu editor VSCode a IRIS. No era muy cómodo si tenías más de un contenedor docker con IRIS corriendo en la misma máquina. Ahora ¡esto está resuelto!
Veamos como funciona ahora...
Buenos días,
Por favor necesitamos su asistencia.
Podrían indicarnos los pasos a seguir para entender el porqué en un entorno X cuando apuntamos por POSTMAN a su URL del Servicio Rest:
http://XXXX:XXXX/aplicaciones/scs/cconcertadostest/almacenarImagen
El Log del Servicio nos indic
| Alert | 2023-02-02 13:54:56.854 | $System.Status.GetErrorText(sc): ERROR <EnsDICOM>DataElementNotFound: The DataElement at property reference 'TransferSyntaxUID' does not exist | 167955423 |
| Alert | 2023-02-02 13:54:56.854 | sc: 0 è<EnsDICOM>DataElementNotFoundTransferSyntaxUID«ESBCHUIMI-e^zGetValueAt+15^EnsLib. |
¡Hola desarrolladores!
Supón que tienes una clase persistente con datos y quieres tener una interfaz de usuario Angular sencilla, para ver los datos y llevar a cabo operaciones CRUD.
En este artículo describíamos cómo desarrollar una interfaz de usuario Angular para InterSystems IRIS utilizando RESTForms2.
A continuación vamos a explicar cómo conseguir una interfaz de usuario Angular sencilla que permita realizar operaciones CRUD y ver automáticamente los datos de tu clase de InterSystems IRIS en menos de 5 minutos.
¡Vamos!
¡Hola Comunidad!
¡Muchísimas gracias a todos los que habéis participado en el concurso Advent of Code 2022!
¡Y enhorabuena a los ganadores! Que han sido:
🥈 @Robert Barbiaux (w/ repo)
🥉 @Yuval Golan (w/ repo)
🏅 @Maksym Shcherban (w/ repo)
Aquí podéis ver la clasificación final (leaderboard):
Las rutinas con privilegios te permiten elevar los roles de un usuario mientras las utiliza. Estas rutinas con privilegios (Privileged Routine Application) pueden utilizarse con rutinas y también con clases / métodos.
Cuando las utilices, es importante asegurarse de incluir new $ROLES, antes de elevar los privilegios con AddRoles(). Por ejemplo:
new $ROLES
set status=$System.Security.AddRoles("MyPrivilegedRoutineApplication")¡Hola desarrolladores!
Si os gustan los famosos concursos de Adviento "Advent of Code", con sus retos de programación diarios hasta el día de Navidad, os encantará nuestra versión.
➡️ Participad en el Advent of Code 2022 de InterSystems y podréis ganar alguno de los premios en metálico que hay para los ganadores. ¡Animaos a poner a prueba vuestros conocimientos de ObjectScript! 😄

¡Amigos!
Hace poco encontré en la Comunidad varios comandos de ObjectScript de una única línea y creo que estaría genial no perderlos y recopilar más.
Por eso he decidido recoger unos cuantos ejemplos, ponerlos en este proyecto en Open Exchange, y compartirlos con vosotros!

Así es como podéis usarlos.
1. Crear la configuración SSL del cliente
set $namespace="%SYS", name="DefaultSSL" do:'##class(Security.SSLConfigs).Exists(name) ##class(Security.SSLConfigs).Create(name)Útil si necesitáis leer contenido de una URL.
No os olvidéis volver al namespace anterior.
Para editar producciones programáticamente (interfaces) puedes usar una combinación de APIs de Interoperabilidad y consultas SQL.
Es importante conocer el namespace y la producción en la que estás trabajando.
// Object script
// El namespace activo se guarda en esta variable
$$$NAMESPACE
// Imprimir el namespace
Write $$$NAMESPACE
# Python
import iris
# Este método retorna el namespace activo
iris.utils._OriginalNamespace()
# Imprimir el namespace
print(iris.utils._OriginalNamespace())
>>> DEMONSTRACIÓN
¡Hola desarrolladores!
Para mí, una de las peores cosas de ObjectScript es tener que escribir la sentencia ##class(Class).Method() para llamar a un método de clase en código o en un terminal. Incluso envié una idea para simplificarlo en ObjectScript.
¡Pero! Hay una nueva funcionalidad en VSCode ObjectScript que acaba de ser añadida al plugin - ¡Copy Invocation!
Solo hay que poner el cursor sobre el enlace Copy Invocation que aparece encima de cada método de clase del código, hacer clic en él y la invocación se copia en el buffer:

Pegadlo donde queráis que se ejecute.
USER>w##classEt voilà!
Si no sabes por dónde empezar a aprender ObjectScript... ¡te lo ponemos fácil!
Acabamos de actualizar el curso “Getting Started with InterSystems ObjectScript” ("Introducción a InterSystems ObjectScript") con tres nuevos vídeos de 5 minutos + un ejercicio final para ayudarte a recapitular todo lo que has aprendido.
Contenido del curso:
🤝 Introducción a InterSystems ObjectScript
🤿 Análisis a fondo de los comandos y las funciones
🤔 Entendiendo los tipos de datos y las variables
👨💻 Creando una definición de clase
Ya puedes hacer el curso completo aquí:
🎓Getting Started with InterSystems ObjectScript >>🎓
Nota.- La formación oficial de InterSystems es en inglés. Si prefieres la formación en español:
¡Hola desarrolladores!
Me gustaría compartir con vosotros un truco útil para presentar código de ObjectScript en ficheros Script en VSCode.
Los ficheros Script son simplemente ficheros con líneas de ObjectScript que introducimos en cualquier sitio, por ejemplo en IRIS durante el procedimiento Docker baking.
Caso de uso típico - este es el Scriptfile
este es el Dockerfile donde lo introducimos.
Y así es como se ve normalmente en VSCode:

Podría ser más elegante, ¿verdad?
¡Hola desarrolladores!
Solo quiero compartir una antigua pero muy relevante buena práctica en el cambio de namespaces que @Dmitry Maslennikov compartió conmigo.
Consideremos el método:
classmethod DoSomethingInSYS() as %Status
{
set sc=$$$OK
set ns=$namespace
zn "%SYS"
// try-catch in case there will be an error
try {
// do something, e.g. config change
}
catch {}
zn ns ; returning back to the namespace we came in the routine
return sc
}Si resuelves problemas complejos en ObjectScript, probablemente tienes mucho código que funciona con los valores de %Status. Si has interactuado con clases persistentes desde una perspectiva de objetos (%Save, %OpenId, etc.), casi seguro que las ha visto.
Un %Status proporciona una envoltura alrededor de un mensaje de error localizable en las plataformas de InterSystems. Un estado OK ($$$OK) simplemente es igual a 1, mientras que un mal estado ($$$ERROR(errorcode,arguments...)) se representa como un 0 seguido de un espacio seguido de una lista $ListBuild con información estructurada sobre el error.
Si tuvieras la oportunidad de cambiar algo en el Visualizador de Mensajes de Interoperabilidad en IRIS, ¿qué harías?
¡Hola Comunidad!
Recientemente, migré una serie de repositorios de Objectscript de formato XML a UDL. Después de la migración, me decepcionó un poco la presentación en la interfaz web de GitLab.
Dado que la sintaxis de Objectscript es compatible con GitHub, pensé que también sería compatible con GitLab. Desafortunadamente, la librería utilizada por GitLab para resaltar el código no tiene una extensión para admitir Objectscript.
GitLab usa la librería Rouge, que puede resaltar más de 200 idiomas. Es una librería escrita en Ruby (consulta la página de GitHub), pero Objectscript no está en la lista.
¡Hola a tod@s!
Hoy os traigo un artículo de Kyle Baxter sobre búsquedas de texto libre que vale la pena guardar como referencia :)
¿Os gustaría buscar de forma eficiente campos de texto libres almacenados en vuestra aplicación? ¿Lo habéis intentado alguna vez pero no habéis encontrado una manera que os ofrezca un buen rendimiento? Hay un truco especial que resuelve el problema :)
Como es habitual, si preferís la versión TL;DR (Demasiado largo, no lo he leído), podéis ir directamente al final del artículo, pero preferiríamos que leyeseis el artículo entero para evitar herir sentimientos.