Se você está começando com o InterSystems ObjectScript, certamente vai se deparar com o comando XECUTE.
E iniciantes podem se perguntar: onde e por que eu precisaria usar isso?
A documentação oficial traz uma rica coleção de trechos de código, mas nenhum caso prático.
Recentemente, encontrei um caso de uso que gostaria de compartilhar com você.
O cenário:
Quando você constrói um container do IRIS com Docker, na maioria dos casos,
você executa o script de inicialização.
iris session iris < iris.script
Isso significa que você abre uma sessão de terminal e fornece sua entrada linha por linha a partir do script.
E isso funciona bem e é fácil se você estiver chamando métodos, funções ou comandos.
Mas percorrer várias linhas em loop não é possível.
Você pode argumentar que executar um loop FOR em uma linha não é uma obra-prima.
Certo, mas as linhas não são infinitas e o código deve permanecer manutenível.
Um objetivo diferente era não deixar rastros de código após a configuração.
Então, iris.script foi o local para aplicá-lo.
A solução:
XECUTE me permitiu encadear meu código de múltiplas linhas.
Para evitar conflitos com escopo de variáveis, usei apenas %Variables
Aliás: o objetivo era popular algumas LookupTables de demonstração.
Só para conforto, usei nomes de métodos de %PopulateUtils como nomes de tabelas.
;; 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
O resultado atendeu aos requisitos sem deixar rastros permanentes e
não interferiu com o código depositado no IPM.
Portanto, foi usado apenas uma vez durante a construção do container Docker.
no maintenance or update
A new IRIS feature allows selective FIFO processing by assigning a calculated identifier to each message. This ensures messages with the same identifier stay in order without blocking the entire queue. The demo shows how identifiers are created via transformations or BPL, how completion hosts work, how dependencies are handled, and how safety features prevent processing issues. The feature is available in the August 2025 preview and planned for release in 2025.3.