¡Hola Comunidad!
Os traemos un nuevo vídeo, grabado por Robert Cemper y disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés:
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.
¡Hola Comunidad!
Os traemos un nuevo vídeo, grabado por Robert Cemper y disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés:
¡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.
La mayoría de las características de esta versión ya se incluyen desde la versión 0.
Intento conectar Objectscript a Intersystems en VSCode pero me aparece este error, soy nuevo en esto, no se si estare cometiendo algun error en la configuracion, segui este tutorial https://intersystems-community.github.io/vscode-objectscript/configuration/
adjunto capturas de pantalla
.vscode/settings.json
.png)
settings.json (Servidor)
ERROR
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
downLoadFile = Número de archivos o todos los archivos .
Yo uso estas clases de ejemplo:
Class Sample.Address Extends (%SerialObject, %Populate)
{Property Street As %String;
Property City As %String;
Property State As %String(POPSPEC = "USState()");
Property Zip As %String;}
Class Sample.Person1 Extends (%Persistent, %Populate)
{ Property Name As %String;
Property Home As Sample.Address;
Property AR As array Of Sample.Address; }
En SQL es Table Sample.Person1.png)
No hay problema para definir INDEX on Home_State
But Table Sample.Person1_AR
Cómo definir un INDEX on AR_State ?
Index st On AR.State;
¡No compila!
Hola a todos.
Tengo un mensaje reponse que tiene una property del tipo %Collection.ListOfObj y necesito buscar un elemento en esta lista. Os lo explico.
¡Hola desarrolladores!
Cuando desarrollas o mantienes aplicaciones en Cache Object Script, en ocasiones es muy útil poder investigar dependencias.
He encontrado la tool Yuzinji que analiza el diccionario de clases y el código COS incluyendo rutinas y mete los resultados en el famoso Structure101g Studio.
Haciendo esto se vuelve sencillo responder a preguntas como "¿Quien usa ese código?", ya que se dispone de la información en un formato que permite explorar fácilmente. Por ejemplo analicé todos los packages en el namespace de SAMPLES de una 2016.
¡Hola desarrolladores!
¿Buscáis un IDE rápido y eficiente para desarrollar con código ObjectScript? Echad un vistazo al nuevo vídeo disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés:
⏯ ObjectScript con Visual Studio Code
¡Hola desarrolladores!
Después de trabajar un poco con IRIS, queremos compartir con vosotros la "caja de herramientas" para InterSystems IRIS: ToolBox-4-Iris.
¿En qué consiste?
ToolBox-4-Iris es una API para IRIS que incluye un conjunto de herramientas muy útiles, no disponibles en IRIS y que simplifican enormemente el desarrollo de aplicaciones. Permite ahorrar tiempo y esfuerzo en las "herramientas típicas" que todo desarrollador necesita. Esto incluye clases adicionales, métodos individuales o incluso macros más eficientes, que se describen en sus respectivos paquetes.
Intento ejecutar una pequeña rutina de prueba (adivinar un número aleatorio) en WebTerminal pero el resultado parece roto.
IRISterminal:
.png)
WebTerminal:
Creo que se relaciona con el backspace.
¿Se requiere algún ajuste especial?
El código:
a
s q=".......... guess [0..9]: "
f i=1:1 d b if p w ! w $c(9),"thank you",! q
q
b
w !,i,$c(9),q
f r v#1 q:(v?.1n) w " !no number",$c(8,8,8,8,8,8,8,8,8,8,8,8)
w " "
s r=$R(10),p=$s(v="":1,v=r:"!",v>r:"<",1:">")
s x=q,$e(x,r+1)="*",$e(x,v+1)=$s(v=r:"!",v>r:"<",1:">")
q:p w $c(13),$c(9),x s p=v=r q
¡Hola desarrolladores de ObjectScript!

