Pesquisar

Artigo
· Set. 6 4min de leitura

IRIS inDocker pour les débutants

Cet article a été motivé par le concours Article Bounty de septembre 2025.
***************************************************************************


Le principe de Docker me semble tout simplement convaincant.

  • Obtenez un bac à sable dans lequel vous pouvez jouer et essayer tout ce que vous voulez/devez faire.
  • Une fois terminé, vous le supprimez sans laisser de traces dans votre environnement de travail.

C'est sur cette base technique que j'ai pu effectuer environ 700 évaluations dans OEX 
sans pratiquement aucun effet secondaire  (à l'exception de ceux causés par moi-même).

Pour les débutants, je commencerai par IRIS pur, sans *health, *ML, *toute variante.

Tout d'abord, vous devez installer Docker. Il est disponible sur presque toutes les plateformes.
Je préfère personnellement Windows Docker Desktop pour sa console d'administration pratique.
Je ne m'attarde pas sur la gestion détaillée de Docker.
Il existe suffisamment de documentation à ce sujet dans  Docker Docs

Ensuite, vous devez choisir l'incarnation IRIS qui vous convient.
La plus simple : intersystemsdc/iris-community  prête à l'emploi.

  • Fonctionne sous Ubuntu.
  • Dispose d'une licence communautaire valide.
  • Dispose d'Apache httpd installé.
  • Dispose d'un client IPM/ZPM installé.

Avertissement n° 1 en tant que débutant, n'étudiez pas les paquets proposés sur OEX.
Ils sont excellents (pour la plupart), mais toujours destinés à certaines fonctionnalités
ou à certaines applications spéciales qui nécessitent des paramètres particuliers et une installation délicate.

Avertissement n° 2 :  Docker dispose d'un ensemble complet de commandes avec tout ce
dont vous avez besoin. Et ces commandes offrent une multitude de paramètres (parfois déroutants).
Je vous suggère donc de les rendre reproductibles à l'aide de scripts dédiés.
Dockerfile  est la solution à adopter pour les constructions complexes comportant de nombreux
éléments supplémentaires à charger au préalable. Je les ai généralement vus associés à Python
et à divers cas de démonstration d'IA
Pour cet exemple, il n'est pas nécessaire.
docker-compose.yml est le véritable outil pour faire exploser votre conteneur. Il nécessite :

  • une définition de ce que vous souhaitez "composer"  >> service: 
    • un nom pour celui-ci  >>  iris:
    • quelle image exécuter  >> image: intersystemsdc/iris-community
  • Ensuite, vous devez définir comment le port SuperServer 1972 et le port WebServer par défaut 52773 seront visibles à l'extérieur du conteneur
    •     ports:      - 41773:1972   - 42773:52773
  • Enfin,  ce n'est pas une exigence urgente, mais il est souvent très utile de mapper votre répertoire local à un répertoire interne du conteneur. J'ai utilisé  /external Surtout au début, ce chemin bidirectionnel facilite vraiment la vie.
    • volumes:  - ./:/external

Voici maintenant le texte final de docker-compose.yml

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

Vous êtes maintenant prêt à exécuter votre première instance IRIS dans Docker

  • docker-compose up  vous permet de suivre l'intégralité du démarrage
  • docker-compose up -d  lance un  démarrage en arrière-plan et libère votre ligne de commande
  • docker ps -a    affiche les ports et les images en cours d'exécution de votre conteneur IRIS

Alors, votre nouvelle instance IRIS est désormais dans Docker.
Mais comment l'utiliser ?

  • Vous disposez du serveur Web et donc du portail de gestion http://localhost:42773/csp/sys/UtilHome.csp
  • Vous disposez du SuperServerPort pour l'accès ODBC, IRIS NATIVE, ... (et même Studio). 
  • Et vous pouvez également accéder à IRIS à partir de la ligne de commande à l'intérieur du conteneur.​​​​​​
    • docker-compose exec iris iris session iris
  • En divisant cette ligne unique, vous accédez d'abord au conteneur, puis à IRIS
    • docker-compose exec iris bash
    • Puis 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
      • Puis iris session iris
      • Node: 3266c5c8b21f, Instance: IRIS 
        USER>
    • Au niveau bash, vous disposez de toutes les options pour faire fonctionner IRIS.
      • Votre utilisateur Ubuntu est    irisowner
    •  Dans les rares cas où vous pourriez avoir besoin d'un accès root, utilisez 
      • docker-compose exec -u root iris bash
    • Arrêtez votre conteneur avec docker-compose down

Quelques considérations sur les modifications apportées pendant la session du conteneur..

  • Tout ce que vous créez, changez ou modifiez existe tant que le conteneur existe.
    • Une fois le conteneur supprimé, toutes les modifications, .... disparaissent. 
  • Cela peut être gênant dans le cas de configurations volumineuses.
  • Dockerfile  se charge d'une configuration qui n'est effectuée qu'une seule fois dans un cycle de compilation, contrairement à l'exécution de la configuration à chaque démarrage du conteneur. Il s'agit d'une bonne pratique dans les paquets OEX, même si cela peut sembler excessif dans certains cas. 
Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Set. 5 4min de leitura

IRIS no Docker para iniciantes

O artigo foi motivado pelo 2025 September Article Bounty
********************************************************


O princípio do Docker é simplesmente convincente para mim.

  • Obtenha uma área restrita onde você pode brincar e tentar o que quiser/precisar fazer.
  • Depois de terminar, você pode descartá-la sem deixar rastros em seu ambiente de trabalho.

Essa foi a base técnica que me permitiu executar cerca de 700 revisões no OEX 
quase sem efeitos colaterais  (exceto aqueles causados por mim mesmo).

Para iniciantes, vou começar com o IRIS puro, sem *health, *ML, *whatever.

Primeiro, você precisa instalar o Docker. Ele está disponível em quase todas as plataformas.
Minha preferência pessoal é o Windows Docker Desktop por seu console de
administração confortável. Não me aprofundo na gestão detalhada do Docker.
Há material de leitura suficiente para pesquisar no Docker Docs

Segundo, você decide sobre uma encarnação do IRIS de sua escolha
a mais simples: intersystemsdc/iris-community  pronta para usar

  • roda no Ubuntu
  • tem uma licença comunitária válida
  • tem o Apache httpd instalado
  • tem o cliente IPM/ZPM instalado

Aviso nº 1:  Como iniciante, não estude os pacotes oferecidos no OEX
Eles são ótimos (na maioria), mas sempre direcionados a alguma funcionalidade
para alguma aplicação especial que requer configurações especiais e uma instalação complicada.

Aviso nº 2:  O Docker tem um rico conjunto de comandos com tudo o que você precisa
E esses comandos oferecem uma enxurrada de parâmetros (às vezes confusos).
Portanto, sugiro torná-los reproduzíveis usando scripts dedicados.
Dockerfile  é a maneira de lidar com construções complexas com muitos extras a serem
carregados antecipadamente. Normalmente, eu os via relacionados ao Python e a vários casos de demonstração de IA.
Não há necessidade desse exemplo.
docker-compose.yml é o verdadeiro responsável por ativar seu contêiner.
Ele precisa de:

  • uma definição do que deseja “compor”  >> service: 
    • um nome para elet  >>  iris:
    • qual imagem executar  >> image: intersystemsdc/iris-community
  • Em seguida, você precisa definir como a porta 1972 do SuperServer e a   porta padrão 52773 do WebServer ficarão visíveis fora do contêine
    •     ports:      - 41773:1972   - 42773:52773
  • Por fim,  não é um requisito urgente, mas muitas vezes é muito útil mapear seu diretório local para algum diretório interno no contêiner. Eu usei /external Especialmente no início, esse caminho bidirecional facilita muito a vida
    • volumes:  - ./:/external

Agora, este é o texto final do docker-compose.yml

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

Agora você está pronto para executar sua primeira instância do IRIS no Docker

  • docker-compose up  permite que você assista à inicialização completa
  • docker-compose up -d  inicia uma  inicialização em segundo plano e mantém
  • docker ps -a    mostra as portas e as imagens em execução do seu contêiner

OK, seu novo IRIS está no Docker agora.
Mas como você pode usá-lo?

  • Você tem o WebServer e, portanto, o Portal de Gerenciament
  • Você tem o SuperServerPort para acesso ODBC, IRIS NATIVE, ... (e até mesmo Studio).
  • E você também pode acessar o IRIS a partir da linha de comando dentro do contêiner.er​​​​​​
    • docker-compose exec iris iris session iris
  • Dividindo essa única linha, você acessa primeiro o contêiner e depois o IRIS
    • docker-compose exec iris bash
    • Then 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
      • E iris session iris
      • Node: 3266c5c8b21f, Instance: IRIS 
        USER>
    • Aqui, no nível do bash, você tem todas as opções para operar o IRIS em suas mãos Seu usuário Ubuntu é   irisowner
    • para os raros casos em que você pode precisar de acesso root  docker-compose exec -u root iris bash
    • Pare seu contêiner com   docker-compose down

Algumas considerações sobre alterações durante a sessão do contêiner.

  • Tudo o que você criar, alterar ou modificar existirá enquanto o contêiner existir.
    • Depois que o contêiner for excluído, todas as alterações, etc., desaparecerão. 
  • Isso pode ser incômodo em configurações grandes.
  • O Dockerfile cuida de uma configuração que é feita uma vez em um ciclo de compilação, em vez de executar a configuração a cada inicialização do contêiner.
  • Essa é uma boa prática em pacotes OEX, embora eu
Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Set. 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

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Set. 5 4min de leitura

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. 
Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Set. 5 1min de leitura

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
Discussão (0)1
Entre ou crie uma conta para continuar