#Caché

0 Seguidores · 204 Postagens

  

InterSystems Caché é um sistema de gerenciamento de banco de dados (DBMS) multimodelo e servidor de aplicações. Veja mais detalhes aqui.

Documentação.

Pergunta Daniela R · Mar. 7, 2024

Preciso fazer  o seguinte exercício:

"Crie uma regra/método que solicite 10 números ao usuário e no final apresente-os em tela, ordenados do menor para o maior."

Porém já li e reli a documentação, e não consigo entender como criar regra/método no Caché.

Eu crio conforme a doc, mas não executa nada quando chamo a rotina no terminal.

Alguém pode me ajudar por favor?

Tentei function, procedure e subroutine também.

7
0 86
Pergunta Davidson Espindola · Fev. 1, 2024

Good evening, Masters

I communicate with an API, using the %Net.HttpRequest class, I can include, query and change information, but I cannot delete it

%Net.HttpRequest does not have DELETE (as it has Get,Put,Post)
<METHOD DOES NOT EXIST> *Delete,%Net.HttpRequest

What is another way to do this exclusion?

Grateful
davidson

2
0 107
Artigo Larissa Prussak · jan 3, 2024 1m read

Rubrica de perguntas frequentes da InterSystems

Se vários produtos InterSystems estiverem instalados no mesmo sistema, a versão mais recente do driver ODBC da InterSystems entre os produtos instalados permanecerá registrada no gerenciador de drivers.

Você pode mudar para qualquer driver alterando a entrada de registro abaixo.

 Observe que a execução de RegFiles.bat não altera o driver ODBC.

A entrada do registro é a seguinte.

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\InterSystems ODBC35 key Driver
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\InterSystems ODBC35 key Setup
0
1 113
Artigo Danusa Calixto · Dez. 22, 2023 5m read

[Contexto]

A família InterSystems IRIS tem um ótimo utilitário ^SystemPerformance (conhecido como ^pButtons no Caché e no Ensemble) que gera as informações de desempenho do banco de dados em um arquivo HTML legível. Ao executar ^SystemPerformance no IRIS para Windows, um arquivo HTML é criado onde nosso próprio log de desempenho mgstat e o log de desempenho do Windows são incluídos.

^SystemPeformance gera um ótimo relatório, mas você precisa extrair seções de log manualmente de um arquivo HTML e colá-las em um editor de planilha como o Excel para criar um gráfico visual de desempenho. Vários desenvolvedores já compartilham dicas e utilitários úteis para fazer isso aqui (Este é um ótimo artigo no Developer Community, de  @Murray Oldfield )

Agora, apresento o novo utilitário ^mypButtons!

[O que há de novo em relação a outras ferramentas]

Baixe mypButtons.mac no OpenExchange.

  • ^mypButtons combina o mgstat e o log de desempenho do Windows em uma linha. Por exemplo, você pode criar um gráfico incluindo "PhyWrs" (mgstat) e "Disk Writes/sec" (Win perfmon) no mesmo período.
  • ^mypButtons lê vários arquivos HTML ao mesmo tempo e gera um único arquivo CSV combinado.
  • ^mypButtons gera um único arquivo CSV no seu laptop, então é muito mais fácil criar seu gráfico como quiser.
  • ^mypButtons gera um CSV e inclui colunas que recomendo muito conferir como o primeiro passo para ver o desempenho do produto da InterSystems. Assim, todo mundo pode aproveitar um gráfico de desempenho com esse utilitário facilmente!

Observação! Se você quiser reproduzir mypButtons.csv, carregue os arquivos HTML SystemPerformance com o perfil "a cada 1 segundo".

 

[Como executar]

do readone^mypButtons("C:\temp\dir\myserver_IRIS_20230522_130000_8hours.html","^||naka")

Ele lê um arquivo HTML SystemPerformance e armazena as informações em um determinado global. Nessa amostra, ele lê myserver_IRIS_20230522_130000_8hours.html e armazena-o em ^||naka.

do readdir^mypButtons("C:\temp\dir","^||naka")

Ele lê todos os arquivos HTML SystemPerformance HTML em uma pasta específica e armazena as informações em um determinado global. Nessa amostra, ele lê todos os arquivos HTML em C:\temp\dir e armazena-os em ^||naka.

do writecsv^mypButtons("C:\temp\csv","^||naka")

Ele gera os três arquivos csv a seguir em uma pasta específica a partir de um determinado global.

  • mgstat.csv
  • perfmon.csv
  • mypButtons.csv

Aqui, mypButtons.csv inclui as seguintes colunas por padrão, que recomendo muito verificar primeiro para ver o desempenho:

  • mgstat: Glorefs, PhyRds, Gloupds, PhyWrs, WDQsz, WDphase
  • perfmon: Available MBytes, Disk Reads/sec, Disk Writes/sec, % Processor Time

Esse utilitário funciona para o InterSystems IRIS, InterSystems IRIS for Health, Caché e Ensemble para Windows.

 

[Etapas de exemplo para criar o gráfico de desempenho do seu servidor IRIS com ^mypButtons]

(1) Primeiro, execute ^SystemPerformance para registrar nossa própria ferramenta de desempenho mgstat e o monitor de desempenho do Windows perfmon. Por padrão, o InterSystems IRIS possui alguns perfis, então você pode aproveitá-los logo. Tente isto no terminal IRIS.