InterSystems ObjectScript es probablemente el mejor lenguaje del mundo para trabajar con globals - y es un lenguaje interpretado.
Sí, tiene un compilador. Pero incluso el compilador puede dejar escapar y compilar algunas líneas en ObjectScript que después generen error en tiempo de ejecución.
Hay algunas técnicas para evitarlo tales como los tests unitarios, guías de programación y, por supuesto, ¡tu experiencia programando! ;)
Aquí quiero presentarte otra alternativa más para que puedas reducir el número de errores de ejecución de tu ObjectScript y reforzar la aplicación de tus guías de programación - se trata de la herramienta de Calidad de ObjectScript desarrollada por Lite Solutions, un partner de InterSystems.
Más detalles a continuación.
Un requisito frecuente en muchas aplicaciones es registrar en una base de datos los cambios que se realizan en los datos- qué datos se modificaron, quién los modificó y cuándo (control de cambios). Hay muchos artículos relacionados con el tema y existen diferentes métodos sobre cómo hacer esto en Caché.
Por ello, comparto un procedimiento que puede ayudar con la implementación de una estructura para seguir y registrar los cambios en los datos.
¡Hola Comunidad!
El plazo para participar en el Tercer Concurso para Desarrolladores de InterSystems ha terminado y empieza la fase de votación.
Hemos recibido 8 aplicaciones - así que ya hay suficientes para elegir la mejor!
¿Cómo puedes votar?
Es muy fácil: tienes un voto, y tu voto irá en la Nominación de los Expertos o en la Nominación de la Comunidad.
En este artículo me gustaría contarle acerca de las macros en InterSystems Caché. Una macro es un nombre simbólico que se reemplaza con un conjunto de instrucciones durante la compilación. Una macro puede "desplegarse" en varios conjuntos de instrucciones cada vez que se llama, dependiendo de los parámetros que se le pasen y los escenarios activados. Esto puede ser tanto código estático como el resultado de la ejecución de ObjectScript. Echemos un vistazo a cómo puede usarlos en su aplicación.
Hola a todos,
Creé un Generador Identicon inspirado en el Fabio Gonçalves Captcha Validator.
Este ejemplo se puede usar para crear Identicons para usuarios de aplicaciones, por ejemplo, puede ser útil para usar en aplicaciones Zen Mojo, generando una imagen de identificador basada en el nombre del usuario, por ejemplo, pero también se puede usar en otros tipos de aplicaciones (Zen, CSP, etc.).
Ejemplos:
Primero:

Generará esto:
es este:
Generará esto:
Ver mi proyecto en Github: https://github.com/AndreiLN/Ikon
Atentamente,
Andrei L. Nenevê
Aqui teneis una clase "test" con el código para envíar un correo electrónico en formato HTML con una imagen incrustada. Edita el texto para cambiar la imagen incrustada, dirección de destino y remitente, asunto, contenido, etc...
Class objectscript.sendEmailWithImage Extends %RegisteredObject
{
classmethod test() {
S SmtpServer = ""
S SmtpUserName = ""
S SmtpPassword = ""
S imgPath="C:\test.jpg"
set s=##class(%Net.SMTP).%New()
set s.smtpserver=SmtpServer
set auth=##class(%Net.Authenticator).%New() ; use default authentication list
set auth.UserName=SmtpUserName
set auth.Password=SmtpPassword
set s.authenticator=auth
Set objMail=##class(%Net.MailMessage).%New()
Set objMail.From="sender@testhost.com"
Do objMail.To.Insert("reciever@testhost.com")
Set objMail.Subject="Test-Email"
Set objMail.Charset="iso-8859-1"
Set obj1 =objMail
Set obj1.IsHTML=1
Set obj1.IsBinary = 0
Set obj1.IsMultiPart = 1
Set obj1.MultiPartType ="related"
Do obj1.Headers.SetAt("inline","Content-Disposition")
//alternative container for the text-parts
#dim textbody as %Net.MailMessagePart
s textbody = obj1.AttachNewMessage()
s textbody.IsMultiPart=1
s textbody.IsHTML=0
s textbody.MultiPartType="alternative"
//html part
#dim text as %Net.MailMessagePart
//text part
#dim texttxt as %Net.MailMessagePart
s texttxt = textbody.AttachNewMessage()
//s texttxt.ContentType="text/plain"
d texttxt.TextData.Write("this is plain text")
s text = textbody.AttachNewMessage()
s text.IsHTML=1
s text.IsBinary=0
s text.IsMultiPart=0
Do text.TextData.Write("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">")
do text.TextData.Write("<html><head><meta http-equiv=""content-type"" content=""text/html; charset=ISO-8859-1"">")
Do text.TextData.Write("</head><body text=""#000000"" bgcolor=""#ffffff"">")
Do text.TextData.Write("Das ist ein Test in html")
Do text.TextData.Write("<img src=""cid:test.jpg"" />")
Do text.TextData.Write("</body></html>")
// Image Message Part
#dim obj2 as %Net.MailMessagePart
Set obj2 = obj1.AttachNewMessage()
Set obj2.IsBinary = 1
Set obj2.IsMultiPart = 0
Set obj2.FileName="test.jpg"
Do obj2.BinaryData.LinkToFile(imgPath)
Do obj2.Headers.SetAt("inline","Content-Disposition")
Do obj2.Headers.SetAt("<test.jpg>","Content-ID")
set status=s.Send(objMail)
d $system.OBJ.DisplayError(status)
w status,!
}
Estoy encantado de anunciar que InterSystems se unirá a la comunidad de código abierto (open source) en el proyecto de Extensión de Visual Studio Code para InterSystems ObjectScript. A principios de este año Raj Singh publicó que emprendíamos un viaje para redefinir el futuro de nuestra estrategia en relación al IDE, y llegamos a la conclusión de que es Visual Studio Code el IDE que puede soportar ese futuro.
¡Hola Comunidad!
Os traemos un nuevo vídeo, disponible en el Canal de YouTube de la Comunidad de Desarrolladores en inglés:
InterSystems y Python: Primeros pasos
¡Hola Desarrolladores!
El primer Concurso de Programación con InterSystems IRIS ya ha terminado. ¡Gracias a todos los participantes!
Recibimos 20 apps excelentes y ya podemos anunciar los ganadores.
.jpg)
¡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.
¡Hola Comunidad!
El plazo para participar en el Primer Concurso para Desarrolladores de InterSystems terminó ayer y empieza la fase de votación.
Hemos recibido 20 aplicaciones hasta ahora - así que ya hay suficientes para elegir la mejor!
¿Cómo puedes votar?
Es muy fácil: tienes un voto, y tu voto irá en la Nominación de los Expertos o en la Nominación de la Comunidad.
¡Hola Desarrolladores!
Os dejamos un nuevo video en formato "coding talk" ("Charlas sobre programación"), especialmente realizado por @Evgeny.Shvarovpara el Concurso para Desarrolladores de InterSystems:
⏯ Cómo crear y enviar una aplicación al Concurso para Desarrolladores de InterSystems
¡Hola Comunidad!
Esta publicación es para presentarles uno de los primeros proyectos en COS de @henry. Lo creó cuando empezó a aprender el lenguaje y lo sigue mejorando hasta hoy.
El CosFaker (aquí en Github) es una biblioteca de COS pura, para generar datos falsos.
cosFaker vs Utils de populación
¿Por qué usar cosFaker si Caché tiene la utilidad de popular datos?
La utilidad de populado tiene algunas características excelentes, como por ejemplo el generador de SSN, ¿pero qué hacer cuando tenemos un campo con una descripción larga de un producto?
¡Hola desarrolladores!
Este mes de marzo lanzamos nuestro primer Concurso de Programación con InterSystems IRIS! El objetivo del concurso es crear soluciones de código abierto utilizando InterSystems IRIS Data Platform.
El tema del primer concurso es InterSystems IRIS, Docker y ObjectScript.
El concurso estará activo durante tres semanas, del 9 al 31 de marzo de 2020.
Premios:
Habrá una Nominación de los Expertos,en la que los ganadores serán elegidos por un jurado especialmente formado para el concurso. Los premios serán:
🥇 1er puesto - $2,000
🥈 2º puesto - $1,000
🥉 3er puesto - $500
Además, habrá una Nominación de la Comunidad, en la que ganará la aplicación que obtenga el mayor número total de votos. El premio será:
🏆 1er puesto - $1,000
Los ganadores también recibirán las insignias de mayor nivel del programa de fidelización Global Masters.
(La guía definitiva sobre $zv para la galaxia ISC en palabras sencillas y entendibles).
No pretendo decir que esto sea una guía de "buenas prácticas", pero estoy en una situación particular en la que necesito impedir que los usuarios inicien una producción de Ensemble “retirada” en un namespace renombrado. Sigue siendo un namespace activo, por lo que debemos mantenerlo disponible para acceder al visor de mensajes... afortunadamente, solo por un tiempo.
Es un truco …
Abrimos la clase de la Producción en el estudio y añadimos el siguiente ClassMethod:
ClassMethod OnStart() As %Status
{
Return $system.Status.Error(5001,"THIS PRODUCTION IS DISABLED.")
}
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.
Esta publicación es el resultado directo de trabajar con un cliente de InterSystems que acudió a mí con el siguiente problema:
SELECT COUNT(*) FROM MyCustomTableEsto tarda 0.005 segundos, con 2300 filas en total. Sin embargo:
SELECT * FROM MyCustomTableTardó algunos minutos. La razón de que esto sucediera es lo suficientemente sutil e interesante para mí como para escribir una publicación sobre ello. Esta publicación es extensa, pero si va hasta el final verá que escribí un resumen rápido.
En este artículo vamos a comparar las funciones $Increment y $Sequence.
En primer lugar, una nota para los lectores que nunca han oído hablar de $Increment $Increment es una función Caché ObjectScript que realiza una operación atómica para incrementar su argumento en 1 y devolver el valor resultante. Solo puede pasar un nodo variable global o local como parámetro a $Increment, no una expresión arbitraria. $Increment se usa mucho al asignar ID secuenciales. En tales casos, el parámetro de $Increment suele ser un nodo global.
El equipo certificación hemos recibido algunas preguntas de los desarrolladores de Caché que piensen tomar el exam InterSystems IRIS Core Solutions Developer. Pensé que ahora sería un buen momento para aclarar algunas dudas que la comunidad pueda tener.
Incluso si Ud. aún no ha trabajado con InterSystems IRIS, el examen puede ser apto para usted si ya tiene experiencia en Caché. Si miramos los Exam Details veremos que solo hay un tema específico de IRIS.