#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.

Artigo Julio Esquerdo · Abr. 12, 2022 6m read

Julio Esquerdo e Lucio Mattos

Atualmente temos muitos recursos dentro do IRIS como por exemplo suporte REST, programação em Python, suporte a SQL, orientação a objetos, ML, IA, e uma infinidade de outras funcionalidades.

Mas aqueles que programam os códigos que serão utilizados, mesmo com os atuais recursos disponíveis, sabem que será necessário trazer dados para uma área de utilização, para posterior trabalho.

1
0 324
Artigo Danusa Calixto · Ago. 12, 2022 4m read

A combinação da sintaxe de objetos com SQL é um dos recursos legais no Object Script. No entanto, em um caso, forneceu resultados estranhos. Portanto, decidi isolar esse caso e descrevê-lo aqui.

Digamos que você precisa escrever um classmethod que atualiza uma única propriedade no disco. Geralmente, eu escreveria isso usando SQL, desta forma:

ClassMethod ActivateSQL(customerId) as %Status
{
   &sql(Update Test.Customer Set Active=1 Where ID=:customerId)
   If SQLCODE'=0 {
      Set exception = ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, $Get(%msg))
      Quit exception.AsStatus()
   } Else {
      Quit $$$OK
   }
}
 

e chamaria esse classmethod sempre que necessário no meu aplicativo.

No entanto, se o código do aplicativo tiver a instância aberta durante a chamada do classmethod e executar %Save em seguida, ele substituirá as atualizações realizadas no classmethod:

Set objCust=##class(Test.Customer).%OpenId(id)
Do objCust.ActivateSQL(id)
Set objCust.Name = "something"
Set sc = objCust.%Save()


Ao mudar a ordem das linhas, o problema estaria resolvido, mas você precisa tomar cuidado com este tipo de combinação:

Do ##class(Test.Customer).ActivateSQL(id)
Set objCust=##class(Test.Customer).%OpenId(id)
Set objCust.Name = "something"
Set sc = objCust.%Save()


Quando classmethod fosse escrito usando sintaxe de OO assim:

ClassMethod ActivateOO(customerId) as %Status
{
Set objCust = ##class(Test.Customer).%OpenId(customerId)
Set objCust.Active = 1
Quit objCust.%Save()
}

não haveria problema, já que a instância aberta no código da chamada e a instância aberta em classmethod apontariam para a mesma instância na memória.
(Além de uma penalidade no desempenho, já que abrir uma instância com várias propriedades para atualizar uma propriedade é mais demorado do que uma atualização do SQL)

Portanto, para concluir: tenha cuidado ao abrir instâncias "muito longas" no seu código se também estiver usando SQL.

Anexei uma classe de teste completa. Se quiser ver por si mesmo, chame Do ##class(Test.Customer).Test(0) para ver o código usando somente OO e .Test(1), usando SQL (observe que a atualização do SQL é substituída)
Qualquer comentário é bem-vindo!
 

Class Test.Customer Extends %Persistent
    {
    Property Name As%String;Property Active As%Boolean;ClassMethod ActivateSQL(customerId) As%Status
    {
        #Dim exception
    
        &sql(Update Test.Customer Set Active=1WhereID=:customerId)
        If SQLCODE'=0 {
            Set exception = ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, $Get(%msg))
            Quit exception.AsStatus()
        }
    
        &sql(SelectName, Active Into :name, :active From Test.Customer WhereID = :customerId)
        Write !,"Result After SQL Update : ",!
        Write"Name   : ",name,!
        Write"Active : ",active,!!
        Quit
    }
    
    ClassMethod ActivateOO(customerId) As%Status
    {
        #Dim objCust as Test.Customer
        #Dim sc as%StatusSet objCust = ##class(Test.Customer).%OpenId(customerId)
        Set objCust.Active = 1Set sc = objCust.%Save()
        If sc'=$$$OKQuit sc
        &sql(SelectName, Active Into :name, :active From Test.Customer WhereID = :customerId)
        Write !,"Result After %Save : ",!
        Write"Name   : ",objCust.Name,!
        Write"Active : ",objCust.Active,!!  
        Quit
    }
    
    ClassMethod Test(mode = 0)
    {
        #Dim objCust as Test.Customer
        #Dim sc as%Status#Dim id as%Integer;Create an instance and keep the id in memorySet objCust = ##class(Test.Customer).%New()
        Set objCust.Name = "Danny"Set sc = objCust.%Save() If sc'=1Write"Could not save",!
        Set id = objCust.%Id()
        Kill objCust
    
        ;Open and display the created instanceSet objCust=##class(Test.Customer).%OpenId(id)
        Write"Name   : ",objCust.Name,!
        Write"Active : ",objCust.Active,!   
    
        ;Chame um classmethod que atualize o id com SQL ou OOIf mode=0 {
            Do objCust.ActivateOO(id)
        } else {
            Do objCust.ActivateSQL(id)
        }   
        ;Mude a instância (que ainda está na memória)Set objCust = ##class(Test.Customer).%OpenId(id)
        Set objCust.Name = objCust.Name_" - edited"Set sc = objCust.%Save() If sc'=1Write"Could not save",!
        Write"Name   : ",objCust.Name,!
        Write"Active : ",objCust.Active,!
        ;a atualização do SQL em classmethod é substituída pela instância que ainda estava na memória;Abra e demonstre a instância criadaKill objCust
        Set objCust = ##class(Test.Customer).%OpenId(id)
        Write"Name   : ",objCust.Name,!
        Write"Active : ",objCust.Active,!
    }
    }
