#Code Snippet

1 Seguidor · 60 Publicaciones

Fragmento de código es un término de programación que se refiere a una pequeña región del código fuente, reutilizable código, máquina o texto. 

Artículo Alberto Fuentes · oct 29, 2021 2m read

ObjectScript tiene diferentes formas para gestionar errores (códigos %Status, %Exception, SQLCODE, etc). La mayor parte del código de sistema utiliza códigos %Status pero las %Exception son en ocasiones más fáciles de gestionar.

Si tienes que trabajar o mantener aplicaciones con cierto recorrido seguramente acabes lidiando con distintas técnicas de gestión de errores. A continuación os dejo una chuleta u hoja de trucos que puede servir como referencia. ¡Espero que os sea útil!

0
0 126
Artículo Mathew Lambert · feb 28, 2020 2m read

¡Hola Comunidad!

ObjectScript tiene al menos tres formas de manejar errores (códigos de estado, excepciones, SQLCODE, etc...). La mayor parte del código del sistema usa estados, pero las excepciones son más fáciles de manejar por varias razones. Al trabajar con código heredado, se invierte un tiempo en traducir las distintas técnicas. Yo uso mucho estos fragmentos de código como referencia. Espero que también os sean útiles.

4
1 423
Artículo Kurro Lopez · ago 31, 2021 2m read

Como sabes, ObjectScript no tiene un comando o función de sistema FOREACH.
Pero tiene un amplio margen para la creatividad.

Pero la tarea es recorrer una matriz global o local y hacer algo PARA CADA elemento.

Hay dos posibles soluciones:

  • Crear una macro que genere las secuencias de código requeridas
  • Crear un comando extendido para realizar la acción.
0
0 179
Artículo Ricardo Paiva · sep 9, 2019 3m read

¡Hola desarroladores!

¿Os parece que las consultas sobre el rango de fechas son demasiado lentas? ¿Os parece que el rendimiento de SQL es bajo?  ¡Tengo un curioso truco que podría ayudaros a solucionar estos problemas! (¡Los desarrolladores de SQL odian que sepáis estas cosas!)*

Si tenéis una clase que guarda los registros de hora cuando se añaden datos, entonces esos datos se ordenarán con vuestros valores IDKEY, es decir, TimeStamp1 < TimeStamp2  si y solo si la condición ID1 < ID2 se cumple para todos los valores ID y TimeStamp en la tabla - entonces podéis utilizar esta información para aumentar el rendimiento de las consultas en relación con los rangos de TimeStamp. Echad un vistazo a la siguiente tabla:

1
0 1262
Artículo Ricardo Paiva · jul 29, 2021 2m read

En SQL, la condición más frecuente WHERE se relaciona principalmente con el contenido de las filas en las que trabajas.
Por lo tanto, debe calcularse y verificarse para cada fila a la que accedas.
Distinto es el caso (y por eso la llamé ESTÁTICA) de una condición WHERE independiente de las filas a las que accedes.

0
0 181
Pregunta Yone Moreno · jun 30, 2021

Hola, buenos días.

Necesitaríamos orientación, guía o apoyo de ustedes para realizar lo siguiente:

Nuestro objetivo es: lograr que el fichero ".stream" NO se guarde, en la carpeta: /opt/ensemble/[Entorno]/stream

Tenemos un Servicio REST, un Proceso y una Operacion REST

Desde la Operacion al Proceso existe un Mensaje Response: Mensajes.Response.HistoriaClinica.GetInformeResponse

con un pdf definido como:

Property pdf As %GlobalCharacterStream;

Además, desde el Proceso al Servicio nuestro Mensaje Response es: Mensajes.Response.Informes.v02r00.obtenerCartillaVerdeDigitalResponse

1
0 263
Artículo Alberto Fuentes · feb 11, 2021 1m read

Hola a todos,

Compartimos hoy un truco que quizá le resulte útil a aquellos que tienen que trabajar con JavaScript embebido.

Si tienes que trabajar con CSP o Zen probablemente más de una vez has necesitado utilizar JavaScript embebido. Supón que tienes que programar algunos bucles, que utilizan los caracteres < o > en alguna expresión, por ejemplo:

&js< 
               var test = document.getElementById('seTest');
               for (var i = 0; i < test.options.length; i++) {

                              // hacer algo con test.options[i]...
               }             

>
0
0 155
Artículo Mathew Lambert · dic 18, 2020 2m read

Hace poco, tuve que generar una especificación en Swagger a partir de clases persistentes y en serie, así que ahora publico el código (no está completo, aún queda resolver las especificaciones de la aplicación, pero es un comienzo).

El código está disponible aquí.