%SYSdo^SystemPerformance
Current log directory: c:\intersystems\iris\mgr\
Windows Perfmon data will be left in raw format.
Available profiles:
  112hours - 12-hour run sampling every 10 seconds
  224hours - 24-hour run sampling every 10 seconds
  330mins - 30-minute run sampling every 1 second
  44hours - 4-hour run sampling every 5 seconds
  58hours - 8-hour run sampling every 10 seconds
  6 test - 5-minute TEST run sampling every 30 seconds
select profile number to run: 3

Observação! Se você quiser reproduzir mypButtons.csv, use o perfil "a cada 1 segundo". Por padrão, você verá um perfil de "30 mins" que faz a amostragem a cada 1 segundo. Se quiser criar outros perfis, veja nossa documentação para mais detalhes.

(2) Depois da amostragem, um HTML será gerado em irisdir\mgr, cujo nome é parecido com JP7320NAKAHASH_IRIS_20231115_100708_30mins.html. Abra um HTML gerado, e você verá muitos dados de desempenho separados por vírgulas nas seções mgstat e na seção perfmon

 

(3) Carregue-o com ^mypButtons conforme abaixo.

USER> do readone^mypButtons("C:\InterSystems\IRIS\mgr\JP7320NAKAHASH_IRIS_20231115_100708_30mins.html","^||naka")

Isso carregará o HTML no primeiro parâmetro e salvará os dados de desempenho no global no segundo parâmetro.

(4) Gere o CSV com ^mypButtons conforme abaixo.

USER> do writecsv^mypButtons("C:\temp","^||naka")

Isso gerará três arquivos CSV na pasta no primeiro parâmetro do global no segundo parâmetro. Abra mypButtons.csv no excel, e você pode ver mgstat e perfmon na mesma linha a cada segundo. Veja esta captura de tela - as colunas destacadas em amarelo são mgstat, e as em azul são perfmon.

 

(5) Vamos criar um gráfico simples com esse CSV. É muito fácil. Escolha a coluna B Time  e a coluna C Glorefs, selecione o menu Insert (Inserir), gráficos de linhas 2D, conforme abaixo. 

 

Esse gráfico mostrará informações de "Números de referência do global por segundo". Infelizmente, houve muito poucas atividades em minha instância IRIS, então meu gráfico de amostra não animará você, mas acredito que este gráfico do servidor de produção traz muitas informações úteis!

 

(6) mypButtons.csv inclui colunas selecionadas que acredito que você deve verificar primeiro. A série de artigos de Murray fala sobre a importância dessas colunas para ver o desempenho.

 

[Editar ^mypButtons para as colunas relatadas]

Se você quiser mudar as colunas relatadas no mypButtons.csv, modifique o rótulo writecsv manualmente. Ele relata as colunas definidas nessa área. 

 

Espero que meu artigo e utilitário incentivem você a conferir o desempenho do InterSystems IRIS. Feliz SystemPeformance 😆

0
0 77
Artigo Danusa Calixto · Dez. 6, 2023 2m read

Com certeza, você já se deparou com esta situação:

  • Há um bug em um Sistema que você não consegue reproduzir localmente
  • Você precisa executar algumas linhas na instância afetada
  • Você ganha acesso completo ao Portal de Gerenciamento de Sistemas
  • Mas não há terminal, console nem acesso com o Studio, Atelier ou VSCode
  • Como executar algumas linhas para teste ???
  • Acesse o SMP / Explorer / guia SQL= Execute Query
    •  
    •  
  • Agora crie um procedimento armazenado com o código necessário
    • Não há limite de complexidade. Eu só crio um simples com resultado previsível.
    • CREATE PROCEDURE RUN.ISOS()
      

