Rechercher

Question
· Sept 5

LOAD DATA from file erroring after upgrade to 2025.1

We have a task that runs objectscript code to load data into a linked external table.  After upgrading from 2024.1 to 2025.1, the load is throwing an error, with error code -400, and no error message.  The data DOES get loaded into the external table in its entirety, so with no meaningful error message, its hard to determine what the issue is.  The result is the same with and without the USING clause, so don't let that confuse you.  We have logs of this statement succeeding before upgrade, and were able to get this statement to work in our production environment, which is still on version 2024.1.  I have recompiled all namespaces after upgrade, stopped and restarted the JDBC server, and have dropped and relinked the external table, all without success.

Code: LOAD DATA FROM FILE '/intersystems/filepath/loadtest.csv' INTO SCM_Table_sandbox.dontest USING {"maxerrors":0,"from": {"file": {"header":false,"columnseparator": ","}}}

SQL Diagnostic Log:

Start time 2025-09-05 18:07:06.822705
User xxxx
Status Complete
Process ID 650691
SQLCODE -400 - See detailed error messages below
Input record count 0
Error count 2 (max error count: 0)
Statement LOAD DATA FROM FILE '/intersystems/filepath/loadtest.csv' INTO SCM_TABLE_SANDBOX . DONTEST USING { "MAXERRORS" :MAXERRORS 0 , "FROM" :FROM { "FILE" :FILE { "HEADER" :HEADER FALSE , "COLUMNSEPARATOR" :COLUMNSEPARATOR "," } } }

Messages:

18:07:06.848 (server) - info: {"resultid":"21","bufferrowcount":500,"queuesize":2,"statistics":false,"from":{"file":{"file":"/intersystems/filepath/loadtest.csv","columns":null,"header":false,"types":null,"columnseparator":",","lineseparator":"\n"},"select":["name","id"],"intotypes":[12,4]},"into":{"table":"SCM_Table_sandbox.dontest","hints":"","columns":["name","id"],"types":[12,4],"values":["?","?"],"bindings":[0,1],"jdbc":{"threads":3}}}

18:07:07.123 (FileReader) - completed: Reader Complete: Total Input file read time: 42 ms,

18:07:07.124 (JdbcWriter) - completed: Writer Complete: Total write time: 45 ms,

18:07:08.219 (JdbcWriter) - completed: Writer Complete: Total write time: 1142 ms,

18:07:08.220 (JdbcWriter) - error: 1

18:07:08.220 (JdbcWriter) - abort: 1

Any help would be appreciated!

-Don Martin, Sanford Health

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Sept 5 4m de lecture

IRIS in Docker para principiantes

El artículo fue motivado por 2025 September Article Bounty
***********************************************************


El principio de Docker me resulta simplemente convincente..

  • Consigue un sandbox donde puedas jugar y probar lo que quieras o necesites hacer.
  • Una vez hecho, lo sueltas sin dejar rastros en tu entorno de trabajo.

Esta fue la base técnica para que yo pudiera realizar alrededor de 700 revisiones en OEX 
con casi ningún efecto secundario (excepto los causados ​​por mí mismo).

Para principiantes, comenzaré con IRIS puro, sin *Health, *ML, *lo que sea. 

Primero, necesitas una instalación de Docker. Está disponible en casi cualquier plataforma.
Mi preferencia personal es Windows Docker Desktop por su cómoda consola de administración.
No profundizo en la gestión detallada de Docker.
Hay suficiente material de lectura para buscar en Docker Docs

En segundo lugar, decides la encarnación de IRIS que prefieras.
El más simple: intersystemsdc/iris-community  preparado para usar

  • Funciona en Ubuntu.
  • Tiene una licencia comunitaria válida.
  • Tiene instalado Apache httpd.
  • Tiene instalado el cliente IPM/ZPM.

Advertencia #1:  Como principiante, no estudies los paquetes que se ofrecen en OEX.
Son excelentes (en su mayoría), pero siempre están orientados a alguna funcionalidad
o aplicación especial que requiere configuraciones especiales y una instalación compleja.

Advertencia #2:  Docker cuenta con un amplio conjunto de comandos con todo lo necesario.
Y esos comandos ofrecen una gran cantidad de parámetros (a veces confusos).
Por lo tanto, sugiero que se puedan reproducir mediante scripts dedicados.
Dockerfile es la mejor manera de trabajar con construcciones complejas que requieren
una carga inicial de muchos extras. Normalmente los he visto relacionados con Python
y con varios casos de demostración de IA. Este ejemplo no es necesario.
docker-compose.yml es el lugar real para hacer estallar tu contenedor. Necesita:

  • una definición de lo que quieres "componer" >> service: 
    • un nombre para ello  >>  iris:
    • qué imagen ejecutar  >> image: intersystemsdc/iris-community
  • A continuación, debe definir cómo el puerto SuperServer 1972 y el puerto WebServer predeterminado 52773 serán visibles fuera del contenedor.
    •     ports:      - 41773:1972   - 42773:52773
  • Por último, no es un requisito urgente, pero a menudo es muy útil asignar su directorio local a algún directorio interno dentro del contenedor. Yo usé /external
    • ​Especialmente al principio, este camino bidireccional hace la vida realmente fácil.
      <strong>volumes:</strong>
       - ./:/external

Ahora bien, este es el texto final de docker-compose.yml

services:
  iris:
    image: intersystemsdc/iris-community
    ports: 
      - 41773:1972
      - 42773:52773
    volumes:
      - ./:/external

