Pesquisar

Limpar filtro
Artigo
Danusa Calixto · Mar. 27, 2023

Obtendo a lista de rotinas programaticamente

InterSystems FAQ Você pode recuperar datas e tamanhos de rotina programaticamente usando a consulta RoutineList da classe %Library.Routine (ou apenas %Routine). A consulta RoutineList tem um argumento e o nome da rotina a ser pesquisado pode ser especificado por correspondência de prefixo ou correspondência intermediária. (Para curingas, especifique * ou ?) No exemplo a seguir. *.MAC é especificada como argumento. SET tStatement = ##class(%SQL.Statement).%New() DO tStatement.%PrepareClassQuery("%Routine" , "RoutineList") SET rs = tStatement.%Execute("*.MAC",,0) DO rs.%Display() Além da lista de rotinas, você também pode obter a lista de definições de classe.
Artigo
Henrique Dias · Jun. 10, 2023

Revendo 20 anos

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. A evolução da plataforma é algo notável e sempre trouxe mais robustez, flexibilidade e estabilidade para nós desenvolvedores. Sempre fui apaixonado pela facilidade de desenvolver um sistema com a plataforma InterSystems e como conseguia obter excelentes resultados em performance e velocidade de implementação com uma tecnologia que poucas pessoas conheciam. Agora em 2023, no "meu aniversário" de 20 anos trabalhando com tecnologia, a InterSystems completa 45 anos! E quando vejo como a InterSystems evoluiu e onde ela está agora, fico muito feliz de ter conseguido vivenciar e experimentar a evolução dessa tecnologia. Mas, em contrapartida, são 45 anos e já encontrei muita gente utilizando a tecnologia da mesma forma que se desenvolvia sistemas, utilizava o banco de dados como a 45, 40 anos atrás! Não evoluíram o desenvolvimento ao longo dos anos, continuavam/continuam desenvolvendo como na época do meu saudoso Caché 4 ou até mesmo antes disso. Então, sempre que ouviam falar de Caché, torciam o nariz e menosprezam o sistema. Mesmo sendo o sistema com maior estabilidade, velocidade e escalabilidade nas empresas. E para eles, o Caché/MUMPS que era um sucesso no passado, passou a ser muito mal visto. E até me lembra um trecho do filme do Batman Dark Knight: "You Either Die a Hero, or You Live Long Enough To See Yourself Become the Villain" Eu costumo dizer que nessas empresas eles tem uma Ferrari nas mãos, mas só sabem andar de 1a e 2a marcha hehehe E isso me traz para um segundo ponto. A falta de conhecimento fez com que esses desenvolvimentos ficassem parados no tempo. Fez com que uma tecnologia que vem sendo evoluida continuamente não fosse aproveitada em seu potencial máximo. E o mais agravante, como você consegue ter uma equipe especializada em uma tecnologia que não é muito conhecida? Quantos estagiários saem da faculdade conhecendo de InterSystems IRIS, sabendo o que é uma global, entendendo como fazer uma integração no Ensemble? Para que você possa trocar a marcha da sua Ferrari, é preciso focar na capacitação do seu time, é preciso fomentar e formar novos talentos e ensinar sobre a arquitetura do seu sistema. E trago aqui um reforço na importância que é a capacitação da sua equipe. Um estudo do Google aponta exatamente a falta de mão de obra qualificada na área de TIGoogle for Startups: para 92% das empresas entrantes faltam profissionais de TI no Brasil É formando pessoas capacitadas que você consegue evoluir sua equipe, seu produto. Seria ingenuidade da nossa parte pensar em substituir sistemas que veem sendo desenvolvidos ao longo de anos. A evolução do sistema, uma melhoria gradual e continua é muito mais aconselhavel do que um "RIP and Replace". Por esses motivos que o "onboarding" de novos desenvolvedores é fundamental. Entender o conceito por trás do Caché/IRIS e conseguir fazer com que a curva de aprendizado seja a menor possível. Sendo assim, eu (Henrique), prefiro ensinar o básico antes de sair ensinando as maiores novidades da plataforma. Com isso sempre em mente, fiz a iniciação ao mundo InterSystems de muitos filhos estagiários, que se tornaram profissionais excelentes, sem nunca sequer ter ouvido falar de InterSystems ou o que era uma global na faculdade 😂 Para essa "iniciação", quero destacar alguns conceitos e funções básicas que serão muito úteis no dia a dia. Introdução as Globais segundo a documentação oficial: InterSystems IRIS suporta um tipo especial de variável que não é vista em outras linguagens de programação; esta é a variável global, que geralmente é simplesmente chamada de global. No InterSystems IRIS, o termo global indica que esses dados estão disponíveis para todos os processos que acessam este banco de dados. Este uso é diferente de outras linguagens de programação nas quais global significa "disponível para todo o código neste módulo". O conteúdo de um global é armazenado em um banco de dados InterSystems IRIS. No InterSystems IRIS, um banco de dados contém globais e nada mais; até mesmo o código é armazenado em globais. No nível mais baixo, todo acesso a dados é feito através de acesso global direto — isto é, usando comandos e funções que trabalham diretamente com globais. Tentando facilitar o entendimento para quem veem de uma estrutura mais "relacional", podemos dizer que global seria o equivalente a uma tabela. E na representação abaixo, estamos definindo o nome de um cliente na "tabela" hero set ^hero(1)="Tony Stark~Armor~29/05/1970" set ^hero(2)="Steve Rogers~Shield~04/07/1920" Se compararmos a estrutura da global acima com uma tabela relacional, esta seria o que o seu "SELECT * FROM hero" retornaria No exemplo da global acima, ^hero é uma global, enquanto 1 e 2 são subscritos que especificam entradas individuais nessa global. Aqui, ^hero(1) se refere a "Tony Stark" e ^hero(2) a "Steve Rogers". As globais podem também ter múltiplos níveis de subscritos, como mostrado no exemplo a seguir: set ^hero(1,"codename")="Iron Man" set ^hero(1,"power")="flight" set ^hero(2,"codename")="Captain America" set ^hero(2,"power")="superStrength" Neste exemplo, conseguimos ver que cada hero tem seu codename em um subscrito relacionado. A estrutura flexivel das globais, pode até mesmo ser descrita como o JSON a seguir [ { "id": 1, "codename": "Iron Man", "power": "flight" }, { "id": 2, "codename": "Captain America", "power": "superStrength" } ] Índices no InterSystems IRIS Índices são estruturas de dados que permitem acesso rápido a informações específicas em um global. Em bancos de dados relacionais, um índice é criado em uma coluna de uma tabela para acelerar consultas que envolvem essa coluna. No IRIS, um índice é uma estrutura de dados criada em um global. Veja um exemplo de como um índice pode ser definido: set ^heroIdx("power","flight",1)="" set ^heroIdx("power","superStrength",2)="" Aqui, ^heroIdx é um índice que permite que você encontre rapidamente todos os heroes com um determinado poder. Para completar esse InterSystems IRIS express overview, trago uma lista de funções úteis para lidar com a maravilhosa estrutura multidimensional. Funções de String: O ObjectScript tem várias funções para manipulação de strings, incluindo: $GET(variable,[defaultValue]): Se a variável ou a localização do array especificada existir, $GET retornará seu valor. Se não existir, $GET retornará um valor padrão, se fornecido, ou uma string vazia. $LENGTH(string,[delimiter]): Retorna o número de caracteres em uma string, ou o número de substrings delimitadas. $EXTRACT(string,start,[end]): Retorna uma substring de uma string. $PIECE(string,delimiter,[start,[end]]): Retorna uma substring de uma string dividida por um delimitador. Funções de Data e Hora: ObjectScript fornece funções para manipulação de datas e horas, incluindo: $HOROLOG: Retorna a data e a hora atuais como um valor $H. Curiosidade: A função $HOROLOG retorna a data e a hora atual no formato $HOROLOG. O formato $HOROLOG é uma representação numérica do tempo na seguinte forma: dias,segundos, onde dias é o número de dias desde 31 de dezembro de 1840, e segundos é o número de segundos desde a meia-noite do dia atual. Por exemplo, $HOROLOG pode retornar 63940,71700, o que representaria a data e a hora no momento da execução da função. $ZDATETIMEH(datetime): Converte uma data e hora do formato $H para o formato ODBC. $ZDATEH(date): Converte uma data do formato $H para o formato ODBC. Funções de Manipulação de Globais: ObjectScript tem várias funções para trabalhar com globais, como: SET ^global(subscript)=value: Define o valor de um global. KILL ^global(subscript): Remove um global ou uma parte de um global. $DATA(^global(subscript)): Verifica a existência de um global e se ele tem algum valor. Funções de Manipulação de Listas: As funções de lista incluem: $LISTBUILD(element1,[element2,...]): Cria uma lista de elementos. $LISTLENGTH(list): Retorna o número de elementos em uma lista. $LISTGET(list,index): Retorna o valor de um elemento em uma posição específica em uma lista. Se você chegou até aqui e ficou se perguntando que tipo de casos de uso, InterSystems IRIS pode ajudar a resolver no seu projeto, sistema, empresa, eu digo para você que todos. A arquitetura que podemos usar com globais faz com que a forma de encarar determinadas situações possam ser simplificadas, aumentando performance, reduzindo tempo de desenvolvimento. Como nessa questão trazida pelo meu amigo Henry. https://community.intersystems.com/post/hierarchical-queries A solução proposta pelo Timothy é elegante Class DC.Demo.Hierarchy Extends %Persistent [ MemberSuper = AppS.Index.Methods ] { Property message As %String; Property login As %String; Property parentId As DC.Demo.Hierarchy [ SqlFieldName = parent_id ]; Index parentId On parentId [ Type = bitmap ]; ClassMethod RunDemo() { Do ..%KillExtent() &sql(insert into DC_Demo.Hierarchy (message, login, parent_id) values ('Bacon ipsum dolor amet pork shoulder ribs', 'User 1', null)) &sql(insert into DC_Demo.Hierarchy (message, login, parent_id) values ('BGouda croque monsieur emmental.', 'User 2', 1)) &sql(insert into DC_Demo.Hierarchy (message, login, parent_id) values ('Manchego fromage frais airedale', 'User 3', 2)) Do ##class(%SQL.Statement).%ExecDirect(, "select id, message, parent_id from DC_Demo.Hierarchy "_ "where id %FIND DC_Demo.Hierarchy_parentIdFind(2,'all descendants')").%Display() Do ##class(%SQL.Statement).%ExecDirect(, "select id, message, parent_id from DC_Demo.Hierarchy "_ "where id %FIND DC_Demo.Hierarchy_parentIdFind(3,'all related')").%Display() } } No entanto, caso estivessemos olhando para um modo de desenvolvimento com globais ao invés da estrutura mais relacional, nosso resultado mais simples. ^messages(idMensagem) = "Bacon ipsum dolor amet pork shoulder ribs" ^messages(idMensagem,idParent) = "Gouda croque monsieur emmental." ^messages(idMensagem,idParent) = "Manchego fromage frais airedale" Com isso, conseguiriamos recuperar facilmente os itens ordenando pela ordem do "parent id". Simples e eficaz. Nesses 45 anos, conseguimos muitas melhorias, uma evolução constante em arquitetura, performance, features e muito mais. E nessa linha evolutiva constante, temos também a possibilidade de utilizar agora diferentes linguagens e não apenas ObjectScript. Embedded Language Development Você pode agora usar diferentes linguagens e trabalhar com a plataforma InterSystems, seja utilizando Python, .Net, Noje.js, ou até mesmo Java (tem gosto para tudo 😂) E para encerrar deixo aqui dessa flexibilidade com um exemplo de Embedded Python. Embedded Python Class User.EmbeddedPython { /// Description ClassMethod Test() As %Status [ Language = python ] { # print the members of the Fibonacci series that are less than 10 print('Fibonacci series:') a, b = 0, 1 while a < 10: print(a, end=' ') a, b = b, a + b # import the iris module and show the classes in this namespace import iris print('\nInterSystems IRIS classes in this namespace:') status = iris.cls('%SYSTEM.OBJ').ShowClasses() return status } } Se você não morreu de tédio lendo esse texto, te convido para dar um like no artigo e mandar esse texto para os seus estagiários, ou mesmo para aqueles que ainda usam a plataforma como há 40 anos atrás 😂 Parabéns Henrique pela postagem! Sempre temos o desafio de explicar a tecnologia, principalmente em projetos integrados com outras linguagens onde enxergam o IRIS como uma tecnologia "alienígena"! Esse é um ótimo post para usar como apresentação! Excelente artigo Henrique, parabéns!!! Realmente o IRIS é uma tecnologia extremamente potente e pouco aproveitada. Só acho que a Intersystems poderia divulgar mais a tecnologia com cursos mais acessíveis nas empresas, escolas técnicas, universidades. @Felipe.Carvalho muito obrigado! 😃 Acho que todos nós que trabalhamos com tecnologia InterSystems temos esse desafio. Mostrar que não é um bicho de 7 cabeças, que não tem nada de alienígena numa global e que um $order não mata ninguém hahaha E acho que o maior desafio de todos é provar que diferente do COBOL, a plataforma veio continuamente evoluindo Oi @VeraLucia.AlvesdeOliveira concordo plenamente. Tenho esse mesmo sentimento. É uma excelente tecnologia, mas sinto muita falta dessa tecnologia não ser amplamente divulgada e difundida. Quem sabe a gente não monta um curso no TikTok para atrair o público mais jovem? kkkkkk
Anúncio
Danusa Calixto · Jul. 4, 2022

As palestras do Global Summit 2022 estão disponíveis!

Olá, pessoal! O Global Summit 2022 em Seattle terminou há pouco mais de uma semana, mas as palestras já estão disponíveis para aqueles que perderam enquanto estavam no local ou que não puderam participar deste evento presencial por algum motivo ou outro (ou apenas para aqueles que desejam refrescar a memória e ouvi-los novamente). Sem mais delongas, o início do Global Summit também conhecido como Saudações da Comunidade: Divirta-se assistindo todas as palestras dos três dias do Global Summit 2022 através dessa playlist do YouTube: ➡️ Global Summit 2022 on InterSystems Developers YouTube E junte-se a nós no próximo em Hollywood, Florida! 🤩 Details.
Anúncio
Benjamin De Boe · Out. 27, 2020

iKnow, nossa biblioteca de NLP de código aberto em Python chega a versão 1.0!

Esta é uma tradução do anúncio original. A primeira versão completa de nossa biblioteca de código aberto para NLP (processamento de linguagem natural), o iKnow, está disponível agora no GitHub e PyPI! Este processador de linguagem natural esteve disponível como uma tecnologia embarcada InterSystems por aproximadamente 10 anos e a sua biblioteca foi publicada como código aberto no início deste ano.. Agora, juntamente com as outras novidades apresentadas no Virtual Summit 2020, estamos orgulhosos de anunciar a disponibilização da v1.0, que adiciona acesso total via Python ao mecanismo principal, documentações e exemplos sobre os conteúdos dos modelos de linguagem e um bloco de notas Jupyter de demonstração para ser utilizado como um ponto de partida. A tecnologia continua a estar disponível como parte da plataforma de dados IRIS para uso embarcado com o nome de InterSystems IRIS NLP e está incluída em todos seus tipos de licenciamento. Kudos para todo o time que nos fez alcançar este nível de excelência tanto na versão de código aberto quanto na embarcada na plataforma! Para baixar e instalar o iKnow, tudo que você precisa fazer é executar pip install iknowpy e então você já estará pronto para indexar !!! Eu e @Aohan.Dang os levaremos através do "COMO" e "O PORQUÊ" da biblioteca durante a Sessão de Foco do Virtual Summit 2020 que acontecerá dia 27 de Outubro às 13:15 (horário de brasília) , se você estiver totalmente impaciente, pode dar uma olhada em nossa demo na Demo Zone:
Anúncio
Cristiane Ferreira Mello · Fev. 11, 2022

Analista Corporativo Tecnologia Informação Sênior

Vaga para atuar na Rede Santa Catarina Atribuições: Atuar como Desenvolvedor de Integrações entre Sistemas, realizando implementação de novas integrações, manutenção, correções de defeitos, testes, documentação, reuniões com equipes da instituição (áreas de TI e demais Setores) e fornecedores; Suporte a integrações desenvolvidas nos sistemas SOULMV E ENSEMBLE; Atuar na manutenção, implantação e configuração dos módulos do sistema de gestão hospitalar, através de testes em ambiente de homologação para continuidade do negócio; Fornecer suporte e acompanhamento das dificuldades operacionais que venham ocorrer nos diversos sistemas da instituição, para evitar retrabalho. Requisitos/Conhecimentos Imprescindíveis: Ensino Superior Completo em T. I. ou áreas afins. Desejável Especialização e/ou Pós-Graduação em área correlata. Desejáveis certificações na Área de TI; Habilidades de análise e desenvolvimento de softwares; Habilidades de Desenvolvimento baseado em especificações funcional e técnica; Tecnologias da plataforma Intersystems; Experiência com desenvolvimento Ensemble / HealthConnect; Experiência de Programação em Intersystems COS (Cache Object Script); Experiência com Banco de Dados Oracle; Conhecimento em SQL Oracle; Conhecimento em PL/SQL Oracle; Modelagem de dados; Conhecimento de conceitos relativos a Barramento de Integrações; Comunicação com APIs; WebServices (Soap/Rest); Versionamento de Software com Git; Requisitos/Conhecimentos Desejáveis: Operação em SO Linux; Conhecimento em processos Hospitalares. Link Linkedin: https://www.linkedin.com/jobs/view/2912840887/
Anúncio
Evgeny Shvarov · Out. 22, 2021

Resultados do Bônus Tecnológico para o Concurso de Interoperabilidade 2021

Olá participantes! Nós divulgamos um os bônus tecnológicos para os projetos concorrentes no Concurso de Interoperabilidade InterSystems 2021! E aqui estão os projetos que receberam os bônus: Projeto BPL ou DTL Adaptador Customizado PEX Workflow Docker ZPM Demo Online Qualidade do Código Artigo na CD Vídeo no YouTube Bônus Total Nominal 3 2 4 2 2 2 3 2 2 3 25 ESKLP 3 3 6 CSV to M$-OFX 3 2 2 2 2 3 14 iris-crypto-tracker 3 4 2 9 LabResultsVerification-hl7 3 2 2 3 2 3 15 appmsw-telealerts 2 2 2 6 interoperability-for-money 3 2 2 7 IRIS Big Data SQL Adapter 4 2 2 4 3 13 IRIS Interoperability Message Viewer 2 2 3 2 2 3 14 Node-RED node for InterSystems IRIS 3 2 2 2 9 Os bônus são sujeitos alateração conforme melhorias ou requisições, no caso de esquecermos algo! Deixe por favor seus comentários nesta postagem ou no Discord. Boa sorte no Concurso !!!
Anúncio
Olga Zavrazhnova · Mar. 18, 2021

Global Masters: pontos em dobro para cada post e tradução na Comunidade de Desenvolvedores!

Olá Desenvolvedores! Nós dobramos o número de pontos ganhos para cada post ou tradução feita na Comunidade de Desenvolvedores. Valendo a partir de 18/03/21, você ganhará para cada artigo ou pergunta: ✅ 200 pontos na Comunidade de Desenvolvedores em Inglês✅ 400 pontos* nas Comunidades em Português / Espanhol / Chinês / Japonês e✅ 100 pontos para cada tradução! Além disso, vocês lembram que vocês ganham vários pontos para conjuntos de artigos / comentários ? Vejam a relação: 1° artigo 5 artigos 10 artigos 25 artigos 50 artigos 1.500 pontos 7.500 pontos 15.000 pontos 40.000 pontos 75.000 pontos 1ª pergunta 5 perguntas 10 perguntas 25 perguntas 50 perguntas 500 points 2.000 points 5.000 points 15.000 points 30.000 points Além disto vocês também estão ganhando distintivos para cada um destes marcos ! Neste artigo, você poderá encontrar todos os níveis e distintivos (coloque o cursor do mouse sobre o distintivo para verificar como obtê-lo). *Aumento de número de pontos para as Comunidades de Desenvolvedores em Português / Espanhol / Chinês e Japonês durante o período de lançamento. Informações adicionais sobre o Global Masters: Como se juntar ao InterSystems Global Masters Distintivos do Global Masters: descrição e regras para obtê-los Se você ainda não se juntou ao InterSystems Global Masters, esta é a hora! Sintam-se a vontade para tirarem suas dúvidas nos comentários deste post.
Anúncio
Angelo Bruno Braga · Mar. 10, 2022

Oportunidade para Bolsas de Estudo remuneradas no HC !

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: Graduação completa em Análise de Sistemas, Desenvolvimento de Sistemas, Ciências da Computação, Sistemas de Informação ou Engenharia da Computação, Elétrica, Biomédica, Informática, Estatística, Matemática, Física. Conhecimento em Lógica de programação orientada a objeto, Programação C#, geração de relatórios, SQL (select, insert, update, procedures, funções e views), banco de dados relacional (ORACLE e MS-SQL); geração de relatório (ireport, crystal report e afins), desenvol.de produtos para área de saúde digital; Diferenciais: Conhecimento em TASY / MV, InterSystems Ensemble / InterSystems Caché Técnico em informática ou sistemas da informação ou eletrônica é um diferencial. Atribuições: Desenvolvimento de sistemas em saúde digital para apoiar os projetos de conectividade 5G. Desenvolver e realizar a integração das soluções c/ os sistemas legados. Tipo de local de trabalho: híbrido (presencial e home office) Duração: até dezembro de 2023. Os candidatos interessados deverão enviar currículo e certificados de formação citados na divulgação da vaga desejada, até o dia 17/03/22, para o e-mail rhselecao@ffm.br, mencionando no assunto o código completo da vaga.
Artigo
Danusa Calixto · Out. 10, 2022

Primeira experiência de uso de um contêiner docker do IRIS for Health

Estou feliz em compartilhar com você minha primeira experiência usando uma versão de contêiner docker do IRIS for Health para explorar seu interesse em fazer um teste ou usar um contêiner docker leve e fácil de implantar. Este guia abordará as etapas de implementação usando o repositório GitHub chamado ENSDEMO, escrito por Renan Lourenco. Etapas para configurar um ambiente de contêiner docker do IRIS for Health Community Edition Docker em funcionamento Download da imagem do docker docker pull containers.intersystems.com/intersystems/irishealth-community:2022.2.0.304.0 Clone o repositório de fonte do GitHub git clone https://github.com/OneLastTry/irishealth-ensdemo Altere o diretório de arquivo para onde você clonou do Github. Crie uma imagem de contêiner a partir do arquivo docker-compose.yml docker-compose build Execute seu contêiner docker-compose up -d   Na minha tentativa inicial, não consegui baixar a versão exata do irishealth community:2022.2.0.304.0, porque havia mudado desde o lançamento inicial do ENSDEMO. A correção é extrair a tag disponível mais recente no registro ao tentar extrair a imagem do docker do InterSystems Container Registry. Outro erro que encontrei estava indicando "=>ERROR[internal] load metadata for docker pull containers.intersystems.com/intersystems/irishealth-community:2022.2.0.293.0" após a execução do comando docker-compose build. Isso ocorre porque há um conflito entre a versão da imagem do docker que transferi por download e a versão da imagem do contêiner especificada em Dockerfile.   Para fazer login no IRIS for Health: Portal de Gerenciamento: http://localhost:9092/csp/sys/%25CSP.Portal.Home.zen Nome de usuário: SuperUser * Senha: SYS * Porta do SuperServer: 9091 * Porta Web: 9092 * Namespace: ENSDEMO Inicie uma sessão de terminal do IRIS: docker exec -it ensdemo iris session iris Inicie uma sessão bash: docker exec -it ensdemo /bin/bash   Meu vídeo de implementação passo a passo: https://www.loom.com/share/36bd8c63db724eebae65debf0d89c821  Referências: https://github.com/OneLastTry/irishealth-ensdemo de Renan Lourenco (Renan.Lourenco@intersystems.com) https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACLOUD
Pergunta
Jose Lazarete · Set. 8, 2021

Licença portal IAM com prazo para expirar

