ir a la publicación Jose Tomas Salvador · 17 feb, 2022 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}
ir a la publicación Jose Tomas Salvador · 14 dic, 2021 Actualmente se está investigando. En lo que concierne a tecnología de InterSystems, toda la información sobre este tema se puede encontrar aquí.
ir a la publicación Jose Tomas Salvador · 30 nov, 2021 Como ya extiendes de %XML.Adaptor, directamente pueden utilizarse las funcionalidades de esa clase para obtener el XML, por ejemplo: do objectTest.XMLExportToString(.xml) write xml que ya te generará: <Test><Person><name>John</name><age>22</age></Person><Address><location>New York NY 10036</location></Address></Test>
ir a la publicación Jose Tomas Salvador · 13 sep, 2021 Hola, la mayoría de los componentes de interoperabilidad son clases, así que se puede utilizar ZPM sin problemas. Hay otros componentes relacionados con la interoperabilidad que no son clases y que ZPM también soporta: .LUT - Tablas de Lookup .ESD - para Ens.Config.DefaultSettings .X12 - para documentos X12 Si utilizas esos componentes, lo tendrás ubicados por defecto en el directorio i14y de tu proyecto. Aquí tienes una plantailla que puedes usar: interoperability-sample.
ir a la publicación Jose Tomas Salvador · 9 jul, 2021 En IRIS puedes decidir cual es el nombre con que se proyecta una propiedad en SQL utilizando el cualificador SqlFieldName al definir la propiedad en la clase: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=RO... Igualmente, podrías utilizar directamente el nombre en su formato digamos SQL, fist_name en la propia definición de la clase... simplemente inclúyelo entre comillas: Property "first_name" as %String De este modo, tanto la propiedad en Objetos, como la columna en SQL se llamarían igual... A mí esta segunda opción me gusta menos, porque obliga a utilizar esa propiedad entre comillas en nuestro código cuando la manipulemos como propiedad de un objeto ... Si sólo atacas IRIS desde el punto de vista relacional, te da más igual.
ir a la publicación Jose Tomas Salvador · 25 jun, 2021 Hola, habría varias opciones. Quizá la más habitual: 1. Instalar un servidor web público (Windows, Linux). 2. Conectarlo a InterSystems IRIS. 2. Habilitar HTTPS en el servidor web. LA forma más sencilla es Let's Encrypt. Otra opción sería utilizar un proxy server en docker. Como Guillaume Rongier hace en este ejemplo publicado en GitHub: https://github.com/grongierisc/Https-Proxy-IRIS-Docker o este de Lorenzo Scalese: https://github.com/lscalese/isc-webgateway-letsencrypt
ir a la publicación Jose Tomas Salvador · 17 jun, 2021 EXPLAIN es también un comando SQL soportado por InterSystems IRIS. Se puede llamar desde la shell como cualquier otro comando. Igualmente, para el ver el plan tambien se puede hacer en el Explorador SQL, pulsando el botón "Mostrar Plan" con la sentencia SQL en cuestión.
ir a la publicación Jose Tomas Salvador · 31 mayo, 2021 Una de las opciones - No usar el namespace USER. Por qué preocuparnos de lidiar con USER? Una opción más productiva y limpia es crear tu propia base y namespace desde cero. Eso es por lo que creamos una nueva base de datos y namespace IRISAPP en cada plantailla, por ejemplo: las plantillas objectscript, rest o ZPM package. Con esta aproximación del tipo infrastructure-as-a-code, sabes con seguridad que namespaces, mapeos, seguridad, bases de datos, usuarios, ... utilizas y cómo se configuran, porque son los que creas tu. En todo caso, en instalaciones iniciales de InterSystems IRIS, al menos desde la versión 2020.1, el namespace USER no viene configurado por defecto con la opción de interoperabilidad activada.
ir a la publicación Jose Tomas Salvador · 22 abr, 2021 La sentencia tiene un error sintáctico, constraint debe ir precedido por una coma. Por otro lado, si lo que se quiere es tener un identificador de fila autoincremental creciente, basta con no indicar la columna ID (y por tanto eliminar la constraint por innecesaria), ya que IRIS creará por defecto una columna ID que mantendrá un valor único numérico creciente por cada nueva fila. Quedaría: CREATE TABLE SQLUser.Teste (coluna1 VARCHAR (255), coluna2 VARCHAR (255), coluna3 VARCHAR (255), coluna4 VARCHAR (255)) En este caso no tendríamos Primary Key, tendríamos sólo un IDKEY, proyectado en SQL como la columna ID, cuyos valores identifican unívocamente cada fila. Si lo que queremos es tener una primary key que podamos insertar explícitamente nosotros, pues esa sentencia valdría, añadiendo la coma que falta claro: CREATE TABLE SQLUser.Teste (ID INT NOT NULL, coluna1 VARCHAR (255), coluna2 VARCHAR (255), coluna3 VARCHAR (255), coluna4 VARCHAR (255), CONSTRAINT TestePK PRIMARY KEY (ID)) En ese caso, al existir ya una columna con nombre ID, IRIS generaría una columna de nombre ID1 donde igualmente nos daría un valor numérico creciente único por fila. Este ID1 sería el IDKEY (no confundir con Primary Key) e ID la Primary Key. Si quisiéramos tener una Primary Key que coincidiera con el IDKEY, haríamos: CREATE TABLE SQLUser.Teste (ID INT IDENTITY, coluna1 VARCHAR (255), coluna2 VARCHAR (255), coluna3 VARCHAR (255), coluna4 VARCHAR (255), CONSTRAINT TestePK PRIMARY KEY (ID))
ir a la publicación Jose Tomas Salvador · 15 abr, 2021 @Julius Kavay ha dado una muy buena alternativa. En lugar de insertar debug_macros, prueba la utilidad TRACE de Intersystems. write $$DIR^TRACE("c:\Temp\") ; to set an output directory write $$ON^TRACE(jobnr) ; the pid of the process you want to trace ; zn "appNamespace" ; do ^yourProgram ; zn "%SYS" write $$OFF^TRACE(jobnr) ; to stopp the trace do ^TRACE ; to display the trace result TRACE muestras las llamadas a métodos/funciones con argumentos. Para hacer uso de ella, debéis de estar en el namespace %SYS... o podéis mapearla al namespace %ALL y así la podréis utilizar desde cualquier sitio. No aparece actualmente en la documentación oficial, pero podéis encontrar información de uso ejecutando do ^TRACE y en la propia rutina ^TRACE.int (podéis ver el código fuente completo desde el portal, el Studio, VS Code,...)