Y ahora está listo para ejecutar su primera instancia de IRIS en Docker

  • docker-compose up  Permite ver el inicio completo.
  • docker-compose up -d  Inicia un inicio en segundo plano y mantiene su línea de comandos libre
  • docker ps -a    Muestra puertos e imágenes en ejecución de su contenedor IRIS

Bien, tu nuevo IRIS ya está en Docker..
¿Pero cómo puedes utilizarlo?

  • Tienes el WebServer y por tanto el Portal de Gestión http://localhost:42773/csp/sys/UtilHome.csp
  • Tienes el SuperServerPort para acceso ODBC, IRIS NATIVE, ... (e incluso Studio)
  • Y también puedes acceder a IRIS desde la línea de comandos dentro del contenedor​​​​​​
    • docker-compose exec iris iris session iris
  • Al dividir esta única línea, se accede primero al contenedor y luego a IRIS.
    • docker-compose exec iris bash
    • Álora iris view
      • Instance 'IRIS'   (default)
                directory:    /usr/irissys
                versionid:    2025.1.0.223.0com
                datadir:      /usr/irissys
                conf file:    iris.cpf  (WebServer port = 52773)
                status:       running, since Thu Sep  4 14:35:19 2025
                SuperServers: 1972
                state:        ok
                product:      InterSystems IRIS
      • y iris session iris
      • Node: 3266c5c8b21f, Instance: IRIS 
        USER>
    • Aquí en el nivel bash, tienes todas las opciones para que IRIS funcione en tus manos.
      • Tu usuario de Ubuntu es irisowner.
    • Para los casos excepcionales en los que pueda necesitar acceso root
      • docker-compose exec -u root iris bash
    • Detenga su contenedor con  docker-compose down

Algunas consideraciones sobre los cambios durante la sesión del contenedor.

  • Todo lo que crees, cambies o modifiques existirá mientras exista el contenedor.
    • Una vez que se elimina el contenedor, todos los cambios, ... desaparecen.
  • Esto podría resultar molesto con configuraciones grandes.
  • Dockerfile se encarga de una configuración que se realiza una vez en un ciclo de compilación, de manera diferente para ejecutar la configuración en cada inicio del contenedor..
  • Esta es una buena práctica en paquetes OEX, aunque puede parecer exagerada en algunos casos. 
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Sept 5 1m de lecture

Comment générer une erreur personnalisée

Rubrique FAQ InterSystems

Si vous souhaitez générer une erreur personnalisée arbitraire dans un bloc TRY, vous pouvez transmettre une exception avec un throw comme suit. Dans l'exemple suivant, une erreur personnalisée est générée si Stcount est inférieur à 1.

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codes
      if (Stcount<1) {
          throw ##class(%Exception.General).%New("User-defined error", "5001", "location", "Data at location error")
          // User-created errors are 5001 and above
      }
    }
    catch ex
    {
      write "Errors #", ex.Code, ": ", ex.Name, " : ", ex.Location, " ", ex.Data
      return
    }
 }
}

Dans l'exemple ci-dessus, si Stcount est inférieur à 1, une erreur comme celle-ci sera générée :

USER>do ##class(User.Test).ExceptionTest()
Error #5001: User-defined error: Data at location error

Pour plus d'informations, consultez la documentation suivante :
ObjectScript command _THROW

Si vous souhaitez créer un code d’état arbitraire, procédez comme suit :

USER>set st = ##class(%SYSTEM.Status).Error(5001,"This is a user-defined error")

USER>zwrite st
st="0 "_$lb($lb(5001,"This is a user-defined error",,,,,,,,$lb(,"USER",$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0"))))/* Error #5001: This is a user-defined error */
USER>do $SYSTEM.Status.DisplayError(st)

Error #5001: This is a user-defined error
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Sept 5

[Vidéo de démonstration] Éliminer le gaspillage dans les chaînes d'approvisionnement des soins de santé

#InterSystems Demo Games


⏯️  Éliminer le gaspillage dans les chaînes d'approvisionnement des soins de santé
 

Entre les rappels de fournitures, les stocks périmés et les dépenses inconsidérées, on estime que 25 milliards de dollars par an sont gaspillés dans les chaînes d'approvisionnement du secteur de la santé. Nous savons à quel point la chaîne d'approvisionnement est cruciale dans le secteur de la santé ; nous savons donc que ce problème mérite d'être résolu ! À quoi pourrait ressembler une solution ? Regardez et découvrez-la !

Présentateurs:
🗣 @Georgia Gans, Sales Engineer, InterSystems
🗣 @Annie Tong, Sales Engineer, InterSystems
🗣 @Boris Mamkin, Senior Sales Engineer, InterSystems

👉 Vous aimez cette démo ? Soutenez l'équipe en votant pour elle dans les jeux de démonstration !

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Sept 5

[Vidéo] Redonner du temps patient aux soignants: InterSystems IntelliCare, un DPI nouvelle Gen(AI)ration

Salut la Communauté!

Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France :

📺 Redonner du temps patient aux soignants: InterSystems IntelliCare, un DPI nouvelle Gen(AI)ration

InterSystems TrakCare évolue. Avec l’IA intégrée dans ses workflows, découvrez InterSystems IntelliCare : un dossier patient nouvelle génération qui simplifie le quotidien des professionnels de santé et leur redonne du temps patient.

Abonnez-vous à notre chaîne YouTube pour plus de vidéos !

Discussion (0)0
Connectez-vous ou inscrivez-vous pour continuer