Olá pessoal, tudo bem? Estou com uma mensagem de alerta no portal do IAM, informando que a licença está prestes a expirar em alguns dias. Acredito que essa licença não tem ligação com a licença do IRIS, já que a licença IRIS vencerá com outra data. Além da licença IRIS há a necessidade de adquirir uma licença junto ao Kong? - IAM versão: iam:2.3.3.2-1 Tudo bem José? A licença do IRIS possui um trecho onde está contida a licença do IAM, entretanto a validade é distinta da validade da licença do IRIS. Para solicitar uma nova licença do IRIS com a validade da licença do IAM atualizada você precisa entrar em contato com o Account Manager da InterSystems responsável. Abraço Tudo jóia Angelo. Grato pelo retorno e esclarecimentos.
Anúncio
Danusa Calixto · Abr. 9

Perguntas-Chave do Mês: Março de 2025

Olá Comunidade, É hora do novo lote de #Perguntas-Chave do mês anterior. Aqui estão as principais perguntas de março escolhidas pelos especialistas da InterSystems em todas as comunidades: 📌 Message Count por @Farman.Ullah2607 (EN) 📌 Walking a virtual document's structure por @Colin.Brough (EN) Essas perguntas serão destacadas com a tag #Pergunta Principal e seus autores receberão o emblema de Key Question no Global Masters. Se você achar a(s) pergunta(s)-chave de outras comunidades interessante(s), deixe-nos uma mensagem nos comentários e traduziremos a(s) pergunta(s) e a(s) resposta(s) aceita(s). Parabéns e obrigado a todos pelas perguntas interessantes. Continuem enviando! Vejo vocês no mês que vem 😉
Artigo
Cristiano Silva · Abr. 27, 2023

Recuperando Uma Global Excluída Acidentalmente

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: Filter Journal Records Using ^ZJRNFILT [IRIS]Filter Journal Records Using ^ZJRNFILT 【Exemplo】 - Existe um backup de 14/10/2020 (assumindo que o backup foi executado em 15/10/2020 00:30) Journal: 1 dia de 15/10/2020 existe (15/10/2020) Após o backup do dia14/10)・Global alvo: ^TEST1 A imagem está abaixo. Global ^TEST1 será preenchida a partir de 14/10.A global ^TEST1 foi excluída acidentalmente com uma instrução KILL às 15:30 do dia 15 de Outubro.Neste estágio, queremos restaurar a global ^TEST1 imediatamente antes do KILL.No exemplo, ^TEST1(1) a ^TEST1(100) são restaurados usando o journal da global criado pelos comandos abaixo. USER>for i=1:1:100 set ^TEST1(i)=$ZTIMESTAMPUSER>for i=1:1:100 set ^TEST2(i)=$ZTIMESTAMPUSER>kill ^TEST1 // ← Processando até aqui para recuperar usando o arquivo de journal para a global ^TEST1 [Procedimento de Restauração] Fazer backup/restauração ou copiar (montar) arquivos de banco de dados de backup (CACHE.DAT/IRIS.DAT) para outro sistema Copie os journals após a resturação do backup para outro sistema Identificar os registros do journal para o comando kill do último arquivo de journal Observação1: Visualizar os registros do journal no Portal de Administração ( Portal de Gerenciamento > [Operações do Sistemas] > [Arquivos de Journals] > clique no link [Exibir] para o arquivo específico) (Para o exemplo exibido, o deslocamento do registro do journal para o comando KILL é 9060180) Observação 2: Você também pode verificar os registros do journal usando a rotina do sistema SELECT^JRNDUMP. Restaure os arquivos de journal em ordem, apenas as globais a serem restauradas estão OK. Para o último arquivo use o utilitário ZJRNFILT Exporte a global recuperada, copie e importe para o sistema original Abaixo o código de exemplo da rotina ZJRNFILT utilizada no 5º passo(deve ser criada no namespace %SYS com o nome ZJRNFILT ). ZJRNFILT (pid,dir,glo,type,restmode,addr,time) set restmode =1 // If TEST1 is included in the global variable name // and the journal record is 9060180 or later, set restmode=0 (=do not restore) if ( glo [ "TEST1" ) & ( addr >=9060180) { set restmode =0 } quit Abaixo exemplo da restauração do último arquivo de journal usando ZJRNFILT (as entradas estão em letras azuis em negrito). %SYS>do ^JRNRESTO This utility uses the contents of journal files to bring globals up to date from a backup. Restore the Journal? Yes => Yes Use current journal filter (ZJRNFILT)? yes Use journal marker filter (MARKER^ZJRNFILT)? no Apply filter to every selected file? Yes => yes Process all journaled globals in all directories? no Are journal files imported from a different operating system? No => no Directory to restore [? for help]: c:\intersystems\hscv\mgr\user\ c:\intersystems\hscv\mgr\user\ Redirect to Directory: c:\intersystems\hscv\mgr\user\ => c:\intersystems\hscv\mgr\user\--> c:\intersystems\hscv\mgr\user\ Process all globals in c:\intersystems\hscv\mgr\user\? No => no Global ^TEST1 Global ^ Directory to restore [? for help]: Processing globals from the following datasets: 1. c:\intersystems\hscv\mgr\user\ Selected Globals: ^TEST1 Specifications correct? Yes => yes Are journal files created by this IRIS instance and located in their original paths? (Uses journal.log to locate journals)? no If you have a copy of the journal history log file from the Cache or IRIS instance where the journal files were created, enter its full path below; otherwise, press ENTER and continue. Journal history log: Specify range of files to process (names in YYYYMMDD.NNN format) from: <20201012.002> [?] => 20201015.001 through: <20201015.001> [?] => Provide or confirm the following configuration settings: Journal File Prefix: [?] => Files to dejournal will be looked for in: c:\intersystems\hscv\mgr\journal\ in addition to any directories you are going to specify below, UNLESS you enter a minus sign ('-' without quotes) at the prompt below, in which case ONLY directories given subsequently will be searched Directory to search: <return when done> Here is a list of directories in the order they will be searched for files: c:\intersystems\hscv\mgr\journal\ Prompt for name of the next file to process? No => no The following actions will be performed if you answer YES below: * Listing journal files in the order they will be processed * Checking for any missing journal file on the list ("a broken chain") The basic assumption is that the files to be processed are all currently accessible. If that is not the case, e.g., if you plan to load journal files from tapes on demand, you should answer NO below. Check for missing journal files? Yes => no You may disable journaling of updates for faster restore for all databases other than mirrored databases. You may not want to do this if a database to restore is being shadowed as the shadow will not receive the updates. Do you want to disable journaling the updates? Yes => yes Updates will NOT be journaled Before we job off restore daemons, you may tailor the behavior of a restore daemon in certain events by choosing from the options below: DEFAULT: Continue despite database-related problems (e.g., a target database is not journaled, cannot be mounted, etc.), skipping affected updates ALTERNATE: Abort if an update would have to be skipped due to a database-related problem (e.g., a target database is not journaled, cannot be mounted, etc.) DEFAULT: Abort if an update would have to be skipped due to a journal-related problem (e.g., journal corruption, some cases of missing journal files, etc.) ALTERNATE: Continue despite journal-related problems (e.g., journal corruption, some missing journal files, etc.), skipping affected updates Would you like to change the default actions? No => no Start the restore? Yes => yes c:\intersystems\hscv\mgr\journal\20201015.001 100.00% ***Journal file finished at 15:43:05 [journal operation completed] Do you want to delete your journal filter? yes Journal filter ZJRNFILT deleted %SYS> Ao fazer a restauração de uma global o journal , **por segurnaça** nós recomendamos que seja feita uma replicação da base de dados e dos arquivos de journal em ou outro ambiente que não seja o de produção. Para então, exportar a global restaurada e transferir (copiar) no ambiente de produção. Para detalhes das mensagens exibidas durante a restauração do arquivo de journal, consulte a documentação
Anúncio
Angelo Bruno Braga · Mar. 3, 2022

