Nova postagem

Rechercher

Resumo
· 25min atrás

Publications des développeurs d'InterSystems, semaine Février 02 - 08, 2026, Résumé

Février 02 - 08, 2026Week at a GlanceInterSystems Developer Community
Artigo
· 58min atrás 3min de leitura

Parámetros Variádicos en ObjectScript: La Solución Elegante que No Sabías que Existía

¿Qué son los parámetros variádicos?

ObjectScript permite definir métodos que aceptan un número variable de argumentos usando la sintaxis `args...`. En lugar de fijar cuántos parámetros recibe un método, dejas que el llamante decida cuántos enviar.

Se pueden invocar de dos formas:

1. Con argumentos individuales: `metodo(val1, val2, val3)`

2. Expandiendo un array: `metodo(args...)`

 
 

Crea tus propios métodos variádicos

Puedes definir un método con un parámetro fijo y un número variable de extras:

ClassMethod MiMetodo(fijo As %String, extras...) As %Status
{
    Write "Parámetro fijo: ", fijo, !
    Write "Número de extras: ", $Get(extras, 0), !

    For i = 1:1:$Get(extras, 0) {
        Write "  Extra ", i, ": ", extras(i), !
    }
    Quit $$$OK
}

Y llamarlo de cualquiera de estas dos formas:

// Forma 1: Argumentos individuales
Do ##class(MiClase).MiMetodo("hola", "valor1", "valor2")

// Forma 2: Expandiendo un array
Set params = 2
Set params(1) = "valor1"
Set params(2) = "valor2"
Do ##class(MiClase).MiMetodo("hola", params...)

// Ambas producen la misma salida:
//   Parámetro fijo: hola
//   Número de extras: 2
//   Extra 1: valor1
//   Extra 2: valor2

 

La convención del array

El array que se pasa con `args...` sigue una convención simple de ObjectScript:

- `args` contiene el número de elementos

- `args(1)`, `args(2)`, etc. contienen los valores

 

Esto significa que estas dos llamadas son equivalentes:

// Forma 1: Argumentos individuales
Set result = statement.%Execute("Juan", 25, "Barcelona")

// Forma 2: Expandiendo un array
Set args = 3
Set args(1) = "Juan"
Set args(2) = 25
Set args(3) = "Barcelona"
Set result = statement.%Execute(args...)

 

La segunda forma es la que nos interesa: podemos construir el array dinámicamente y expandirlo en la llamada.

 

Aplicación práctica: SQL dinámico seguro

Construir consultas SQL dinámicas concatenando strings es tentador... y peligroso:

// ⚠️ NO HAGAS ESTO - Vulnerable a SQL Injection
Set sql = "SELECT * FROM Paciente WHERE Nombre LIKE '%" _ nombre _ "%'"

 

La forma correcta es usar `%SQL.Statement` con parámetros `?`. Pero, ¿qué pasa cuando no sabes cuántos parámetros tendrás hasta el momento de ejecución?

Aquí es donde los variádicos brillan. El método `%Execute()` está definido así:

Method %Execute(%parm...) As %SQL.StatementResult

Acepta parámetros variádicos, así que podemos construir nuestro array dinámicamente y expandirlo:

 

Implementación completa

ClassMethod BuscarPacientes(filtrosJSON As %DynamicObject) As %SQL.StatementResult
{
    Set sql = "SELECT ID, Nombre, Edad, Ciudad FROM Paciente WHERE 1=1"
    // Construir condiciones y argumentos dinámicamente
    Set args = 0  // args será nuestro array variádico
    Set iterator = filtrosJSON.%GetIterator()
    While iterator.%GetNext(.key, .value) {
        If key = "nombre" {
            Set sql = sql _ " AND Nombre LIKE ?"
            Set args($Increment(args)) = "%" _ value _ "%"
        } ElseIf key = "edad" {
            Set sql = sql _ " AND Edad = ?"
            Set args($Increment(args)) = value
        } ElseIf key = "ciudad" {
            Set sql = sql _ " AND Ciudad = ?"
            Set args($Increment(args)) = value
        }
    }

    // Preparar el statement
    Set statement = ##class(%SQL.Statement).%New()
    Set status = statement.%Prepare(sql)
    If $$$ISERR(status) { Quit $$$NULLOREF }

    // ¡La magia! Expandir el array como argumentos variádicos
    Quit statement.%Execute(args...)
}

 