LANGUAGE OBJECTSCRIPT { For i=1:1:20 write i," > "   Write "
THANKS !" }

  • Clique em EXECUTE para ver um novo procedimento *    
    •  
  • Em seguida, examine esse novo procedimento e execute-o *  
    •  
  • Ele é ativado com outra execução *  
    •  
  • e este é o resultado *
    •  
  • como você é um especialista bem instruído, limpa o ambiente depois de terminar  
    • DROP PROCEDURE RUN.ISOS
    •  

Espero que isso ajude você no futuro.
Documentação

0
0 76
Artigo Danusa Calixto · Dez. 4, 2023 4m read

Olá, comunidade,

Neste artigo, listei 5 funções SQL úteis com explicações e exemplos de consultas👇🏻
Estas são as 5 funções:

  • COALESCE
  • RANK
  • DENSE_RANK
  • ROW_NUMBER
  • Função para obter totais correntes

Vamos começar com a função COALESCE

#COALESCE

A função COALESCE avalia uma lista de expressões na ordem da esquerda para a direita e retorna o valor da primeira expressão que não é NULL. Se todas as expressões forem avaliadas como NULL, é retornado NULL.

A declaração a seguir retorna o primeiro valor que não é nulo, ou seja, "intersystems"

SELECTCOALESCE(NULL, NULL, NULL,'intersystems', NULL,'sql')

Vamos criar a tabela abaixo como outro exemplo

CREATETABLE EXPENSES(
    TDATE     DATENOTNULL,
    EXPENSE1   NUMBERNULL,
    EXPENSE2   NUMBERNULL,
    EXPENSE3   NUMBERNULL,
    TTYPE  CHAR(30) NULL)

Agora vamos inserir alguns dados falsos para testar nossa função

 INSERTINTO sqluser.expenses (tdate, expense1,expense2,expense3,ttype )  
  SELECT {d'2023-01-01'}, 500,400,NULL,'Present'
  UNION ALL
  SELECT {d'2023-01-01'}, NULL,50,30,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-01'}, NULL,NULL,30,'Clothes' 
  UNION ALL
  SELECT {d'2023-01-02'}, NULL,50,30 ,'Present'
  UNION ALL
  SELECT {d'2023-01-02'}, 300,500,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-02'}, NULL,400,NULL,'Clothes'   
  UNION ALL
  SELECT {d'2023-01-03'}, NULL,NULL,350 ,'Present'
  UNION ALL
  SELECT {d'2023-01-03'}, 500,NULL,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-04'}, 200,100,NULL,'Clothes'
  UNION ALL
  SELECT {d'2023-01-06'}, NULL,NULL,100,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-06'}, NULL,100,NULL,'Clothes'  

Selecione os dados

Agora, usando a função COALESCE, vamos recuperar o primeiro valor que não é NULL nas colunas expense1, expense2 e expense3

SELECT TDATE,
COALESCE(EXPENSE1,EXPENSE2,EXPENSE3),
TTYPE
FROM sqluser.expenses ORDERBY2   

Funções #RANK x DENSE_RANK x ROW_NUMBER

  • RANK()— atribui um número inteiro de classificação a cada coluna no mesmo frame de janela, começando em 1. Os números inteiros de classificação podem incluir valores duplicados se várias linhas tiverem o mesmo valor para o campo de função da janela.
  • ROW_NUMBER() — atribui um número inteiro sequencial exclusivo a cada linha no mesmo frame de janela, começando em 1. Se várias linhas tiverem o mesmo valor para o campo de função da janela, cada linha receberá um número inteiro sequencial único.
  • DENSE_RANK() não deixa lacunas após uma classificação duplicada.

No SQL, há várias maneiras de atribuir uma classificação a uma linha, que vamos analisar com um exemplo. Considere novamente o mesmo exemplo acima, mas agora queremos saber quais são as despesas mais altas.

Queremos saber onde eu gasto mais dinheiro. Há diferentes maneiras de fazer isso. Podemos usar todas as ROW_NUMBER() , RANK() e DENSE_RANK() . Vamos ordenar a tabela anterior usando todas as três funções e ver quais são as principais diferenças entre elas usando a seguinte consulta:

Confira nossa consulta abaixo:

A principal diferença entre as três funções é a forma como lidamos com os vínculos. Vamos analisar mais a fundo as diferenças:

  • ROW_NUMBER()retorna um número único para cada linha começando em 1. Quando há vínculos, ele atribui arbitrariamente um número se o segundo critério não estiver definido.
  • RANK()retorna um número único para cada linha começando em 1, exceto quando há vínculos, porque ele atribui o mesmo número. Além disso, uma lacuna segue a classificação duplicada.
  • DENSE_RANK() não deixa lacunas depois de uma classificação duplicada.

#Calculando totais correntes

O total corrente é provavelmente uma das funções de janela mais úteis, principalmente quando você quer visualizar o crescimento. Usando uma função de janela com SUM(), podemos calcular uma agregação cumulativa.

Para fazer isso, só precisamos somar uma variável usando o agregador SUM() , mas ordenar essa função usando uma coluna TDATE. 

É possível observar esta consulta correspondente:

Como você pode observar na tabela acima, agora temos a agregação acumulada da quantidade de dinheiro gasto conforme passam as datas.

Conclusão

O SQL é ótimo. As funções usadas acima podem ser úteis ao lidar com análise de dados, ciência de dados e qualquer outro campo relacionado a dados.

Por isso, você deve continuar a melhorar suas habilidades de SQL.


Obrigado

0
0 180
Artigo Danusa Calixto · Dez. 4, 2023 1m read

InterSystems FAQ

Ao executar comandos do sistema operacional, use $ZF(-100).

do$ZF(-100,"",program,args) // Execute the Windows command [synchronously].
do$ZF(-100,"/ASYNC",program,args) // Executes a Windows command [asynchronously].

Ao executar comandos do shell do sistema operacional, como mkdir e copy, especifique também /SHELL.

do$zf(-100,"/shell /async","mkdir","c:\temp\x")

Consulte os seguintes documentos para obter detalhes:

Sobre $ZF(-100) [IRIS]
Sobre $ZF(-100)

0
0 84
Pergunta Gustavo Pontes · Dez. 1, 2023

Bom dia pessoal.

Me chamo Gustavo Pontes e estou iniciando nos estudos do InterSystems Cache, pois é o software utilizado na empresa na qual trabalho. Venho por meio deste post pedir que me deem dicas de onde começar a estudar o Cache e qual a ordem dos aprendizados para poder programar usando o Cache.

Muito obrigado!

2
0 140
Artigo Danusa Calixto · Nov. 28, 2023 8m read

Olá, Comunidade,
Neste artigo, vou apresentar meu aplicativo iris-mlm-explainer

Esse aplicativo da Web se conecta ao InterSystems Cloud SQL para criar, treinar, validar e prever modelos de ML, fazer previsões e mostrar um painel com todos os modelos treinados e uma explicação sobre o funcionamento de um modelo de machine learning ajustado. O painel fornece plotagens interativas de desempenho do modelo, importância do recurso, contribuições do recurso para previsões individuais, plotagens de dependência parcial, valores SHAP (interação), visualização de árvores de decisões individuais etc.

Pré-requisitos

  • Você precisa ter uma conta no InterSystems Cloud SQL.
  • Você precisa ter o <a book="" en="" getting-started-installing-git="" git-scm.com="" https:="" v2="">Git</a> instalado localmente.
  • Você precisa ter o <a downloads="" https:="" www.python.org="">Python3</a> instalado localmente.  

Primeiros Passos

Vamos seguir as etapas abaixo para criar e visualizar o painel explicativo de um modelo:

  • Etapa 1 : fazer o git pull/clone do repositório

  • Etapa 2 : fazer login no portal de serviços do InterSystems Cloud SQL

    • Etapa 2.1 : adicionar e gerenciar arquivos
    • Etapa 2.2 : importar DDL e arquivos de dados
    • Etapa 2.3 : criar modelo
    • Etapa 2.4 : treinar modelo
    • Etapa 2.5 : validar modelo
  • Etapa 3 : ativar o ambiente virtual do Python

  • Etapa 4 : executar o aplicativo da Web para previsão

  • Etapa 5 : explorar e o painel explicativo

Etapa 1 : fazer o git pull/clone do repositório

Então, vamos começar com a primeira etapa

Crie uma pasta e faça o git pull/clone do repositório em qualquer diretório local

git clone https://github.com/mwaseem75/iris-mlm-explainer.git

 

Etapa 2 : fazer login no portal de serviços do InterSystems Cloud SQL

Faça login no InterSystems Cloud Service Portal
image

 

 

Selecione a implantação executada

image

 

Etapa 2.1 : adicionar e gerenciar arquivos

Clique em "Add and Manage Files" (Adicionar e gerenciar arquivos)

image

O repositório contém os arquivos USA_Housing_tables_DDL.sql(DDL para criar tabelas), USA_Housing_train.csv(dados de treinamento) e USA_Housing_validate.csv(para validação) na pasta de conjuntos de dados. Selecione o botão de upload para adicionar esses arquivos.

Adicionar arquivos

Etapa 2.2 : importar DDL e arquivos de dados

Clique em "Import files" (Importar arquivos), no botão de opção das declarações DDL ou DML e no botão "Next" (Próximo)

Importar DDL

Clique no botão de opção do Intersystems IRIS e em "Next"

IsIRIS

Selecione o arquivo USA_Housing_tables_DDL.sql e pressione o botão para importar arquivos

Importar arquivo DDL

Clique em "Import" na caixa de diálogo de confirmação para criar a tabela

confirmar importação

importação concluída

Clique nas ferramentas da Query em SQL para verificar se as tabelas foram criadas

conferir se as tabelas foram criadas

Importar arquivos de dados

Clique em "Import files" (Importar arquivos), no botão de opção dos dados CSV e no botão "Next" (Próximo)

csv1

Selecione o arquivo USA_Housing_train.csv e clique no botão "Next"

csv2

 

Selecione o arquivo USA_Housing_train.csv na lista suspensa, marque para importar o arquivo como linha de cabeçalho, selecione "Field names in header row match column names in selected table" (Os nomes dos campos na linha de cabeçalho correspondem aos nomes das colunas na tabela selecionada) e clique em "Import files"

csv3

Clique em "Import" na caixa de diálogo de confirmação

csv4

Confira se 4000 linhas foram atualizadas

csv5

Repita as mesmas etapas para importar o arquivo USA_Housing_validate.csv, que contém 1500 registros

csv6

Etapa 2.3 : criar modelo

Clique em "IntegratedML tools" (ferramentas do IntegratedML) e selecione "Create Panel" (Criar painel).

Insira "USAHousingPriceModel" no campo de nome do modelo, selecione a tabela "usa_housing_train" e "Price" no menu suspenso "Field to predict" (Campo para prever). Clique no botão "Create model" para criar o modelo

criar modelo

 

Etapa 2.4 : treinar modelo

Selecione "Train Panel" (Treinar painel), escolha "USAHousingPriceModel" na lista suspensa "Model to train" (Modelo a treinar) e insira "USAHousingPriceModel_t1" no campo de nome do modelo a treinar

TREINAR1

O modelo será treinado após a conclusão do status de execução

TREINAR2

 

Etapa 2.5 : validar modelo

Selecione "Validate Panel" (Validar painel), escolha "USAHousingPriceModel_t1" na lista suspensa "Trained model to validate" (Modelo treinado a validar), selecione "usa_houseing_validate" na lista suspensa "Table to validate model from" (Tabela para validar o modelo) e clique no botão "Validate model" (Validar modelo)

image

Clique em "Show validation metrics" para ver as métricas

mostrar validação

Clique no ícone de gráfico para ver o gráfico "Prediction VS Actual" (Previsão x Real)

gráfico de validação

 

Etapa 3 : ativar o ambiente virtual do Python

O repositório já contém uma pasta de ambiente virtual do python (venv) com as bibliotecas necessárias.

Tudo o que precisamos fazer é ativar o ambiente
No Unix ou MacOS:

$source venv/bin/activate

No Windows:

venv\scripts\activate

###Etapa 4 : definir parâmetros de conexão do InterSystems Cloud SQL

O repositório contém o arquivo config.py. Basta abrir e definir os parâmetros
image
Coloque os mesmos valores usados no InterSystems Cloud SQL
image

 

Etapa 4 : executar o aplicativo da Web para previsão

Execute o comando abaixo no ambiente virtual para iniciar nosso aplicativo principal

python app.py

image

Acesse http://127.0.0.1:5000/ para executar o aplicativo

image

Insira "Age of house" (Idade da casa), "No of rooms" (Nº de cômodos), "No of bedroom" (Nº de quartos) e "Area population" (População da área) para obter a previsão

image

Etapa 5 : explorar e o painel explicativo

Por fim, execute o comando abaixo no ambiente virtual para iniciar nosso aplicativo principal

python expdash.py

imageimage
image

Acesse http://localhost:8050/ para executar o aplicativo
image

O aplicativo listará todos os modelos treinados com nosso "USAHousingPriceModel". Clique no hyperlink "Go to dashboard" (Acessar painel) para visualizar a explicação sobre o modelo

Importância dos recursos. Quais recursos tiveram o maior impacto?
image

Métricas quantitativas para o desempenho do modelo, Qual é a diferença entre o valor previsto e o observado?
image

Previsão e Como cada recurso contribuiu para a previsão?
image

Ajuste os valores dos recursos para mudar a previsão
image

Resumo Shap, Ordenamento dos recursos por valores shap
image

Resumo de interações, Ordenamento dos recursos por valor de interação shap
image

Árvores de decisões, Exibição de árvores de decisões individuais dentro do Random Forest
image

Obrigado

0
0 87
Artigo Danusa Calixto · Nov. 27, 2023 3m read

Oi, pessoal,

Publiquei um novo pacote no OEX.

Resumindo, é um tipo de dados de string que oferece várias opções de configuração e flexibilidade.

Caso de negócio

  1. Você tem algumas classes de bibliotecas e outras estruturas reutilizáveis que usa em vários sistemas.
  2. Você tem um ambiente "multi-tenant" em que uma base de código é compartilhada entre vários inquilinos, sendo que cada um tem seu próprio namespace configurado.
    1. Regras específicas e processos de negócios são armazenados no namespace desse inquilino.
    2. As estruturas de classes principais são as mesmas.
    3. Os inquilinos têm diferentes requisitos de validação de dados e alguns querem a consistência dos dados em todos os sistemas da organização.

Se você tiver seis inquilinos com diferentes níveis de validação em um número de identificação (SSN), você deve acomodá-los sem precisar criar um subconjunto de classes para cada um.

Alguns inquilinos também querem que os dados sejam depurados para garantir a consistência.

Solução do problema

Uma classe de string com a opção de configurar o tempo de compilação e de execução que pode ser alterada dinamicamente.

Essa classe oferece o seguinte

  1. Defina o valor do parâmetro REGEX para a validação de expressão regular no método IsValid.
    1. Defina o REGEXMODE como "globalref", e IsValid obterá o valor de um global para usar como o padrão de expressão regular.
      1. Por exemplo, REGEXMODE = "^MyConf(""IDNumberRegex"")" Em seguida, configure o padrão nesse global e nó.
  2. Defina o valor do parâmetro DATACLEANUPSEQUENCE a ser aplicado durante o método Normalize.
    1. O valor é uma %List de %Lists que contêm as instruções para $ZSTRIP.
      1. Por exemplo, DATACLEANUPSEQUENCE = "$lb($lb(""<>WC"","""",""""),$lb(""*P"","""",""-""))"
    2. Defina DATACLEANUPMODE como "globalref", e Normalize lerá a sequência de limpeza do global indicado pelo valor em DATACLEANUPSEQUENCE. Por exemplo, DATACLEANUPSEQUENCE  = "^MyConf(""LastNameCleanup"")" Em seguida, configure a sequência nesse global e nó.
      1. Por exemplo, "^MyConf(""LastNameCleanup"") = $lb($lb("*PC","","'- "),$lb("<->W","",""))
  3. Defina o valor do parâmetro ADDITIONALVALIDATIONCALL como a chamada de classmethod que será feita durante IsValid, depois de todas as outras validações.
    1. O valor tem o formato "##class(My.ValidatorClass).MyClassMethod()"
    2. Defina ADDITIONALVALIDATIONMODE como "globalref", e IsValid lerá o método de validação a ser usado do global indicado pelo valor em ADDITIONALVALIDATIONCALL.
      1. Por exemplo, ADDITIONALVALIDATIONCALL= "^MyConf(""LastNameCleanup"")" Em seguida, configure a sequência nesse global e nó.
        1. Por exemplo, "^MyConf(""IDNumberValidator"") = "##class(BaseLib.Validators.ZAID).Validate()"

O repositório do GitHub contém uma demonstração completa dessa funcionalidade, além de exemplos de classes.

Obrigado

0
0 75
Pergunta Flávio Lúcio Naves Júnior · Nov. 7, 2023

Olá pessoal,

Estou tentando implementar integração contínua usando Docker com o Caché 2018.1, e estou no processo de criar uma imagem para o nosso cliente. Já instalei o Caché 2018.1 no servidor RedHat, mas estou trabalhando em um script para criar o banco de dados e o namespace. Para o banco de dados, utilizei o código a seguir:

do ##class(SYS.Database).CreateDatabase("/usr/cachepoc/cache2018/mgr/poc/")
5
0 141
Pergunta Edmara Francisco · Out. 2, 2023

Olá,

Preciso garantir que a tarefa criada/agendada, por usuário do sistema, seja criada no banco de rotinas e não remotamente no ECP que ele está conectado. Como garantir a criação/agendamento dessa tarefa?

Aqui tem uma sugestão de criar a rotina nos dois ambientes:  https://openexchange.intersystems.com/package/Background-Jobs-ECP

Existe outra opção?

Desde já agradeço,

Edmara

1
0 143
Artigo Danusa Calixto · Set. 1, 2023 3m read

Olá, desenvolvedores. No momento, estou realizando uma demonstração sobre o desenvolvimento de uma IU front-end fazendo análise de dados e configurando um teste de desempenho com grandes objetos de dados. Portanto, o uso do utilitário Populate pode me ajudar a gerar automaticamente alguns dados de amostra com que eu possa brincar.

Neste post, gostaria de compartilhar minha experiência ao usar o utilitário Populate, incluindo o parâmetro POPSPEC.

  1. No início, criei 2 classes persistentes para o suporte do utilitário Populate ( Extends (%Persistent, %Populate)): popPatient que busca preencher as informações dos pacientes e popSign para simular os dados coletados de um sensor de frequência cardíaca no paciente.    

2.1 Para deixar esta demonstração parecida com circunstâncias reais, quero adicionar o intervalo de valores das variáveis para algumas propriedades ao usar MAXVAL e MINVAL. Por exemplo, não se pode esperar que um paciente tenha mil anos de idade.

Faça o mesmo com a frequência cardíaca em BPM

2.2 Se precisamos usar um método de geração automática personalizado, utilizamos POPSPEC para definir os valores gerados. Por exemplo, temos classes pré-definidas que podem ser referenciadas diretamente e gerar números de telefone dos EUA. Porém, no meu caso, quero gerar um formato correspondente ao número de telefone australiano. Também quero registrar o horário de coleta das frequências cardíacas e criar uma lista para colocar todos os valores que quero gerar nela. Para tudo isso, precisamos usar POPSPEC para personalizar a geração de dados a partir de um método definido pelo usuário.

Nesse caso, escrevi dois classMethods simples para predefinir o formato do número de telefone e detectar o carimbo de data/hora atual como o horário de coleta da frequência cardíaca. Em seguida, adicionei o parâmetro POPSPEC à propriedade relacionada

  1. Execute o método e comece a popular os dados

Você pode simplesmente inserir o comando a seguir no Terminal para popular os dados, substituindo number pelo número de valores que precisam ser preenchidos.

"do ##class(Demo.popPatient).Populate( number  )"

"do ##class(Demo.popSign).Populate( number )"

Ou você pode colocar esses dois comandos definidos em um classMethod como este e executar "do ##class(Demo.RunPopulate). StartPop ('times for patient', times for signs') 

  1. Aqui está um exemplo para gerar 10 pacientes e 50 sinais de frequência cardíaca coletados

Espero que esta simples exploração possa ajudar você. Happy Coding!

0
0 109
Artigo Flávio Lúcio Naves Júnior · Ago. 23, 2023 1m read

Pergunta feita várias vezes para InterSystems 

Isso pode ser obtido usando a consulta AllFields query da classe %SYS.ProcessQuery.

Para obter mais detalhes, consulte o documento Process (Job)【IRIS】Process (Job).

Um exemplo de execução no terminal é o seguinte.

1
0 124
Artigo Danusa Calixto · Ago. 7, 2023 1m read

InterSystems FAQ

Se o valor de uma variável local é um OREF ou não, pode ser determinado usando $IsObject(). Seja v a variável que você deseja verificar,

$IsObject(v)=1// v is an OREF$IsObject(v)=0// v is not an OREF$IsObject(v)=-1// v is an OREF but does not point to a valid object

Observe que $IsObject(v) dará um erro UNDEFINED se v for indefinido.

Para evitar erros UNDEFINED, é recomendado o uso do $Get assim:

$IsObject($Get(v))
0
0 100
Pergunta Paulo Brandão · Maio 31, 2023

Bom dia pessoal.

Estou fazendo uma rotina onde no final preciso deletar um arquivo de um diretório de rede, porém para realizar essa ação, preciso utilizar um usuário específico, diferente do usuário que está executando o Iris no servidor.

É possível usar um usuário diferente, passando o usuário e senha para deletar um arquivo na rede via Iris?

2
0 144
Artigo Davi Massaru Teixeira Muta · Maio 14, 2023 5m read

#O problema

Temos o seguinte cenário, você trabalha em um laboratório, que até então atendia apenas exames realizados em uma região geográfica especifica, porém dentro de um curto espaço de tempo, percebe que seu negócio está expandindo para outras regiões, a demanda pela entrega dos resultados dos exames passa a não ser mais suportada pelo servidor principal, quedas e lentidões devido a alta repentina de solicitações, passam a ser mais frequentes e seus clientes passam a reclamar da indisponibilidade do sistema, como lidar com essa situação ?

image

Obviamente sua aplicação precisa ter a infraestrutura aprimorada, caso esteja utilizando a plataforma de dados InterSystems IRIS/Caché, a utilização de ECP’s pode ser uma saída para o problema.

#ECP

ECP - “Enterprise Cache Protocol” protocolo com arquitetura de cache de dados distribuídos, permite distribuir dados e lógica de aplicativos de forma eficiente em vários sistemas de servidores.

Ao contrário de outras arquiteturas multicamadas, o ECP é uma opção de configuração, que não requer usar código especial ou técnicas de desenvolvimento para criar aplicativos de banco de dados distribuídos, fazendo com que diversos servidores executem a aplicação usando a mesma base de código, permitindo que os desenvolvedores se concentrem na funcionalidade central centrada no cliente, tornando o aplicativo mais simples de manter.

#Configuração ECP’s?

Para compreender a configuração de um E.C.P, é importante entender como os artefatos de código e dados são organizados dentro da plataforma InterSystems IRIS.

#Mapeamento de namespaces.

Namespace é uma unidade lógica de organização em InterSystems IRIS que permite a separação de objetos e recursos do sistema em grupos distintos. Tornando mais fácil a administração e o gerenciamento do sistema.

Cada Namespace é configurado para utilizar banco de dados de globais e rotinas, que é utilizado para armazenar e gerenciar os dados globais e objetos de rotinas.

image

- Banco de dados provedor de Globais:

O Banco de dados provedor de globais, é usado para armazenar e gerenciar os dados globais em um determinado namespace.

##- Banco de dados provedor de Rotinas: Rotinas são artefatos do banco que executam tarefas específicas no sistema, plataformas de dados InterSystems utilizando o provedor de rotinas como um banco de dados especializado para armazenar e gerenciar as rotinas de código em um namespace.

#Realizar os mapeamentos Para configurar o ECP (Enterprise Cache Protocol), é necessário seguir alguns passos simples. Primeiramente, é preciso instalar uma nova máquina com uma instância de InterSystems IRIS ou Cache. Em seguida, é necessário configurar os servidores de aplicação no servidor de dados e vice-versa, para que o ambas instâncias Intersystems possam se comunicar, podendo configurar e distinguir entre bancos de dados locais e remotos entre as instâncias.

• Banco de dados local: É o banco de dados que reside fisicamente na mesma máquina em que o banco IRIS/Caché está sendo executado, associado a uma instância InterSystmes, sendo acessado e gerenciado pela própria instância do IRIS no servidor local.

• Banco de dados remoto: Banco de dados que está localizado em um servidor separado, ou seja, em uma máquina diferente daquela onde o IRIS está sendo executado.

Em seguida, devemos configurar o E.C.P (novo servidor de aplicação) para utilizar os bancos de dados remotos, provenientes do servidor de dados principal (onde possui os seus apontamentos locais), com a possibilidade de organização do namespace apontar para os bancos de global (dados) e rotinas (código) remotos, seguindo a seguinte estrutura:

image

Ao configurar o Enterprise Cache Protocol (ECP) e o namespace no InterSystems IRIS com o uso de bancos de dados remotos, ocorre uma distribuição de tarefas e recursos entre o servidor de aplicação (onde está o ECP) e o servidor de dados (onde estão os bancos de dados locais).

#Rede de E.C.Ps:

No cenário de configuração de diversos E.C.P.s com bancos de dados remotos, os processos (JOBs), são executados no servidor de aplicação controlando o fluxo de trabalho e garantindo a escalabilidade e o balanceamento de carga.

No entanto, os dados e as rotinas são armazenados no servidor de dados, onde estão localizados os bancos de dados locais. Ele fornece o armazenamento centralizado para os dados e as rotinas utilizados pelos processos executados no servidor de aplicação.

Essa arquitetura distribuída permite que o processamento e o armazenamento sejam separados, essa configuração permite um ambiente distribuído eficiente, com recursos compartilhados.

image

Desta forma você pode escalar sua aplicação, para atender uma demanda que seu sistema necessita, sem a alteração de códigos de sua aplicação, a expansão do seu laboratório para outras regiões geográficas pode trazer desafios significativos em relação à capacidade e disponibilidade do sistema. No entanto, a utilização dos ECPs (Enterprise Cache Protocol) no InterSystems IRIS/Caché pode ser solução viável para lidar com essa situação. Ao implementar uma infraestrutura aprimorada e distribuída, é possível alcançar uma maior capacidade de processamento, melhorar o desempenho e garantir a disponibilidade dos resultados dos exames.

Os ECPs permitem uma distribuição eficiente da carga de trabalho, com processos sendo executados nos servidores de aplicação e os dados sendo armazenados nos servidores de dados.

Essa abordagem proporciona uma maior escalabilidade e balanceamento de carga, evitando quedas e lentidões causadas pelo aumento repentino na demanda. Além disso, a infraestrutura distribuída permite a centralização e o gerenciamento eficiente dos dados, facilitando a expansão para novas regiões sem comprometer a qualidade do serviço.

Ao adotar os ECPs no InterSystems IRIS/Caché, você estará preparando sua aplicação para suportar o crescimento e atender às demandas dos clientes em diferentes regiões geográficas. Essa solução proporciona maior escalabilidade e desempenho, permitindo que seu laboratório ofereça um serviço de qualidade, com resultados de exames entregues.

3
6 620
Artigo Henrique Dias · Jun. 10, 2023 9m read

20 anos. 

Agora em 2023 eu completo 20 anos trabalhando com tecnologia, desenvolvendo sistemas, implementando, criando novas soluções e posso afirmar que trabalhar com tecnologia InterSystems fez e faz parte da minha vida. Afinal, foram 18 anos trabalhando todos os dias com essa tecnologia.

Comecei a trabalhar com o Caché 4, lá atrás em 2003, vivenciei as mudanças para o Caché 5, Caché e Ensemble 2008, 2010, 2012, 2014, 2017, 2018 e até finalmente chegarmos no InterSystems IRIS. 

4
0 205
Artigo Miqueias Santos · Jun. 10, 2023 6m read

Olá!

Eu estava querendo dedicar algum tempo para implementar alguma DLL ou algo que eu pudesse usar do Caché e finalmente tive uma pequena ideia, se você está interessado em poder produzir mensagens que são enviadas para o Kafka rapidamente, você é no lugar certo ;-)

Antes de lhe entregar a ficha com o que vamos ver, vou fazer um resumo para que você decida se tem interesse em ler o artigo.

Neste artigo vamos focar "apenas" na parte de produzir mensagens e enviá-las para Kafka:

Como funciona?

Utilizo uma DLL .Net (Netframework 4.5) que fiz (está dentro da pasta dll do repositório)

0
0 275
Artigo Edilson Eberle Carvalho · Jun. 8, 2023 2m read

Incrível esse legado! Esse é um dos motivos principais do sucesso da Intersystems.

Fiz um teste simples essa semana e não é que deu certo? Qual linguagem tem essa capacidade? Qual banco de dados pode-se ter Globais e Tabelas SQL? Isso sem falar na velocidade! Será covardia o BachMark entre MS-SQL e Caché. Qual o sistema que vc pode instalar em seu notebook e apresentar resultados como se estivesse em um Servidor?

0
0 241
Artigo Miqueias Santos · Jun. 7, 2023 4m read

Quando você compila rotinas ou classes no terminal, os resultados da compilação são exibidos na tela, portanto, mesmo que ocorra um erro, é fácil verificar.Se você deseja obter apenas informações de erro, precisa planejar um pouco.

O seguinte descreve como obter informações de erro do resultado da compilação em lote de rotinas/classes.

para rotinas

Para rotinas de compilação em massa em um namespace no Terminal, o método CompileAll() da classe %Library.Routine. use

0
0 108
Artigo Heloisa Paiva · Jun. 1, 2023 2m read

Esse é um artigo da página de "Perguntas frequentes" (FAQ) da InterSystems.

 1. Exportar API

a. Use $system.OBJ.Export() para especificar rotinas individuais para exportar. Por exemplo:

do $system.OBJ.Export("TEST1.mac,TEST2.mac","c:\temp\routines.xml",,.errors)

O formato que você deve especificar é: NomeDaRotina.extensão, e a extensão pode ser: mac, bas, int, inc, obj.

Os erros durante a exportação se armazenam na variável "errors".

Veja a referência da classe %SYSTEM.OBJ para mais detalhes sobre $system.OBJ.Export().

0
0 128
Artigo Madu Gonçalves da Silva · Maio 27, 2023 2m read

O problema do grupo Pardini era mudar a plataforma de banco de dados "Nós construímos nosso negócio nele, então você pode imaginar como é arriscado mudar a plataforma de banco de dados abaixo dele. Ao escolhermos o InterSystems IRIS for Health conseguimos o crescimento das operações e de serviços com a velocidade que os negócios exigem", a companhia iniciou o desenvolvimento do sistema de informações laboratoriais (Lis) na plataforma de dados InterSystems Caché,

0
0 134
Anúncio Danusa Calixto · Maio 24, 2023

Se você já construiu testes unitários utilizando o %UnitTest framework, ou está pensando em usá-lo, por favor dê uma olhada no InterSystems Testing Manager. 

Agora você pode buscar os testes unitários sem sair do VS Code, executar ou depurá-los, e visualizar os resultados da execução anterior. 

0
0 88
Artigo Cristiano Silva · Maio 12, 2023 5m read

Quem nunca deve ter passado pela seguinte situação:

Tenho uma aplicação/global de configuração que não está e não pode ser mapeada para uma classe, porém é necessário fornecer uma procedure específica para que uma ferramenta de relatório usando ODBC ou JDBC ou ainda utilização de resultset do prório IRIS, possa ter acesso aos dados e gerar o relatório.

No IRIS temos uma funcionalidade que nos permite criar uma query que pode ser acessada internamente e também ser exposta como uma stored procedure, com nossa própria lógica. Essa funcionalidade é Custom Class Query.

0
0 193
Anúncio Danusa Calixto · Maio 11, 2023

A partir de 16 de Maio, a documentação para as versões do InterSystems Caché® e InterSystems Ensemble® anteriores a 2017.1 estarão disponíveis somente em formato PDF no site da documentação da InterSystems. Instancias locais destas versões continuarão apresentando o conteúdo dinamicamente. 

0
0 181
Artigo Cristiano Silva · Abr. 27, 2023 6m read

InterSystems FAQ rubric

Neste artigo, apresentaremos como lidar com a situação: "Excluí acidentalmente uma global!"

Arquivos de backup e journals são usados para recuperar globais específicas que foram excluídas acidentalmente. A restauração é executada especificando as condições e restaurando registros do journal usando o utilitário ^ZJRNFILT. Dessa forma, você pode aplicar um backup pontual do banco de dados e até incluindo a exclusão de uma global específica para registros do journal que contêm as exclusões. Para obter mais informações sobre o utilitário ^ZJRNFILT, consulte a documentação:

0
0 98