Alerta: HS2022-01: Alertas Múltiplos IRIS for Health & HealthShare

Esta postagem é parte do processo de comunicação de alertas do HealthShare HS2022-01. Esta mesma informação também é distribuída: Por Email Na página de Alertas e avisos de Produtos Na página de Distribuição do WRC da InterSystems de Documentos Existem 22 alertas na comunicação de alertas do HealthShare HS2022-01. O Resumo dos alertas está na tabela abaixo e os detalhes estão contidos no documento anexado: HS2022-01-Communication Alerta Produto & Versões Afetadas Categoria de Risco HS2022-01-01: Datas de Vacinação alteradas em algumas circunstâncias Todas as versões do: Information Exchange Unified Care Record Personal Community HealthShare Health Connect InterSystems IRIS for Health OperacionalClínico Segurança HS2022-01-02: Tratamento inválido de vários intervalos de referência nos documentos CDA e C-CDA Todas as versões do: Information Exchange Unified Care Record (até 2021.1) Clínico Segurança HS2022-01-03: Verificação de Segurança para Acesso de Emergência aos Registros do Paciente falha em algumas situações Todas as versões do: Information Exchange Unified Care Record (até 2020.2) Privacidade HS2022-01-04: Vulnerabilidade de Segurança no Unified Care Record 2020.2.0 Unified Care Record: 2020.2.0 (Build 8620) Privacidade HS2022-01-05: Clientes com Unified Care Record 2020.2 e 2021.1 devem instalar um Patch antes de atualizar para uma versão posterior Versões 2020.2, 2021.1 do: Unified Care Record Clinical Viewer Health Insight Patient Index Personal Community Care Community Versões 2020.2, 2021.1, 2021.2, 2021.3 do: Provider Directory Operacional HS2022-01-06: A configuração do Clinical Viewer Clássico demanda Requires solução desatualizada de terceiros Todas as versões do: Unified Care Record (Clinical Viewer Clássico apenas) Segurança HS2022-01-07: Usuários podem não conseguir sair do Clinical Viewer Todas as versões do: Information Exchange Unified Care Record (até 2020.2) Privacidade HS2022-01-08: O cache de agregação do Gateway de Acesso cresce ao longo do tempo Unified Care Record: 2020.1, 2020.2, 2021.1, 2021.2 Operacional HS2022-01-09: Incompatibilidade nas customizações do HL7toSDA3 durante a atualização para o HealthShare 15.03 ou mais recente Information Exchange: 15.03 ou mais recente (durante a atualização para o Unified Care Record) Não avaliado HS2022-01-10: Endpoints IHE devem utilizar credenciais apropriadas All versions of: Information Exchange Unified Care Record Segurança HS2022-01-11: Reativação do namespace ODS pode resultar em tempo de indisponibilidade prolongado Unified Care Record: 2019.1, 2019.2 Operacional HS2022-01-12: Atualização do ODS pode necessitar de intervenção manual para completar Unified Care Record: 2020.1 (quando atualizando para 2020.2) Operacional HS2022-01-13: Dados de auditoria do ODS inacessível depois de atualização para a versão 2020.1 Unified Care Record: 2019.1 ou 2019.2 (quando atualizando para 2020.1) Privacidade HS2022-01-14: Políticas de Consentimento no âmbito do sistema e a nível de instalação ignora as datas de eventos Todas as versões do: Information Exchange Unified Care Record (até 2021.1) Privacidade HS2022-01-15: Requisições FHIR não estão tendo o consentimento avaliado de forma própria Unified Care Record: 2020.1 Privacidade HS2022-01-16: Operações FHIR “$everything” podem estar retornando dados demográficos não consentidos All versions of: Information Exchange Unified Care Record (até 2021.1) Privacidade HS2022-01-17: Problema de performance de índice FHIR pode estar causando instabilidade no ODS Information Exchange: 2018.1 Unified Care Record: 2019.1, 2019.2 Operacional HS2022-01-18: Vulnerabilidade de Segurança no FHIR Gateway/FHIR Server Unified Care Record: 2021.1 InterSystems IRIS for Health: 2021.1 Segurança HS2022-01-19: Servidor FHIR não verifica revogação de token Unified Care Record: 2020.1, 2020.2, 2021.1 InterSystems IRIS for Health: 2020.4, 2021.1 HealthShare Health Connect: 2020.4, 2021.1 Segurança HS2022-01-20: Escopo do Token OAuth não é aplicado em Bundles FHIR Batch e Transaction InterSystems IRIS for Health: 2021.1 PrivacidadeSegurançaOperacional HS2022-01-21: Cliente REST de interoperabilidade do FHIR Server não realiza a limpeza de dados de forma correta InterSystems IRIS for Health: 2020.2, 2020.3 HealthShare Health Connect: 2020.2, 2020.3 Operacional HS2022-01-22: Problema de Segurança no Patient Index Todas as versões do: Patient Index (até 2021.2) Segurança Se você tiver dúvidas referente a este aviso, por favor entre em contato com support@intersystems.com e referencie o “HealthShare Alert HS2022-01”.
Artigo
Yuri Marx Pereira Gomes · Mar. 3, 2022