Ejemplo de uso

// Filtros dinámicos desde un JSON
Set filtros = {"nombre": "Juan", "ciudad": "Barcelona"}

Set resultado = ##class(MiPaquete.Utilidades).BuscarPacientes(filtros)

While resultado.%Next() {
    Write resultado.%Get("Nombre"), " - ", resultado.%Get("Ciudad"), !
}

No importa si recibes 1, 5 o 20 filtros: el mismo código los maneja de forma segura.

 

Conclusión

Los parámetros variádicos con `args...` te permiten:

- Construir arrays de argumentos dinámicamente

- Expandirlos al llamar cualquier método que los soporte

- Evitar SQL injection usando parámetros preparados

- Eliminar cadenas interminables de `If`/`ElseIf`

 

Referencias

Variable number of method arguments

Passing a variable number of arguments

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· 2 hr atrás 4min de leitura

Usando Auditoria Python para depuração de Embedded Python

A PEP 578 adicionou hooks de auditoria ao Python. Uma grande variedade de eventos (carregamento de módulos, interações com o sistema operacional e assim por diante) aciona eventos de auditoria aos quais você pode se inscrever.

Veja como fazer isso. Primeiro, crie um hook de Python embutido (embedded python hook):

Class User.Python {

/// do ##class(User.Python).Audit() 
ClassMethod Audit() [ Language = python ] 
{ 
    import sys 
    import time
    
    def logger(event,args):      
        if event=='import':         
        module = args[0]         
        print(f"Carregando {module}")         
        if module == "numpy":             
            print(f"Módulo {module} proibido. Encerrando processo em 3.")             
            time.sleep(3)             
            sys.exit(0)      
        elif event in ('compile','exec'):         
            print(f"{event}: {args}")      
        elif event in ('code.new','open'):         
            # não faz nada para este evento         
            x=1      
        else:         
            print(f"{event}")

sys.addaudithook(logger) }

}

Neste exemplo, nós:

  • Encerramos o processo se o numpy começar a ser carregado
  • Exibimos o evento e os argumentos para eventos compile/exec
  • Ignoramos eventos de code
  • Registramos todos os outros eventos

Tudo isso será gravado no STDOUT padrão.

Para começar a auditar, basta chamar este método para registrar seu hook, ou você pode até mesmo fazer isso automaticamente no início do job:

%ZSTART JOB     
new $namespace     
set $namespace = "%SYS"     
do ##class(User.Python).Audit()     
quit LOGIN     
do JOB     
quit

Aqui está um exemplo de saída:

%SYS>:PY
Loading code
exec: (<code object <module> at 0x000001AB82A0F2F0, file "c:\intersystems\iris\lib\python\lib\code.py", line 1>,)
Loading traceback
exec: (<code object <module> at 0x000001AB82A173A0, file "c:\intersystems\iris\lib\python\lib\traceback.py", line 1>,)
Loading linecache
exec: (<code object <module> at 0x000001AB82A17A80, file "c:\intersystems\iris\lib\python\lib\linecache.py", line 1>,)
Loading tokenize
exec: (<code object <module> at 0x000001AB82A32030, file "c:\intersystems\iris\lib\python\lib\tokenize.py", line 1>,)
Loading token
exec: (<code object <module> at 0x000001AB82A323A0, file "c:\intersystems\iris\lib\python\lib\token.py", line 1>,)
compile: (b'lambda _cls, type, string, start, end, line: _tuple_new(_cls, (type, string, start, end, line))', '<string>')
exec: (<code object <module> at 0x000001AB82A32710, file "<string>", line 1>,)
sys._getframe
object.__setattr__
Loading codeop
exec: (<code object <module> at 0x000001AB82A32EA0, file "c:\intersystems\iris\lib\python\lib\codeop.py", line 1>,)
Loading __future__
exec: (<code object <module> at 0x000001AB82A472F0, file "c:\intersystems\iris\lib\python\lib\__future__.py", line 1>,)
 
Python 3.9.5 (default, May 31 2022, 12:35:47) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
compile: (b'import iris', '<input>')
compile: (b'import iris\n', '<input>')
compile: (b'import iris\n\n', '<input>')
exec: (<code object <module> at 0x000001AB82A60870, file "<input>", line 1>,)
>>> import json
compile: (b'import json', '<input>')
compile: (b'import json\n', '<input>')
compile: (b'import json\n\n', '<input>')
exec: (<code object <module> at 0x000001AB82A60870, file "<input>", line 1>,)
Loading json
exec: (<code object <module> at 0x000001AB82A60DF0, file "c:\intersystems\iris\lib\python\lib\json\__init__.py", line 1>,)
Loading json.decoder
os.listdir
exec: (<code object <module> at 0x000001AB82A67710, file "c:\intersystems\iris\lib\python\lib\json\decoder.py", line 1>,)
Loading json.scanner
exec: (<code object <module> at 0x000001AB82A679D0, file "c:\intersystems\iris\lib\python\lib\json\scanner.py", line 1>,)
Loading _json
Loading json.encoder
exec: (<code object <module> at 0x000001AB82A71500, file "c:\intersystems\iris\lib\python\lib\json\encoder.py", line 1>,)
>>> x=1
compile: (b'x=1', '<input>')
compile: (b'x=1\n', '<input>')
compile: (b'x=1\n\n', '<input>')
exec: (<code object <module> at 0x000001AB82A60870, file "<input>", line 1>,)

Acho que isso pode ser muito útil para depuração.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· 2 hr atrás 7min de leitura

Implantar o IRIS Community Edition na nuvem: Parte 2 Azure

 

Olá! 

No meu último artigo, fiz um passo a passo sobre como você pode tentar implantar o InterSystems IRIS Community Edition, ou IRIS for Health Community Edition, gratuitamente na AWS. Nesta continuação, mostrarei o mesmo para o próximo maior provedor de nuvem, o Microsoft Azure. 

Assim como na AWS, o Azure também oferece uma opção gratuita ao se cadastrar, embora seja um pouco menos generosa - você recebe US$ 200 de crédito gratuito para gastar no primeiro mês. Isso significa que você pode, mais uma vez, tentar implantar o IRIS Community Edition gratuitamente no Azure, embora eu recomende cautela para evitar contas caras. 

Assim como no artigo anterior, este guia percorre o processo de implantação do Community Edition na nuvem, no entanto, o processo pode ser seguido para uma versão totalmente licenciada,  já que existe uma oferta Bring Your Own Licence (Traga Sua Própria Licença) para o IRIS e IRIS for Health. Você pode usar uma chave de licença existente para isso ou entrar em contato com o departamento de vendas para obter uma nova licença. 

Passo a passo

Antes de começar, você precisará entrar ou criar uma conta no Azure e inscrever-se em uma assinatura do Azure (para habilitar o faturamento). Em seguida, vá para a listagem do Azure Marketplace para o IRIS Community (ou IRIS for Health Community) e clique em Get it now (Obter agora)

 

Será solicitado que você faça login e também podem ser solicitados detalhes adicionais, como País, número de celular e local de trabalho. Preencha esses dados e clique em Get it now na parte inferior deste formulário.

 

Você será redirecionado para o Portal do Azure. Clique em Start with a pre-set configuration (Iniciar com uma configuração predefinida) para começar a criar uma implantação. Se preferir selecionar todas as configurações você mesmo, pode clicar em Create (Criar) para implantar sem nenhuma configuração padrão.

 

Depois de escolher começar com uma configuração predefinida, você será redirecionado para uma página sugerindo padrões para seu caso de uso. Escolha o caso de uso necessário e clique em Continue to Create a VM (Continuar para criar uma VM); essa escolha preencherá automaticamente algumas das configurações.

 

Escolhendo as configurações da VM

Agora você entrará na página Create a virtual machine (Criar uma máquina virtual). É aqui que você define todas as configurações para a implantação da sua máquina virtual.

Existem abas para escolher configurações em "Basics" (Básico), "Disks" (Discos/armazenamento), "Networking" (Rede), "Management" (Gerenciamento), "Monitoring" (Monitoramento), "Advanced Settings" (Avançado) e "Tags". Este guia discutirá as configurações em "Basics". Para as outras configurações, você pode deixá-las como padrão se tiver iniciado com uma configuração predefinida ou selecioná-las no seu próprio tempo. Muitas delas podem ser alteradas após a implantação (por exemplo, limitando os endereços IP de conexão).

Project Details (Detalhes do Projeto) 

Aqui você escolhe qual Assinatura do Azure e Grupo de recursos estão sendo usados para a implantação. Um grupo de recursos permite agrupar implantações relacionadas (por exemplo, implantações para diferentes serviços de um único projeto) para fins de organização e faturamento. Você precisará criar um grupo de recursos se ainda não tiver feito isso. Clique em Create new (Criar novo) e dê um nome adequado.

 

Instance Details (Detalhes da Instância) 

Os detalhes da instância controlam o tamanho, a localização e as configurações de segurança da instância. Como você clicou através do portal do Azure, a imagem deve ter sido preenchida previamente. Caso contrário, você pode selecioná-la através do menu suspenso do marketplace.

Existem vários itens essenciais para preencher nesta seção.

- Virtual Machine Name (Nome da Máquina Virtual) - De preferência, use algo fácil de reconhecer para facilitar o gerenciamento.

- Region (Região) - Quanto mais próxima a região estiver de seus usuários, menor será a latência ao acessar a máquina. No entanto, a escolha da região também afetará a disponibilidade das máquinas.

- Size (Tamanho) - As especificações de desempenho da máquina, incluindo memória e número/tipo de processadores disponíveis (CPUs, GPUs). A escolha do tamanho dependerá do orçamento, desempenho necessário e disponibilidade na região selecionada. Como o próprio InterSystems IRIS Community Edition limita o armazenamento no banco de dados e o poder de computação usado ( veja os limites aqui), você provavelmente desejará uma das máquinas menores.

 

Authentication (Autenticação)

Aqui você pode escolher como se autenticar ao conectar-se à máquina. Sugere-se que você use um par de chaves pública/privada SSH para isso, mas também pode usar autenticação por senha. Você também pode selecionar um nome de usuário padrão para acessar a máquina.

Você pode deixar todas essas configurações como padrão. Se escolher criar uma nova chave SSH, ela será gerada e baixada automaticamente quando você implantar a máquina.

 

Review + Create (Revisar + Criar)

Depois de definir o "Basics", verifique as outras abas de configurações e veja se há algo que você gostaria de alterar dos padrões. Se não, selecione a aba Review + Create.

Esta aba levará um tempo para carregar, pois valida as configurações selecionadas. Após a aprovação da validação, você deve concordar com os Termos pela última vez e também verá um resumo das configurações selecionadas.

Quando estiver pronto, clique em Create (Criar) para criar sua máquina virtual.

 Se você selecionou autenticar com uma nova chave SSH conforme sugerido, aparecerá um pop-up para gerar e baixar isso. Clique em Download private key and create resource (Baixar chave privada e criar recurso).

 

Conectar

Levará alguns minutos para sua implantação ser iniciada, mas você deve acabar em uma tela dizendo "Your deployment is complete" (Sua implantação foi concluída).

 

Existem várias configurações que o Azure recomenda definir, o que você pode desejar fazer em breve. No entanto, para demonstrar inicialmente a conexão com a máquina, clique em Go to resource (Ir para o recurso). Isso abrirá o painel de gerenciamento da sua máquina virtual implantada.

 

No lado esquerdo, há um painel para selecionar diferentes grupos de configurações para visualizar e editar as configurações da máquina. Por enquanto, selecione Connect (Conectar) no painel na parte superior do dashboard.

Via SSH

No Azure, o Secure Shell (SSH) é o método recomendado ao conectar-se à instância do InterSystems IRIS Community Edition. Você pode se conectar via SSH a partir do terminal da sua máquina local ou powershell.

 