Supongamos que tenemos estas clases:

0
0 336
Artículo Mathew Lambert · nov 25, 2020 17m read

Este artículo fue creado como efecto secundario de las preparaciones para un conjunto más extendido de artículos sobre la simple, pero útil, implementación de MapReduce en Caché. Estaba buscando una forma relativamente fácil de pasar argumentos a (potencialmente) múltiples objetivos mediante mecanismos de invocación remota. Y tras varios intentos, me di cuenta de que en el ObjectScript de Caché contamos con mecanismos muy potentes que podrían ser de utilidad para esto: dynamix dispatching para métodos y propiedades.

0
1 162
InterSystems Official Jose-Tomas Salvador · oct 21, 2020

¡Hola desarrolladores!

Una vez más os vengo a hablar de la extensión de ObjectScript para Visual Studio Code, y esta vez estamos muy contentos de poder anunciar ¡ la liberación de la versión 1.0 !

La comunidad se ha unido de un modo sin precedentes para entregar este producto con InterSystems, con la particularidad única de que una herramienta tan crítica para la productividad del desarrollador sería contruida en base a pruebas, feedback y código de la comunidad, desde el principio.

Novedades

0
0 179
Artículo Nancy Martínez · sep 25, 2020 4m read

Método: para descargar el archivo FTP desde Caché de InterSystems: Si tienes cualquier consulta, deja un mensaje por favor:

ClassMethod FTPDownload(myFTP = "", myUserName = "", myPassword = "", sFileLocation = "", dLocation = "", noOfdownloadFile = 1, sourceFileDel = 0)
{
 /*---------------------------------------------------------------------------------------------------------------------------
descargar el archivo según los requirimientos: FTP

Método: Resuable 

creado por: Sanjib Raj Pandey el 30/03/2018

0
0 260
Artículo Mathew Lambert · mayo 19, 2020 2m read

Los WebSockets, como tecnología de comunicación, están ganando una importancia cada vez mayor.
En el namespace SAMPLES puedes encontrar un buen ejemplo para ejecutar un WebSocket Server.
También hay un útil ejemplo para un Browser Client, pero sigue estando en el navegador.

La cuestión es:
¿Cómo consumir la salida de un WebSocket Server en tu aplicación?

0
0 152
Artículo Kurro Lopez · oct 8, 2019 4m read

Hola a todos:

En este artículo quiero compartir unas funciones con vosotros, que espero os sean útiles en algún momento.

Definiciones

DNI: Documento Nacional de Identidad. Se compone de diferentes series de números y letras, que acreditan la identidad y los datos personales del titular, así como la nacionalidad española. Ejemplo: 94494452X

NIE: Número de Identificación Extranjero: Es un código para extranjeros en España.

Si necesitas generar ejemplos, puedes generar ejemplos de DNI o NIE en el siguiente enlace:

https://generadordni.es/

Cálculo de letra de un número DNI

2
0 380
Artículo Dani Fibla · mar 24, 2020 4m read

¡Hola Comunidad!

En este artículo describiré e incluiré un ejemplo de cómo incrustar un archivo PDF externo en un segmento HL7, concretamente en el segmento OBX() de un mensaje ADT_A01 versión 2.3.1  .  Esto puede ser útil para  insertar imágenes u otros datos externos en un mensaje HL7. En este ejemplo, el nombre del archivo PDF a incrustar nos llega en el mensaje HL7 entrante en el campo OBX(1):ObservationValue.

Los requisitos básicos para este ejemplo son los siguientes:

1
0 605
Artículo Daniel Aguilar · feb 24, 2020 6m read

El tema del rendimiento de los bucles for/while en Caché ObjectScript surgió recientemente en una discusión, y me gustaría compartir algunas ideas/prácticas recomendadas con el resto de la comunidad. Aunque este es un tema básico por sí mismo, es útil conocer con cuales se obtiene un mayor rendimiento.

En resumen, las opciones más rápidas son los bucles que se iteran por $ListBuild, las listas que se forman con $ListNext o sobre un conjunto local mediante $Order.

Por ejemplo, consideraremos iterar un bucle por cada elemento de una cadena delimitada por comas.

1
0 386
Artículo Nancy Martínez · dic 18, 2019 3m read

Pregunta:

¿Cómo obtengo un listado de los archivos que se encuentran dentro de cierta carpeta/directorio, usando un comodín/filtro?

Por ejemplo, todos los archivos '*.txt' en 'C:\Temp.

Respuesta:

En CACHE:

Puedes usar la consulta de clase FileSet de %Library.File.

Aquí puedes ver el ejemplo de un código donde se usa (también se adjunta):

0
0 268
Artículo Julio Francisco · nov 12, 2019 3m read

¡Hola Comunidad!
Solo por diversión, creé un script de bash que genera archivos csv a partir de un archivo exportado %GOGEN.
(%GOGEN es la herramienta para exportar globales para Cache 5.xx)
Al principio creí que sería muy simple con bash, pero...
- si se quiere tener un encabezado en el archivo csv
- si se exportan con GOGEN más globales juntos, no solo uno
- si se desea un archivo csv para cada global/índice que tiene el global...
El simple script de bash se pasa de 100 líneas de código. Si volviera a empezar con esto, usaría Python o Go, no bash.

Ejemplo:
Para un archivo EXPORTED.GLO

0
0 2191
Artículo Ricardo Paiva · nov 7, 2019 1m read

¡Hola!

Creo que lo más sencillo es (trabajando con un csv delimitado por ";"):


set file = ##class(%File).%New( "data.csv" )
    set sc = file.Open( "R" )
    if $$$ISERR(sc) quit    ; or do smth
    while 'file.AtEnd {
        set str=file.ReadLine()
        for i=1:1:$length( str, ";" ) {
            set id=$piece( str, ";" ,i )
            write !, id  // or do smth
        }
    }
    do file.Close()

Opciones posibles:

Distintas variantes de manejo de errores con código sc.

Introducir un bucle while dentro de un bloque try/catch.

¿Cuál es la tuya?

0
0 345
Artículo Estevan Martinez · oct 9, 2019 1m read

¡Hola Comunidad!

Tengo una pregunta para todos: en ObjectScript tenemos la variable cls para las clases y mac para el código, y ambas se compilan dentro de int en el código. ¿Hay alguna razón para utilizar mac en lugar de cls  para las clases no-persistentes?

En mi opinión, los beneficios de utilizar cls son:

1. Herencia y otras funciones de la Programación Orientada a Objetos (POO) 

2. Código auto-documentado 

En el caso de mac, una ventaja visible es que es más sencillo llamar al terminal:

do method^Utils(p1,p2)

frente a 

do ##class(Package.Utils).method(p1,p2)

¿Tú cuál prefieres utilizar y por qué?

0
0 183
Artículo Ricardo Paiva · sep 23, 2019 3m read

¡Hola a tod@s!

¿Alguna vez se han encontrado con una query de bajo rendimiento a la cual le falta algún dato para obtener el rendimiento deseado? ¿Han tenido la necesidad de llamar a una función desde una sentencia SQL? Me refiero a funciones definidas por el usuario, no a las funciones ya disponibles (como $LENGTH) o a las variables especiales (como $HOROLOG). Si es así, tenemos solución para esta necesidad - las 'funciones extrínsecas' o 'funciones definidas por el usuario'.

0
0 196
Artículo Nancy Martínez · jun 28, 2019 2m read

¡Hola Comunidad!

Las transformaciones DTL y las llamadas a los métodos GetValueAt/SetValueAt en los mensajes HL7 pueden truncar los campos que tengan más de 32K. Para evitar los truncamientos  en el caso en que los campos excedan los 32K, es posible utilizar los métodos GetFieldStreamRaw y StoreFieldStreamRaw. Un ejemplo frecuente en el que sucede el truncamiento, es el segmento OBX:5.  Se recomienda que  estos métodos se utilicen cuidadosamente, teniendo  en cuenta los detalles específicos que sean requeridos.

0
0 223
Artículo Jose-Tomas Salvador · mayo 30, 2019 2m read

¿Qué pasaría si pudieras serializar/deserializar objetos en cualquier formato: JSON, XML, CSV,...; siguiendo diferentes criterios, exportar/importar unas propiedades y no otras, transformar valores de una u otra forma antes de exportarlos/importarlos,... y todo ello sin tener que cambiar la definición de la clase? ¿No sería genial si pudieras hacer todo eso?

Bueno, quizás sea un objetivo demasiado ambicioso para cumplirlo al 100% pero, al explorar esta idea, desarrollé muchas clases que pensé que sería bueno compartir. Si deseas probar, cambiar, modificar o mejorar el código, o simplemente echarle un vistazo, puedes hacerlo aquí. También encontrarás una explicación más detallada (consulta Readme.md)

Debes tener presente que esto es una prueba de concepto y la realicé durante mis ratos libres, por lo tanto, seguramente no es lo suficientemente robusta o puede mejorarse... pero, solo estaba jugando!....ok, podría haber esperado al lanzamiento del nuevo JSON Adaptor que seguro resuelve muchos escenarios de una manera más limpia, pero... mientras llegaba... :-) ...
2
0 1000