Migração de Dados - Parte I: do Postgres para o IRIS

Às vezes é necessário transferir ou migrar dados e esquemas de dados do Postgres para o IRIS. Atualmente, existem algumas opções para fazer isso, mas as duas opções mais populares são usando DBeaver (https://openexchange.intersystems.com/package/DBeaver) ou SQLGateway. A primeira será demonstrada neste artigo e a segunda é apresentada em um excelente artigo de Robert Cemper, DB Migration using SQLgateway (https://community.intersystems.com/post/db-migration-using-sqlgateway), veja neste artigo como realizar essa migração usando o DBeaver: Amostra de dados para demonstrar a migração No Github é possível baixar o projeto docker compose para construir e rodar os 2 bancos de dados: Banco de origem: Banco de dados de Exemplo em uma instância Docker com PostgreSQL. Banco de destino: Instância Docker com o InterSystems IRIS data platform pronto para receber os dados da migração. Para obter a amostra e executá-la, siga estas etapas: 1. Acesse https://github.com/yurimarx/migration-pg-iris e clique em Download para acessar o repositório git.2. Clone o projeto: git clone https://github.com/yurimarx/migration-pg-iris.git.3. Vá para a pasta do projeto migration-pg-iris.4. Faça o build: docker-compose build.5. Execute os contêineres: docker-compose up -d.6. Veja em sua área de trabalho docker com as instâncias estão ok: Sobre os dados a serem migrados O processo de migração do PostgreSQL para o IRIS vai migrar: 08 tabelas. 1000000 registros de venda (sale). 250000 resgistros de usuário (users). 300 registros de produto (product). 500 registros de loja (store). 100 registros de país (country). 30 registros de cidade (city). 5 registros de status_name. A migração irá para o schema dc_test dentro do namespace USER no InterSystems IRIS database. Ferramenta aberta para migrar do PostgreSQL para o IRIS: DBeaver DBeaver é uma ferramenta de banco de dados para conectar, criar, descartar, selecionar, atualizar e excluir objetos de dados aos principais produtos de banco de dados do mercado. Faça o download em: https://openexchange.intersystems.com/package/DBeaver. Agora siga as instruções de instalação para obter este produto fantástico em seu laptop ou desktop.DBeaver pode ser usado para migrar dados entre conexões de banco de dados, mesmo que sejam de fabricantes e versões diferentes. Conectando nos bancos de dados com o DBeaver Para configurar a conexão com o PostgreSQL no DBeaver: 1. No DBeaver vá para File > New. 2. Selecione Database Connection e clique Next: 3. Escolha a aba SQL > PostgreSQL e clique next: 4. Preencha a conexão com o PostgreSQL como nesta figura: Host: localhost Port: 5438 Database: postgres Username: postgres Password: postgres Click Finish. Configuração da conexão com o InterSystems IRIS no DBeaver: 1. No DBeaver vá para File > New.2. Selecione Database Connection e clique Next: 3. Escolha a aba SQL > InterSystems IRIS e clique next: 4. Se o DBeaver requisitar o download do driver do InterSystems IRIS, pressione Yes ou Ok.5. Configure a conexão com o InterSystems IRIS como nesta figura: Host: localhost Database/Schema: user Username: _SYSTEM Password: SYS Click Text Connection and Finish. 6. As conexões (postgres and user) agora estão disponíveis no Database Navigator: Faça a Migração Siga estes passos:1. Expanda a conexão postgres > public e selecione todas as tabelas. Clique com o botão direito do mouse com as tabelas selecionadas e escolha Export Data, como na figura abaixo: 2. Selecione Database, como na figura a seguir e clique Next 3. Clique em Choose button: 4. Selecione dc_test e clique Ok. 5. Agora é necessário realizar algumas mudanças de tipo de dados para o banco de dados de destino, pois o IRIS e PostgreSQL usando tipos de dados diferentes para integer e decimal.6. Expanda a tabela public.country, selecione o primeiro campo (country_id) e clique Columns… 7. Altere o Target Type de int4 para integer e clique Ok. 8. Repita o processo para as tabelas: a. public.product.b. public.status_name.c. public.users.d. public.city (altere o tipo para integer nos campos city_id e country_id).e. public.store (altere o tipo para integer nos campos store_id e city_id).f. public.sale (altere o tipo para double no amount e integer para product_id, user_id e store_id) g. public.order_status (altere status_name_id para integer). 9. Agora com os tipos alterados no Target Data Types, clique Next. 10. Configure Fetch size para 1000000 e clique Next. 11. Aceite os valores default para o Data load settings e clique Next. 12. Em Confirm clique em Proceed. 13. Agora veja no Database Navigator todas as tabelas PostgreSQL dentro do InterSystems IRIS dc_test schema. O processo de migração foi muito simples para tabelas, mas para visualizações, funções, gatilhos e procedimentos armazenados, você precisa reescrever o código-fonte SQL usando ObjectScript ou SQL. O que você ganha ao migrar para o IRIS? API Management. Relatórios visuais (IRIS Reports). AutoML (IntegratedML). Desenvolvimento multi linguagens de programação (Python, Java, .NET, JavaScript). ESB. BI/Analytics. NLP. Desenvolvimento de microsserviços. Multimodel database (SQL, JSON, Analytical Cubes, Object Oriented). Sharding. Em resumo, ao migrar para o IRIS você obtém uma plataforma de dados, quando antes você só tinha um banco de dados.
Anúncio
Angelo Bruno Braga · Dez. 13, 2022

Perguntas-chave do mês: Novembro de 2022

Olá desenvolvedores, Neste mês de outubro, vocês postaram 68 novas perguntas na Comunidade de Desenvolvedores: Perguntas InterSystems IRIS Arquivo de banco de dados IRIS [IRIS.DAT] verificação do atributo de Mirrorpor Phillip Wu Definir tempo limite da sessão por funçãopor Kevin Kindschuh Obtenha o id primário da linha inserida no SQLpor Dmitry Maslennikov ClassMethod recursivopor Patrik Spisak Adicionando uma classe ao namespace 'USER' usando o terminalpor Phillip Wu O Visual Studio Code não se conectará ao IRIS: WRONG_VERSION_NUMBERpor Phillip Wu O índice exclusivo da classe base não funciona por Iryna Mykhailova Instância não abre por índice chave do índice após a migração do Cache para o Iris.por Edmara Francisco Verificação de restrição de chave estrangeira do SQL ao excluirpor Dmitry Maslennikov "Cópia" de Roteador de mensagempor Andy Khemraj Criação de DTL para Saída em lote mapeada por registropor Chip Gore É possível desabilitar a validação do certificado em um HS.FHIRServer.RestClient.HTTP Enpointpor Martin Staudigel Qual é a probabilidade de encontrar "mensagens perdidas" no banco de mensagens?por Oliver Wilms Não consigo fazer login no registro de contêinerpor Shane M Elliott O serviço WSDL SOAP está criando sessões da web que levam o servidor a ficar inativopor prashanth ponugoti Existe uma maneira de modificar as classes %SYS para fins de depuração? por Norman W. Freeman Usuários Delegados por Rob Schoenmakers Limpar Campo SDApor Rob Schoenmakers Caché APIs para obter os dados no InterSystems Cachepor Naveenkumar M tablePane com OnCreateResultSet não retorna resultados ao referenciar outro namespacepor Andy Stobirski Enviando EMAIL - Alterando fonte e tamanhopor Steve Strunk Como obter a lista de valores no menu suspenso da categoria de produções no códigopor William Glover Adicionando permissão de tabela programaticamente a uma funçãopor David Hockenbroch Arquivo 834 X12 com bloco ST SE único com vários membrospor Sheetal Kairawala Diferença de $SYSTEM.Encryption.AESCBCEncrypt com implementação C#por Menno Voerman Projeção de Esquema XML - honrando todos os esquemas Locationspor Ruiyan Yu Como o Cache da InterSystems calcula a contagem de licenças por Rathinakumar S 500-Internal Server Errorpor Muhammad Shahid Ens.Alertpor Smythe Smythee Exibindo ícones personalizados no Zen TablePanepor Andy Stobirski Compressão de Streamspor Paul Riker Vendo se um adaptador está habilitado no códigopor William Glover Existe alguma documentação abrangente sobre $$$ Macrospor William Glover do HttpRequest.SetHeader("organization-identifier","myName") nunca definirá um cabeçalhopor Edoeard Kroetkov baixar InterSystems Caché ODBC Data Sourcepor Tyffany Coimbra Download de imagem por URLpor Fabio Care Configuração SSL para Gmailpor Smythe Smythee Como obter valores de uma classe serialobjectpor Smythe Smythee Atualizar a versão do Cachepor Tiago Pereira Gatilho, Inserir depoispor Oleksandr Demchenko Inserção em lote com multiconexões no Cachepor xu zong Existe uma maneira de mascarar o código no estúdio, como proteção por senha ou com direitos de usuário?por William Glover Como ativar %Service_Terminal com linha de comando?por Thiago Andrade Erro de Resposta Adiadapor William Glover Left outer join nas tabelas não retorna correspondênciaspor Andy Stobirski HealthShare Retornando todos os business hosts associados a uma categoria de produçãopor William Glover Qual tabela contém as informações sobre as mensagens descartadas, existem métodos que sejam usados ​​para recuperá-las?por William Glover De um Ambiente de INTEGRAÇÃO, conecte-se a um Ambiente de PRÉ-PRODUÇÃO para acessar o Servidor de Recursos de Validação de Token JWT.por Yone Moreno Iterando o contêiner HS.SDA3.Container duas vezespor Eduard Lebedyuk Ensemble Quais adaptadores estão presentes nos Business Services, mas não estão nos Business Operations?por Maciej Bogdanski Forçar a parada de uma tarefa por Rochdi Badis Conexões do gateway SQLpor Rochdi Badis Business Service Pool Size com Ens.Director.CreatBusinessService()por Michael Davidovich Conversão de tipos de dados no Cachepor Rochdi Badis Apache com certificados SSLpor Rochdi Badis Não é possível imprimir a partir do Edgepor Rochdi Badis InterSystems IRIS for Health A instalação do IRIS for Health trava no AMDpor Dmitrii Baranov Imagem/contêiner do Docker - como usarpor Dmitrii Baranov Como executar a tabela de ajuste em um banco de dados somente leitura (Message Bank)por Stefan Schick Transforme JSON em VDOC por Ori Tsarfati para realizar loops no conteúdo repetitivo de tagpor prashanth ponugoti Resposta Nula da Solicitação para o Business Operation Integradopor Michael Davidovich Conexões SFTP e espelhamento/endereços IP virtuaispor Warren Baldock HL7 para FHIRpor Smythe Smythee O banco de dados IRISTMP na instância IRIS desativa a instância de produçãopor Sudhir Sinha VSCode Erros de Parsisng da Extensão da linguagem VSCode ObjectScriptpor Victor Gordillo InterSystems IRIS BI (DeepSee) DeepSee - Modificando filtro avançado em pivô com base no filtro do painelpor Julie Bolinsky Outras Não consigo me registrar através do Global Masterpor James Woo Aqui estão as perguntas-chave de outubro escolhidas pelos especialistas da InterSystems: 📌 Não abrir uma instância por chave de índice após a migração do Caché para a Iris por @Edmara.Francisco 📌 Obtenha o id primário da linha inserida no SQL por @Dmitry.Maslennikov 📌 O índice exclusivo da classe base não funciona por @Irene.Mikhaylova Essas perguntas serão destacadas com a #Tag de pergunta chave, e seus autores receberão o selo Pergunta-chave no Global Masters. Parabéns e obrigado a todos pelas perguntas. Continuem Enviando-las! Vejo você no próximo mês ;)