No painel de conexão, você verá claramente o endereço IP da sua instância e um comando SSH para usar na conexão com a instância. O comando de conexão SSH requer três coisas: o caminho local para sua chave privada que foi baixada quando você iniciou a instância, o nome de usuário na máquina (o padrão era azureuser a menos que você o tenha alterado na etapa de Autenticação acima) e o endereço IP da sua instância.

ssh -i /caminho/para/chave.pem username@xx.xx.xxx.xxx

ssh -i /home/keys/Minha-Instancia-Iris_key.pem azureuser@12.34.567.899

Na primeira vez que se conectar, será perguntado se você tem certeza de que deseja continuar conectando. Digite "yes" e você se conectará à instância.

 

Na primeira vez que fizer login, você precisará redefinir a senha padrão. Para fazer isso, execute:

iris password

Um aviso informará que as credenciais padrão são:

- Usuário: _SYSTEM

- Senha: SYS

E que essa senha expirou e precisa ser alterada. Se, como eu, você preferir o outro nome de usuário padrão, SuperUser, ele também deve funcionar com a mesma senha.

Depois disso, você pode iniciar uma sessão de terminal IRIS com:

iris session iris

Se você quiser copiar arquivos para a instância IRIS, pode usar uma conexão SSH usando scp, sftp ou um cliente sftp como o Filezilla. Você também pode copiar arquivos através do serviço Bastion do Azure.

Via Portal de Gerenciamento

Uma vez implantado, o Portal de Gerenciamento estará disponível no endereço IP da sua instância com :52773/csp/sys/UtilHome.csp anexado ao final. As credenciais padrão são:

- Usuário: _SYSTEM - Senha: SYS

Elas precisarão ser alteradas no primeiro login, a menos que você já as tenha alterado pela conexão SSH.

Encerrar Implantação

Lembre-se de parar a implantação assim que terminar de usá-la! Para fazer isso, navegue de volta para o painel da Máquina Virtual da sua instância e clique em Delete (Excluir). Você será questionado sobre quais componentes deseja excluir. Se você terminou completamente de usar esta implantação, selecione todos os componentes e clique em Delete para encerrar todas as implantações.

 

Discussão (0)1
Entre ou crie uma conta para continuar
InterSystems Oficial
· 2 hr atrás

Une troisième version préliminaire pour développeurs d'InterSystems IRIS, d'InterSystems IRIS for Health et de HealthShare Health Connect 2026.1 est disponible

Les troisièmes versions préliminaires pour développeurs de la plateforme de données InterSystems IRIS®, d'InterSystems IRIS® for Health et de HealthShare® Health Connect 2026.1 sont disponibles sur le site des versions préliminaires pour développeurs du WRC. Les conteneurs sont disponibles sur notre registre de conteneurs et portent l'étiquette « latest-preview ».

Ces versions préliminaires pour développeurs marquent la fin de la prise en charge des Mac Intel à partir de la version 2026.1.0 et le retour de la prise en charge de Windows Server 2019 dans la version 2026.1.0.

La documentation initiale est accessible via les liens ci-dessous :

Ces liens sont provisoires et seront mis à jour à mesure que nous approcherons de la version finale et que nous aurons plus d'informations à partager. Voici quelques ajouts importants à la documentation de la version 2026.1 :

Comme il s'agit d'une version préliminaire pour développeurs, certains contenus sont encore en cours d'élaboration. La documentation complète sera fournie au fur et à mesure de la finalisation des fonctionnalités. Nous vous remercions de votre patience et de vos commentaires pendant cette phase !

Disponibilité et informations sur les packages

Cette version est fournie avec des packages d'installation classiques pour toutes les plateformes prises en charge. Pour obtenir la liste complète, consultez le document « Plateformes prises en charge ».

Les packages d'installation et les clés d'évaluation sont disponibles sur le site de téléchargement des versions préliminaires du WRC ou sur le site web des services d'évaluation (cochez la case « Afficher les logiciels en version préliminaire »).

Discussão (0)0
Entre ou crie uma conta para continuar