検索

記事
· 2025年10月21日 2m read

Practical use of XECUTE (InterSystems ObjectScript)

If you start with InterSystems ObjectScript, you will meet the XECUTE command.
And beginners may ask: Where and Why may I need to use this ?

The official documentation has a rich collection of code snippets. No practical case.
Just recently, I met a use case that I'd like to share with you.

The scenario:

When you build an IRIS container with Docker, then, in most cases,
you run the  initialization script  

iris session iris < iris.script 

This means you open a terminal session and feed your input line-by-line from the script.
And that's fine and easy if you call methods, or functions, or commands.
But looping over several lines is not possible.
You may argue that running a FOR loop in a line is not a masterpiece.
Right, but the lines are not endless and the code should remain maintainable.

A different goal was to leave no code traces behind after setup.
So iris.script was the location to apply it.

The solution

XECUTE allowed me to cascade my multi-line code.
To avoid conflicts with variable scoping, I just used %Variables 
BTW: The goal was to populate some demo LookupTables.
Just for comfort, I used method names from %PopulateUtils as table names

   ;; generate some demo lookup tables   
   ; inner loop by table
    set %1="for j=1:1:5+$random(10) XECUTE %2,%3,%4"
    ; populate with random values
    set %2="set %key=##class(%PopulateUtils).LastName()"
    set %3="set %val=$ClassMethod(""%PopulateUtils"",%tab)"
    ; write the table
    set %4="set ^Ens.LookupTable(%tab,%key)=%val"
    set %5="set ^Ens.LookupTable(%tab)=$lb($h) write !,""LookupTable "",%tab"
    ; main loop
    XECUTE "for %tab=""FirstName"",""City"",""Company"",""Street"",""SSN"" XECUTE %1,%5"
    ;; just in Docker

The result satisfied the requirements without leaving permanent traces behind 
And it did not interfere with the code deposited in IPM.
So it was only used once by Docker container build.
 

1 Comment
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください
お知らせ
· 2025年10月21日

Actualización del buscador de la Comunidad de desarrolladores este fin de semana

Hola, comunidad!

Este fin de semana actualizaremos el motor de búsqueda de la Comunidad de Desarrolladores para hacerlo más rápido y preciso (eso esperamos 😉).

Only one in three consumers install firmware updates right away - BetaNews

Durante la actualización, es posible que experimentéis cierta lentitud o breves interrupciones en el rendimiento de la búsqueda. Si notáis algo inusual o tenéis algún problema, avisadnos en los comentarios más abajo: vuestros comentarios nos ayudan a garantizar que todo funcione sin problemas.

Gracias por vuestra paciencia y por ayudarnos a mejorar aún más la Comunidad.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2025年10月21日

¿Cómo procesar ficheros en EnsLib.RecordMap.Service.FTPService files uno a uno?

Hola comunidad,

Tengo un servicio que utiliza EnsLib.RecordMap.Service.FTPService para capturar ficheros en un directorio FTP.

Necesitaría que en lugar de cargarlos todos a la vez, los hiciera de uno en uno.

Tengo una clase que extiende de esta clase porque hace procesos previos, lo guarda todo en la clase RecordMap y luego los procesa todos los registros a la vez.

Cuando invoco al BP, lo hace a través del método set tStatus = ..SendRequest(message, 1)

He puesto el flag SynchronousSend = 1, pero sigue procesando todos a la vez.

¿Hay alguna forma que el proceso no continue con el siguiente fichero hasta que el BP no indique que ha terminado?

Saludos cordiales

4 Comments
ディスカッション (4)2
続けるにはログインするか新規登録を行ってください
質問
· 2025年10月21日

How to process EnsLib.RecordMap.Service.FTPService files one by one?

Hi community,

I have a service that uses EnsLib.RecordMap.Service.FTPService to capture files in an FTP directory.

Instead of uploading them all at once, I would need to do so one at a time.

I have a class that extends this class because it preprocesses, saves everything in the RecordMap class, and then processes all the records at once.

When I invoke the BP, it does so through the method set tStatus = ..SendRequest(message, 1).

I've set the SynchronousSend flag to 1, but it continues processing all the files at once.

Is there a way to prevent the process from continuing to the next file until the BP indicates it's finished?

Best regards.

1 Comment
ディスカッション (1)2
続けるにはログインするか新規登録を行ってください
記事
· 2025年10月21日 2m read

Hook de pré-validation Git pour Health Connect Cloud

Bonjour,

Je voulais partager avec vous une méthode pratique qui m'a été utile lors de mes développements sur Health Connect Cloud avec VS Code et GitBash. Lors de ces développements, si des modifications sont effectuées directement sur le serveur, comme des règles de routage ou des déploiements de composants, elles ne sont pas automatiquement incluses dans le contrôle de code source. Vous devez donc exporter les modifications depuis le serveur vers vos fichiers locaux et les envoyer vers votre dépôt distant. Je suis sûr qu'il existe des méthodes plus simples pour gérer ce problème, que je suis en train de tester, mais pour une solution rapide, j'ai pensé qu'il serait utile d'utiliser une méthode de pré-validation qui déclenche un rappel dans GitBash – voir ci-dessous.

Ce rappel peut être modifié pour mentionner les règles de routage et tout élément à prendre en compte pour l'exportation.

Code hook :

#!/bin/bash
# Git pre-commit hook - gentle reminder for Production.cls
targetFile="src/HCC/Connect/Production.cls"
# Check if Production.cls is already staged
staged=$(git diff --cached --name-only | grep "$targetFile")

# If Production.cls is not staged, show a gentle reminder
if [ -z "$staged" ]; then
    echo ""
    echo "💡 Gentle reminder: Have you made any changes to the Production class on the server?"
    echo ""
    echo "   If YES: Export and add $targetFile to this commit"
    echo "   If NO:  Continue with: git commit --no-verify"
    echo ""
    echo "   (This reminder appears on every commit - use --no-verify to skip)"
    echo ""
    exit 1
fi
# Production.cls is staged, proceed normally
exit 0

J’espère que cela sera utile à tous ceux qui développent avec Health Connect Cloud.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください