#InterSystems IRIS

2 Seguidores · 940 Postagens

InterSystems IRIS é uma plataforma de dados completa
A InterSystems IRIS oferece tudo que você precisa para capturar, compartilhar, entender e agir com base no ativo mais valioso de sua organização - seus dados.
Como uma plataforma completa, a InterSystems IRIS elimina a necessidade de integração de múltiplas tecnologias de desenvolvimento. As aplicações requerem menos código, menos recursos do sistema e menos manutenção.

Artigo Evandro Wendt · jan 12 2m read

Eu estava enfrentando o mesmo problema que o Jerry enfrentou ao conectar o IRIS ao SQL Server. Minha conexão ODBC está configurada para autenticar via autenticação do Windows.

Configure IRIS ODBC connection with Windows authentication using a
 

Como eu resolvi isso?

Causa raiz

0
0 23
Artigo Heloisa Paiva · jan 12 5m read

Motivação

Eu não conhecia ObjectScript até começar meu novo emprego. Objectscript não é exatamente uma linguagem de programação jovem. Comparada a C++, Java e Python, a comunidade não é tão ativa, mas estamos empenhados em tornar este lugar mais vibrante, não estamos?

Notei que alguns dos meus colegas acham complicado entender as relações de classes nesses projetos enormes. Não existe nenhuma ferramenta moderna de diagrama de classes fácil de usar para ObjectScript.

Trabalhos Relacionados

Eu testei trabalhos relevantes:

0
0 22
Artigo Evandro Wendt · jan 11 3m read

Olá, pessoal. Quanto tempo! Mais uma vez, gostaria de compartilhar o que tenho estudado recentemente, criar tabelas estrangeiras usando SQL via JDBC.

Como estou aprendendo sobre o IRIS BI ao mesmo tempo, comecei utilizando este ambiente Docker de exemplo do Sample-BI.

https://github.com/intersystems/Samples-BI

Após iniciar o ambiente, faça login no portal de gerenciamento http://localhost:52773/csp/sys/UtilHome.csp  como Superuser.

Troque para o namespace IRISAPP.

0
0 23
Artigo Evandro Wendt · jan 10 1m read

Uma tentativa anterior contou com o auxílio de um método externo em Python.
Este aqui é totalmente CSP clássico, escrito com ISOS, JavaScript e HTML.

Além do gráfico, você também obtém números concretos, coletados recentemente da sua instância local ou de instâncias remotas que também tenham o pacote instalado.

Resultado final

Etapas do processamento

0
0 19
Artigo Evandro Wendt · jan 10 2m read

Eu gostaria de compartilhar com você um pequeno truque para personalizar como as mensagens são exibidas no Message Viewer. Em particular, como você pode exibir as mensagens em JSON (em vez da representação padrão em XML).

Mensagens são objetos usados para comunicar componentes de produções de interoperabilidade. No meu exemplo, eu defini uma mensagem que mais tarde eu serializo como JSON para enviar a uma API externa. Essa mensagem é definida como uma mensagem regular e também como um %JSON.Adaptor, para que eu possa exportar/importar diretamente para ou a partir de JSON.

0
0 21
Artigo Evandro Wendt · jan 10 5m read

Olá a todos,

Sou eu de novo 😁. No artigo anterior, Writing a REST api service for exporting the generated FHIR bundle in JSON, nós geramos um recurso DocumentReference, com o conteúdo codificados em Base64.

Question!! Is it possible to write a REST service for decoding it? Because I am very curious what is the message data talking about🤔🤔🤔

Duvida!! É possível escrever um serviço REST para decodificar isso? Porque estou muito curioso para saber o conteúdo da mensagem 🤔🤔🤔

OK, Vamos começar!

0
0 27
Artigo Heloisa Paiva · jan 8 22m read

Sumário

  1. Propósito do artigo
  2. O que são containers e por que eles fazem sentido com o IRIS
    1. Containers e Imagens em poucas palavras
    2. Por que containers são úteis para desenvolvedores
    3. Por que o IRIS funciona bem com o Docker
  3. Pré-requisitos
  4. Instalando a imagem do InterSystems IRIS
    1. Usando o Docker Hub
    2. Puxando a imagem
  5. Executando a imagem do InterSystems IRIS
    1. ​​​​​​​Iniciando um container do IRIS
    2. Verificando o status do container
    3. Executando código no terminal do container
    4. Acessando o IRIS Management Portal
    5. Conectando o container ao VS Code
    6. Parando ou removendo o container
    7. Definindo uma senha específica com uma montagem de vínculo (bind mount) 
    8. Usando volumes %SYS duráveis                       
      1. O que é armazenado com o %SYS durável            
      2. Como habilitar o %SYS durável
  6. Usando Docker Compose
     6.1 Exemplo de Docker Compose
     6.2 Executando Docker Compose
  7. Usando um Dockerfile para executar código-fonte personalizado
    1. Exemplo de Dockerfile
    2. Exemplo de Docker Compose
    3. Entendendo camadas, tagging de imagem e tempo de build vs. tempo de execução
    4. Código-fonte e script de inicialização (init script)
    5. Construindo a imagem com Dockerfile
    6. Executando instruções no terminal IRIS containerizado
  8. Conclusão e próximos passos
0
0 39
Pergunta Evandro Wendt · jan 2

Existe uma Master Table dentro do IRIS que estou preenchendo a partir do Epic, mas quero compartilhá-la com nossa equipe de Enterprise Application Development (Web). Como teste, consegui usar _SYSTEM a partir do Postman para executar o seguinte.

POST /api/atelier/v1/xxxx/action/query HTTP/1.1
Host: xxxxxxxx
Content-Type: application/json
Authorization: ••••••
Cookie: CSPSESSIONID-SP-443-UP-api-atelier-=00f0000000000AKyLjBfUvU$MpFD8UT8y$EoNKNw1ixZeXN4_Q; CSPWSERVERID=hzZAT5rb
Content-Length: 86

{"query": "SELECT * FROM osuwmc_Epic_Clarity.DepartmentMaster WHERE ID = '300000000'"}
1
0 33
Artigo Evandro Wendt · jan 6 1m read

Muitas vezes, ao trabalhar com dados FHIR, por exemplo com o IRIS For Health, você vai achar útil criar uma operação FHIR personalizada. O padrão FHIR já vem com um conjunto de operações definidas (como $everything), mas uma operação personalizada é útil quando você precisa criar funcionalidades extras que vão além do conjunto de operações padrão do FHIR. A documentação guia você passo a passo (embora este comentário possa ser útil para quem está começando). Uma coisa que eu destacaria, puramente por propósitos estéticos, é como nomear sintaticamente sua função de forma que você possa chamá-la

0
0 21
Artigo Evandro Wendt · jan 6 2m read

A utilidade retorna os valores desejados do texto e exibe múltiplos valores, se existirem, com base na string de início e na string de término.

Class Test.Utility.FunctionSet Extends %RegisteredObject
{

/// W !,##class(Test.Utility.FunctionSet).ExtractValues("Some random text VALUE=12345; some other VALUE=2345; more text VALUE=345678;","VALUE=",";")
 

0
0 31
Artigo Evandro Wendt · jan 6 2m read

Rubrica de FAQ da InterSystems

Se você tentar eliminar uma global que está mapeada no nível de subscrito a partir do nó raiz, você receberá um erro e ela não será excluída. Isso ocorre porque o comando kill para globais mapeadas no nível de subscrito não pode ser usado atravessando mapeamentos.

// Suppose subscript-mapped globals exist in different databases, as shown below:^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill^TEST
<SLMSPAN> <- This error is output.
0
0 29
Artigo Evandro Wendt · jan 6 3m read

Se você quiser gerar um JWT a partir de um certificado/chave x509, qualquer operação (inclusive leitura) em %SYS.X509Credentials exige permissão U no recurso %Admin_Secure. O %Admin_Secure é necessário porque %SYS.X509Credentials é persistente e foi implementado dessa forma para impedir que todos os usuários tenham acesso às chaves privadas.

Se o recurso %Admin_Secure não estiver disponível em tempo de execução, você pode usar a seguinte alternativa.

0
0 22
Artigo Evandro Wendt · jan 5 1m read

Olá a todos,

Como parte do desenvolvimento de uma API para saber a qual instância do IRIS está conectada, encontrei alguns métodos para obter informações sobre o servidor que podem ser úteis.

Obter o nome do servidor: $SYSTEM.INetInfo.LocalHostName()

Obter o IP do servidor: $SYSTEM.INetInfo.HostNameToAddr($SYSTEM.INetInfo.LocalHostName())

Obter o nome da instância: $PIECE($SYSTEM,":",2)

Assim, criei o seguinte código como uma classe BS:

0
0 25
Artigo Evandro Wendt · jan 4 2m read

Rubrica de FAQ do InterSystems

O utilitário ^%GCMP pode ser usado para comparar o conteúdo de dois globals.

Por exemplo, para comparar ^test e ^test nos namespaces USER e SAMPLES, ficaria assim:

No exemplo abaixo, 700 globais idênticas são criadas nos dois namespaces, e o conteúdo de uma delas é alterado para torná-lo o alvo de detecção.
 

0
0 27
Artigo Evandro Wendt · jan 4 1m read

gj :: configExplorer é uma nova extensão do VS Code que se integra ao Server Manager e utiliza o Structurizr para gerar diagramas de configuração dos seus servidores.

Aqui está um curto vídeo introdutório.

Ao usar a API Nativa do Intersystems IRIS para Node.js, não é necessário instalar nenhum código de suporte nos servidores. Essa escolha de tecnologia também permite que ele participe do atual concurso da Developer Community.

O lançamento inicial foca em dois aspectos da configuração do servidor:

  • Namespaces e bancos de dados
  • Conectividade ECP
0
0 30
Artigo Evandro Wendt · jan 4 1m read

Olhando para o meu banco de dados, vejo que tenho um ^rINDEXSQL muito grande! Por que isso? 😬

Na página de SQL do Management Portal, em "SQL Statements", vejo um botão 'Clean stale' – o que ele faz? 🤔

Na lista de Statements, alguns têm um valor em 'Location' e outros não. Como isso acontece? 🤨

0
0 24
Artigo Evandro Wendt · jan 4 2m read

Olá a todos,

Primeiro quero reconhecer @Theo Stolker e @Rupert Young, porque eles me ajudaram com a solução.

Quando vocês usam EnsLib.SQL.Snapshot como uma propriedade na mensagem de resposta para retornar dados do Snapshot (por exemplo, de uma Business Operation para um Business Process), os dados do Snapshot não são limpos com a tarefa/serviço de depuração de mensagens.

Class ResponseMessage Extends Ens.Response

{

    Property SnapshotProp As EnsLib.SQL.Snapshot;

}

0
0 22
Artigo Evandro Wendt · jan 4 1m read

Já faz algum tempo que criei um pequeno exemplo para implantar rapidamente, usando Docker, instâncias do InterSystems IRIS conectadas via ECP. O tempo passou e, como tudo, precisava de uma revisão e atualização...

0
0 30
Artigo Evandro Wendt · jan 4 1m read

Tenho o prazer de anunciar a publicação do gj :: dataLoader, uma nova extensão do VS Code que simplifica a tarefa de carregar dados de arquivos CSV locais em tabelas SQL dos seus servidores InterSystems IRIS.

Aqui está um vídeo introdutório:

gj :: dataLoader já está disponível no Marketplace para instalação direta no VS Code. É a minha proposta para o concurso “Bringing Ideas to Reality” 2025 e coloca em prática esta ideia: https://ideas.intersystems.com/ideas/DPI-I-667

Seus comentários serão bem-vindos.

0
0 22
Artigo Evandro Wendt · jan 4 3m read

🚀 Um exemplo prático integrando REST, CSV, bancos de dados e serviços SOAP

No dia a dia de qualquer organização, a informação flui entre aplicações, serviços e sistemas muito diferentes entre si. Integrá-los de forma eficiente pode ser um desafio… a menos que você use o InterSystems IRIS.

Neste novo vídeo, eu mostro como construir um fluxo completo de integração combinando múltiplas tecnologias — APIs REST, arquivos CSV, bancos de dados e serviços SOAP — tudo dentro do ambiente visual oferecido pelo motor de interoperabilidade do IRIS.

👉 Você pode assistir ao vídeo aqui:

<iframe width="560" height="315" src="https://www.youtube.com/embed/82xA51nThqQ?si=CzRfwyLSwcKvOGGH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
0
0 22
Artigo Evandro Wendt · jan 2 3m read

Embeddedpy-bridge: Um kit de ferramentas para Embedded Python

Visão geral

Embedded Python é um divisor de águas para o InterSystems IRIS, oferecendo acesso ao vasto ecossistema Python diretamente dentro do banco de dados. No entanto, fazer a ponte entre ObjectScript e Python às vezes pode parecer como traduzir entre dois mundos diferentes.

Para tornar essa transição perfeitamente utilizável, embeddedpy-bridge.

0
0 25
Artigo Evandro Wendt · jan 2 3m read

Ao trabalhar com a Interoperabilidade da InterSystems (Iris / Health Connect / Ensemble), os dados de configuração costumam estar distribuídos entre vários itens de produção: serviços, processos, operações, adaptadores e suas configurações.

Uma necessidade operacional ou de segurança comum é responder a perguntas como:

  • Quais interfaces fazem referência a caminhos do sistema de arquivos?
  • Onde estão configurados diretórios, compartilhamentos de rede ou caminhos absolutos?
  • É possível auditar ou documentar rapidamente essas informações em todas as minhas produções?
0
0 26
Artigo Evandro Wendt · jan 2 3m read

Você provavelmente conhece essa situação:

Algum tempo atrás, você encontrou uma função $ZU muito especial para um tipo de problema bem específico. Uma espécie de fórmula mística. Ela se tornou popular e foi usada por muitos desenvolvedores em todo o seu código e em todas as suas instalações.

Depois de várias versões e atualizações, você é informado pela ISC de que seu $ZU místico está obsoleto (deprecated) e não é mais suportado. Você é aconselhado a substituí-lo por um novo $something().

0
0 28
Artigo Evandro Wendt · Dez. 31, 2025 1m read

SET atribui um valor à variável em tempo de execução.

#DIM declara a variável e o seu tipo de dado em tempo de compilação.

SET #DIM
Torna a variável dinâmica. Melhora a legibilidade.
Sem tipagem. Habilita IDE auto-completion.
Tempo de execução Util para referência a objetos.
#DIM name As%StringSet name = "Micheal Scott"#DIM age As%NumericSet age = 36#DIM employer As App.Employer               ; compile timeSet employer = ##class(App.Employer).%New() ; runtime 

 

SETou #DIM? Seu design, suas regras.

0
0 32
Artigo Evandro Wendt · Dez. 31, 2025 2m read

Há um padrão com o qual já me deparei várias vezes em que preciso usar um arquivo ou pasta temporária e que ela seja limpa em algum momento mais tarde.

O natural aqui é seguir os padrões de "Robust Error Handling and Cleanup in ObjectScript" , usando um try/catch/pseudo-finally ou um objeto registrado para gerenciar a limpeza no destrutor. %Stream.File* também tem a propriedade RemoveOnClose, que vocês podem ativar… mas usem com cuidado, pois podem acabar excluindo acidentalmente um arquivo importante. Além disso, esse indicador é redefinido ao chamar %Save(), então será necessário configurá-lo novamente como 1 depois disso.

Mas existe um caso complicado: imaginem que vocês precisam que o arquivo temporário sobreviva em um nível superior da pilha. Por exemplo:

0
0 18
Artigo Evandro Wendt · Dez. 31, 2025 1m read

Foi encorajador ver mais pessoas criando extensões do VS Code para o concurso recente. No entanto, notei que, das três extensões que exigem credenciais para realizar suas conexões, apenas a de @John Murray, gj :: dataLoader, aproveita a extensão InterSystems Server Manager
, amplamente estabelecida e oficialmente suportada, para obter as definições de conexão e gerenciar as credenciais de forma segura.

0
0 29
Artigo Evandro Wendt · Dez. 30, 2025 4m read

Se você olhar o arquivo values.yaml do Helm chart do IKO, você encontrará:

useIrisFsGroup:false

Vamos detalhar o que isso é e em quais situações você pode querer configurá-lo como true.

FsGroup se refere ao grupo do sistema de arquivos.

Por padrão, os volumes do Kubernetes pertencem ao usuário root, mas precisamos que o IRIS seja o dono de seus arquivos (o IRIS em containers é instalado sob o usuário irisowner). Para contornar isso, utilizamos um de dois métodos:

1) initContainers

0
0 21