0
0 121
Pergunta Alexandre Lago · Jun. 21, 2022

Olá, comecei a trabalhar com Caché a pouco, e estou em treinamento.

Me surgiu uma dúvida de uma determinada atividade, aonde a regra solicita que o usuário digite uma string, e selecione uma das opções listradas, e uma delas e informar a palavra com maior número de carácteres da string.

Já tentei de tudo, porém não consegui chegar a nenhuma conclusão.

Desde já agradeço

3
0 313
Pergunta Anderson F · Abr. 5, 2022

Bom dia a todos.

Preciso consultar informações das tabelas/classes que estejam em lock

Eu achei na documentação a classe %SYS.LockQuery mas no exemplo ela parece ser uma Class Query(não estou acostumado com esse conceito) e só consigo consumir os dados via Object Script usando um %ResultSet

Existe alguma forma de consumir essas informações diretamente via SQL ?

Grato por qualquer ajuda

2
0 296
Pergunta Luiz Henrique Carvalho Martarelli · Mar. 31, 2022

Bom dia, tarde, noite!

Estou com um problema com o processo de mapeamento das conexões gateway SQL com o banco da Oracle.

Foi realizado todo o processo de conexão pelo Portal e ele funciona perfeitamente. Porem toda vez que é feito alguma operação, ele cria uma nova conexão e deixa aberta.

queria saber se tem como reutilizar a mesma conexão. ou matar ela após executar as operações (Select, Update, Detele, ....)

Desde já agradeço!

Att

Luiz Martarelli

3
0 160
Pergunta Arian Botine · Mar. 19, 2022

Antes de mais nada, o exemplo abaixo trata-se da manutenção de um código legado e em uma nova implementação não usaria a ^CacheTemp dessa forma.

Em determinado momento na codificação, realizamos um $GET em uma variavel do tipo global na CacheTemp da seguinte forma:

Set dataHora = $GET(^CacheTemp.ResAnteriores("DataColeta",pUsuario,pSessao,paciente,objOs.%Id(),pProcedimento),"")
1
0 167
Artigo Fernando Ferreira · Mar. 18, 2022 8m read

Olá comunidade! Nesta parte do artigo temos um cenário onde o nosso ambiente InterSystems Caché/Ensemble possui um ou mais servidores com Shadow e/ou Mirror.

Como comentado no início do artigo, componentes de um software possuem uma evolução natural e outros componentes são deprecados. E uma tecnologia muito utilizada pelos nossos clientes que está deprecada no InterSystems IRIS é o Shadow (esta informação está na página 18 do documento InterSystems IRIS Adoption Guide que volto a recomendar que você faça o download no WRC).

0
1 319
Job Angelo Bruno Braga · Mar. 10, 2022

Olá Desenvolvedores !

Segue uma oportunidade para bolsas de estudo remuneradas: 

Duas bolsas de estudo para área de tecnologia da informação:
•    Valor de R$ 7.373,10  durante 24 meses
•    https://inovahc.hc.fm.usp.br/oportunidades/
•    Código da vaga: HC04 Desenvolvedor
•    Código da vaga: HC05 Desenvolvedor Integrador

Desenvolvedor e Desenvolvedor Integrador

Requisitos:

0
0 240
Pergunta Renato Araujo · Mar. 8, 2022

Boa tarde à todos!

Preciso fazer uma chamada sql (utilizando JDBC) para executar uma procedure que retorna um objeto estruturado (Oracle Object) como parâmetro de saída.

No entanto, o método do Adptador SQL não está aceitando o tipo de dado STRUCT do JDBC (referente ao Oracle Oject), retornando a seguinte mensagem de erro:

ERRO #5023: Erro no Gateway Remoto: JDBC Gateway SP execute(0) error 0: Remote JDBC error: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'AGUARDAR_EVENTO'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1
0 248
InterSystems Oficial Rochael Ribeiro · Mar. 7, 2022

Três novos conjuntos de lançamentos de manutenção estão agora disponíveis:: 

 

  • Caché  2018.1.6, Ensemble 2018.1.6 e HSAP 2018.1.6
  • InterSystems IRIS 2020.1.2, IRIS for Health 2020.1.2 e HealthShare Health Connect 2020.1.2
  • InterSystems IRIS 2021.1.1, IRIS for Health 2021.1.1 e HealthShare Health Connect 2021.1.1

 

Os kits de instalação e contêineres podem ser baixados do site de Distribuição de Soluções do WRC. As imagens de contêineres para as Edições Enterprise do InterSystems IRIS e do IRIS for Health, assim como todos os componentes correspondentes estão disponíveis a partir do InterSystems Container Registry.

0
0 153
Artigo Fernando Ferreira · Mar. 3, 2022 5m read

Continuação:
Migrando para InterSystems IRIS – Parte 02 – Trocando de sistema operacional e de hardware.

Olá, comunidade! Nesta continuação da segunda parte do artigo vamos apresentar dicas do processo de migração do InterSystems Caché e ou Ensemble para IRIS com um desafio um pouco maior, pois agora vamos trocar de máquina e sistema operacional.

Como comentado na 1ª parte do artigo, a ideia é passar dicas e não substituir os documentos oficiais que estão disponíveis no WRC, que são eles:

  • InterSystems IRIS Adoption Guide;
  • How to migrate to InterSystems IRIS.

Cenário atual:

0
0 276
Pergunta Luiz Henrique Carvalho Martarelli · Fev. 17, 2022

Boa Noite / Tarde / Dia

Estou tendo o trabalho para recuperar os dados (JSON) de campos de uma tabela no formato %Stream.GlobalCharacter, porem quando eu tento ler ele dentro do cache (ObjectScript) estou encontrando dificuldades. Estou recuperando as informações da tabela usando %SQL.Statement e quando eu tento acessar a informação geralmente vem: 2%Stream.GlobalCharacter^traducao.xYCONTIGENCIAWMSS

segue uma estrutura de como estou tentando recuperar esse dado:

3
0 209
Artigo Fernando Ferreira · Fev. 3, 2022 5m read

Migrando para InterSystems IRIS – Parte 02 (Instância única de Caché/Ensemble para IRIS)

Olá, comunidade, nessa segunda parte do artigo vou dar dicas do processo de migração de uma instância única de InterSystems Caché e ou Ensemble para IRIS.

Como comentado na 1ª parte do artigo, a ideia é passar dicas e não substituir os documentos oficiais que estão disponíveis no WRC, que são eles:

  • InterSystems IRIS Adoption Guide;
  • How to migrate to InterSystems IRIS.

Vamos então agora colocar a mão na massa!

O sistema operacional que estou usando como exemplo, é uma instalação em um ambiente Ubuntu:

0
1 412
Artigo Fernando Ferreira · jan 26, 2022 4m read

Olá, comunidade, este artigo tem como o objetivo dar discas à clientes e parceiros que estão migrando ou tem planos de migrar as atuais aplicações que estão em InterSystems Caché e InterSystems Ensemble para a plataforma de dados Intersystems IRIS.

Não tenho intensão de substituir os documentos oficiais que se encontram disponíveis no WRC, inclusive vou fazer várias menções aos documentos oficiais e recomendo fortemente a leitura deles.

0
3 331
InterSystems Oficial Angelo Bruno Braga · Dez. 14, 2021

13 de Dezembro de 2021 - Alerta: Vulnerabilidade na biblioteca Log4j2 da Apache e Impacto nos Produtos InterSystems

A InterSystems esta investigando no momento o impacto da vulnerabilidade reacionada ao Apache Log4j2.

A vulnerabilidade — impactando o Apache Log4j2 (versões 2.0 até 2.14.1) — foi recentemente anunciada pela Apache e está reportada na Base de Dados Nacional de Vulnerabilidade dos Estados Unidos (United States National Vulnerability Database (NVD)) como CVE-2021-44228 possuindo a maior classificação de severidade, 10.0.

0
0 143
Artigo Eduard Lebedyuk · Nov. 22, 2021 8m read

Todo mundo tem um ambiente de teste.

Algumas pessoas têm a sorte de ter um ambiente totalmente separado para executar a produção.

-- Desconhecido

.

Nesta série de artigos, gostaria de apresentar e discutir várias abordagens possíveis para o desenvolvimento de software com as tecnologias InterSystems e GitLab. Vou cobrir tópicos como:

  • Git Básico
  • Fluxo Git (processo de desenvolvimento)
  • Instalação do GitLab
  • Fluxo de Trabalho do GitLab
  • GitLab CI/CD
  • CI/CD com contêineres

Esta primeira parte trata do pilar do desenvolvimento de software moderno - sistema de controle de versão Git e vários fluxos Git.

Git Básico

Embora o tópico principal que iremos discutir seja o desenvolvimento de software em geral e como o GitLab pode nos capacitar nesse esforço, o Git, ou melhor, os vários conceitos de alto nível subjacentes no design do Git, são importantes para o melhor entendimento de conceitos posteriores.

Dito isso, o Git é um sistema de controle de versão, baseado nessas ideias (existem muitas outras, essas são as mais importantes):

  • Desenvolvimento não linear significa que enquanto nosso software é lançado consequentemente da versão 1 para a 2 para a 3, sob a mesa a mudança da versão 1 para a 2 é feita em paralelo - vários desenvolvedores desenvolvem uma série de recursos/correções de bugs simultaneamente.
  • Desenvolvimento distribuído significa que o desenvolvedor é independente de um servidor central ou de outros desenvolvedores e pode desenvolver facilmente em seu próprio ambiente.
  • Fusão - as duas ideias anteriores nos levam à situação em que muitas versões diferentes da verdade existem simultaneamente e precisamos uni-las de volta em um estado completo.

Agora, não estou dizendo que Git inventou esses conceitos. Não. Em vez disso, o Git os tornou fáceis e populares e isso, juntamente com várias inovações relacionadas, ou seja,  infraestrutura como código/conteinerização mudou o desenvolvimento de software.

Termos básicos do Git

Repositório é um projeto que armazena dados e metainformações sobre os dados.

  • O repositório "físico" é um diretório em um disco.
  • O repositório armazena arquivos e diretórios.
  • O repositório também armazena um histórico completo de alterações para cada arquivo.

O repositório pode ser armazenado:

  • Localmente, em seu próprio computador
  • Remotamente em um servidor remoto

Mas não há nenhuma diferença particular entre repositórios locais e remotos do ponto de vista do git.

Commit é um estado fixo do repositório. Obviamente, se cada commit armazenasse o estado completo do repositório, nosso repositório cresceria muito rapidamente. É por isso que um commit armazena um diff que é uma diferença entre o commit atual e seu commit pai.

Commits diferentes podem ter um número diferente de pais:

  • 0 - o primeiro commit no repositório não tem pais.
  • 1 - conforme o habitual - nosso commit mudou algo no repositório como era durante o commit pai
  • 2 - quando temos dois estados diferentes do repositório, podemos uni-los em um novo estado. E esse estado e esse commit teriam 2 pais.
  • 2 - pode acontecer quando unimos mais de 2 estados diferentes do repositório em um novo estado. Não seria particularmente relevante para nossa discussão, mas existe.

Agora, para um pai, cada commit diferente é chamado de commit filho. Cada commit pai pode ter qualquer número de commits filhos.

Branch é uma referência (ou ponteiro) para um commit.  Veja como funciona:

Nesta imagem, podemos ver o repositório com dois commits (círculos cinza), o segundo é o head do branch master. Depois de adicionar mais commits, nosso repositório começa a ficar assim:

Esse é o caso mais simples. Um desenvolvedor trabalha em uma mudança de cada vez. No entanto, normalmente, existem muitos desenvolvedores trabalhando simultaneamente em diferentes recursos e precisamos de uma árvore de commit para mostrar o que está acontecendo em nosso repositório.

Árvore de commit

Vamos começar do mesmo ponto de partida. Aqui está o repositório com dois commits:

Mas agora, dois desenvolvedores estão trabalhando ao mesmo tempo e para não interferir um no outro, eles trabalham em branches separados:

Depois de um tempo, eles precisam unir as alterações feitas e para isso eles criam uma solicitação de mesclagem (merge) (também chamada de pull request) - que é exatamente o que parece - é uma solicitação para unir dois estados diferentes do repositório (no nosso caso, queremos mesclar o develop branch no master branch) em um novo estado. Depois de ser devidamente revisado e aprovado, nosso repositório fica assim:

E o desenvolvimento continua:

Resumo - Git Básico

Conceitos principais:

  • Git é um sistema de controle de versão distribuído não linear.
  • Repositório armazena dados e metainformações sobre os dados.
  • Commit é um estado fixo do repositório.
  • Branch é uma referência para um commit. 
  • Solicitação de mesclagem (também chamada de pull request) - é uma solicitação para unir dois estados diferentes do repositório em um novo estado.

Se você quiser ler mais sobre o Git, existem livros disponíveis.

Fluxos Git

Agora que o leitor está familiarizado com os termos e conceitos básicos do Git, vamos falar sobre como a parte do desenvolvimento do ciclo de vida do software pode ser gerenciada usando o Git.  Existem várias práticas (chamadas  de fluxos) que descrevem o processo de desenvolvimento usando Git, mas vamos falar sobre duas delas:

  • Fluxo do GitHub
  • Fluxo do GitLab

Fluxo do GitHub

O fluxo do GitHub é tão fácil quanto parece. Aqui está:

  1. Crie um branch (ramificação) do repositório.
  2. Commit suas alterações para seu novo branch
  3. Envie um pull request do seu branch com as alterações propostas para iniciar uma discussão.
  4. Commit mais alterações em seu branch conforme necessário. Seu pull request será atualizado automaticamente.
  5. Mescle o pull request assim que o branch estiver pronto para ser mesclado.

E existem várias regras que devemos seguir:

  • master branch é sempre implantável (e funcionando!)

  • Não há desenvolvimento indo diretamente para o master branch

  • O desenvolvimento está acontecendo nos branches de recursos

  • master == ambiente** de produção*

  • Você precisa implantar na produção o mais rápido possível

    • Não confunda com "Produções Ensemble", aqui "Produção" significa SISTEMA EM PRODUÇÃO.

** Ambiente é um local configurado onde seu código é executado - pode ser um servidor, uma VM, até mesmo um contêiner.

Veja como funciona:

Você pode ler mais sobre o fluxo do GitHub aqui. Também há um guia ilustrado.

O fluxo do GitHub é bom para pequenos projetos e para testes se você está começando com os fluxos do Git. No entanto, o GitHub o usa, portanto, também pode ser viável em projetos grandes.

Fluxo do GitLab

Se você não estiver pronto para implantar na produção imediatamente, o fluxo do GitLab oferece um fluxo do GitHub + ambientes. É assim que funciona - você desenvolve em branches de recursos, como acima, mescla (merge) no master, como acima, mas aqui está uma diferença: o master é igual apenas no ambiente de teste. Além disso, você tem "Branches de ambiente" que estão vinculados a vários outros ambientes que você possa ter.

Normalmente, existem três ambientes (você pode criar mais se precisar):

  • Ambiente de teste == master branch
  • Ambiente de pré-produção == preprod branch
  • Ambiente de produção == prod branch

O código que chega em um dos branches do ambiente deve ser movido para o ambiente correspondente imediatamente, isso pode ser feito:

  • Automaticamente (cobriremos isso nas partes 2 e 3)
  • Parcialmente automático (igual ao automaticamente, exceto que um botão que autoriza a implantação deve ser pressionado)
  • Manualmente

Todo o processo é assim:

  1. O recurso é desenvolvido no branch de recursos.
  2. O branch de recurso é revisado e mesclado no master branch.
  3. Depois de um tempo (vários recursos mesclados), o master é mesclado com o preprod
  4. Depois de um tempo (teste do usuário, etc.), o preprod é mesclado com o prod  
  5. Enquanto estávamos mesclando e testando, vários novos recursos foram desenvolvidos e mesclados no master, então vá para parte 3.

Veja como funciona:

Você pode ler mais sobre o fluxo do GitLab aqui.

Conclusão

  • Git ****é um sistema de controle de versão distribuído não linear.
  • O fluxo Git pode ser usado como uma diretriz para o ciclo de desenvolvimento de software; existem vários que você pode escolher.

Links

Questões para discussão

  • Você usa um fluxo git? Qual?
  • Quantos ambientes você tem para um projeto padrão?

O que vem a seguir

Na próxima parte, iremos:

  • Instalar o GitLab.
  • Falar sobre alguns ajustes recomendados.
  • Discutir o fluxo de trabalho do GitLab (não deve ser confundido com o fluxo do GitLab).

Fique ligado.

0
0 311
InterSystems Oficial Pete Greskoff · Nov. 22, 2021

19 de Novembro de 2021 - Aviso: Servidor Web Apache fornecido com os kits InterSystems – Relatórios de Vulnerabilidade

Os kits InterSystems incluem um servidor web Apache que permite aos cliente uma forma conveniente de interação com o Portal de Administração do Caché/IRIS sem a necessidade de se instalar um servidor web externo; entretanto este servidor web nunca deve ser utilizado em instâncias de produção, e clientes devem instalar um servidor web que atendam a suas necessidades específicas e requisitos de segurança/risco.

0
0 118
Artigo Larissa Prussak · Out. 26, 2021 2m read

As tecnologias da InterSystems são conhecidas por seus bancos de dados de alto desempenho, que suportam os sistemas e operações de muitas organizações. No entanto, um ingrediente chave para esse sucesso é a qualidade e a facilidade de manutenção de seu código.

A qualidade do código pode afetar tudo, desde a velocidade e facilidade de corrigir bugs e fazer melhorias, até o desempenho geral de sua organização e sua capacidade de chegar à frente no mercado.

Ao garantir que seu código seja sustentável, você pode reduzir aproximadamente 75% dos custos do ciclo de vida do sistema *. É por isso que, na George James Software, as soluções que construímos são sempre diretas e escritas em código de alta qualidade - porque sabemos que essa base sólida pode impactar positivamente o resto da sua organização.

Com um sistema que pode ser mantido, você pode reduzir a manutenção geral, pois qualquer problema que ocorra é significativamente mais rápido de identificar e corrigir. Isso significa que você está livre para alocar tempo e orçamento para melhorias, permitindo que você obtenha o máximo valor de suas aplicações e, em última análise, dê um melhor suporte à sua organização.

Fique atento às nossas próximas postagens sobre como é um sistema sustentável e as ferramentas que podem ajudá-lo a manter seu código sustentável, a fim de ajudá-lo a reduzir esses custos de manutenção.

0
0 78
Artigo Larissa Prussak · Out. 20, 2021 1m read

A versão mais recente do Serenji se concentra na experiência de depuração. Agora você não só pode depurar no local, não importa onde esteja ou o que estiver fazendo, mas também adicionamos alguns recursos menores que tornarão a depuração mais direta.

  • Executar e depurar CodeLenses - links clicáveis ​​acima de cada método de classe, procedimento, sub-rotina ou função extrínseca.
  • Solicitação intuitiva de pontos de entrada e argumentos - ao depurar um método de classe, produzir, sub-rotina ou função extrínseca.
  • Plano de fundo sombreado somente leitura - para diferenciar claramente entre documentos editáveis ​​e somente leitura.
  • Saída do programa no console de depuração - a saída é mostrada no console de depuração.
  • Comandos do Serenji nas árvores de namespace do Server Manager - permitindo que você inicie o Serenji por meio do Server Manager.

Saiba mais em nossas notas de lançamento aqui

0
0 122
Artigo Larissa Prussak · Out. 8, 2021 1m read

Olá desenvolvedores! 

Incorporamos o suporte do VS Code para várias sessões de depuração simultâneas e consoles na versão mais recente do Serenji

Portanto, se você estiver trabalhando com processos que se relacionam ou dependem uns dos outros, agora você pode depurá-los juntos. Basta iniciar uma segunda sessão de depuração do Serenji (F5) enquanto a primeira ainda está ativa

Este pequeno vídeo abaixo mostra como funciona. Esperamos que você ache este recurso útil!

Laurel 

https://www.youtube.com/watch?v=cs6UiAvUj24

0
0 146
Artigo Larissa Prussak · Out. 5, 2021 1m read

O lançamento mais recente do Serenji apresenta nossa inovadora tecnologia gj :: locate. Era uma ferramenta autônoma que criamos originalmente para um concurso da Comunidade de Desenvolvedores no início deste ano, mas nós a incorporamos em nosso depurador após alguns ótimos comentários dos desenvolvedores.

Ele funciona navegando diretamente para a fonte de seus erros do lado do servidor em apenas alguns cliques - permitindo que você corrija os erros rapidamente sem a necessidade de contar linhas tediosas de código ... e sejamos realistas, quem tem tempo para que quando você está sob pressão para consertar esse bug?

É simples e fácil de usar:

1. Clique no painel gj :: locate na barra de status

2. Insira a mensagem de erro do ObjectScript ou a referência de linha de uma rotina class / .mac.

3. gj :: locate então faz o trabalho para você, levando-o diretamente para a linha correspondente em seu código-fonte.

Muito fácil ... e com tempo de sobra para fazer um café antes do prazo!

Abaixo há um link do vídeo que mostra isso em ação - diga-nos se você já tentou. Ou, se você estiver interessado em experimentá-lo, oferecemos uma licença de avaliação gratuita de 30 dias, apenas me mande uma mensagem através da Comunidade de Desenvolvedores ou envie um e-mail para info@georgejames.com.

Serenji 3.2.0 utilising gj::locate technology

0
0 149
Artigo Angelo Bruno Braga · Out. 1, 2021 2m read

Olá Comunidade!

Quero apresentar a você um novo recurso poderoso do objectscriptQuality, nosso analisador de código estático. 

Cada vez que uma nova versão do IRIS é lançada, você precisa preparar um roadmap para a migração, gastando muito tempo em testes para descobrir onde o seu código não funciona com a versão mais recente. Ou, talvez, você precise que o seu código seja compatível com várias versões do IRIS ou Caché.

Agora você pode simplificar a tarefa executando a análise para diferentes versões do banco de dados IRIS e Caché, obtendo o código com falhas antes de iniciar o teste.

O objectscriptQuality permite-lhe selecionar a versão do banco de dados para a análise para que você possa encontrar os seguintes problemas, entre outros:

  • Classe não encontrada
  • Método não encontrado
  • Método usa muitas variáveis
  • Método com argumentos inesperados
  • Argumento(s) ausente(s) na chamada de método
  • Propriedade não encontrada

Defina a sua versão de banco de dados em sua chamada de análise

Ao invocar sua análise a partir da linha de comando (ou de seu servidor CI, como Jenkins), você pode incluir o seguinte parâmetro para definir a versão do banco de dados que deseja usar:

-Dsonar.objectscript.codeVersion=2020.1

Defina a sua versão padrão de banco de dados no SonarQube

Se todos os seus projetos ou a maioria deles estão usando a mesma versão de banco de dados, você pode configurá-la como padrão.

Para isso, no menu principal, selecione Administration. Em seguida, na aba Objectscript Code Quality and Security, selecione a versão do código que você deseja testar por padrão:

Artigo completo

Seu código está pronto para uma versão de banco de dados diferente?

0
0 125
Pergunta Davidson Espindola · Set. 15, 2021

Hello everyone
I use cache script, I would like to know from you if there is any function or class in the cache where I can get the start and end date of a given month:
Example: What is the first and last day of the month of February 2015.

Grateful.
Davidson

3
0 161
Pergunta Gilmar Silveira · Set. 13, 2021

tem este wsdl

https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/Aten…

<xs:element name="consultaCEP" type="tns:consultaCEP"/>

tem um method  consultaCEP

quero passar um Cep e receber o retorno

<script language=cache runat=server>
       // instancia a classe cliente SOAP
               Set cliente=##class(AtendeClienteService.AtendeClientePort).%New()
               set cep="",cep="88133150"
               set resp=cliente.consultaCEP(cep)
              resp              
             
</script>

Alguém no grupo já conseguiu fazer isso

teria como ajudar

0
0 110