Find

Announcement
· Apr 22

Programe seu caminho para o InterSystems READY 2025

Olá Comunidade! 

Sabemos que todo desenvolvedor tem pequenos projetos paralelos — aplicativos onde você experimenta novas tecnologias, testa ideias antes de implementá-las em soluções maiores ou simplesmente cria algo divertido por curiosidade. Mas e se um desses projetos pudesse levá-lo até o InterSystems READY 2025? 

Estamos lançando uma oportunidade única: mostre-nos sua paixão, criatividade, e amor pelo IRIS, e ganhe um passe livre para o InterSystems READY + hospedagem em hotel ! 

As regras são simples: carregue seu divertido projeto paralelo baseado em IRIS no Open Exchange e grave um pequeno vídeo inspirador sobre por que você deve ser o único a obter o passe para O evento do ano e ganhar!

Duração: 21 de Abril - 04 de Maio, 2025

Prêmios: acomodação em hotel e passes gratuitos para o InterSystems READY 2025!

🛠 O que você precisa fazer?

  1. Carregue o seu projeto baseado em IRIS no Open Exchange (Como publicar uma aplicação no Open Exchange). Seja criativo - pode ser útil, peculiar, divertido ou apenas algo que você sempre quis tentar. 
  2. Grave um pequeno vídeo inspirador (de até 5 minutos) :
    • Conte-nos como as tecnologias InterSystems ou a Comunidade de Desenvolvedores impactou o seu projeto ou a sua carreira.
    • Explique por que VOCÊ deve adquirir um ingresso para o InterSystems READY 2025.
  3. Envie seu vídeo e o link para a sua app através deste formulário.

🧠 Requisitos Gerais para Aplicações 

  1. Um aplicativo ou biblioteca deve ser totalmente funcional. Não deve ser uma importação ou uma interface direta para uma biblioteca já existente em outra linguagem (exceto C++). Não deve ser uma cópia e colagem de um aplicativo ou biblioteca existente.
  2. Inscrições aceitas: novos no Open Exchange. Nossa equipe analisará todas as inscrições antes de aprová-las.
  3. O aplicativo deve ser compatível com IRIS, IRIS for Health ou IRIS Cloud SQL. As duas primeiras versões podem ser baixadas como versões host (Mac, Windows) no site de avaliação ou podem ser usadas na forma de contêineres extraídos do InterSystems Container Registry ou Community Containers: intersystemsdc/iris-community:latest ou intersystemsdc/irishealth-community:latest.  
  4. O aplicativo deve ser de código aberto e publicado no GitHub ou GitLab.
  5. O arquivo README do aplicativo deve estar em inglês, conter as etapas de instalação e a demonstração em vídeo e/ou uma descrição de como o aplicativo funciona. 
  6. Um aplicativo pode ter apenas um autor

Observação: Nossos especialistas terão a palavra final sobre a aprovação da inscrição para esta iniciativa, com base nos critérios de criatividade e originalidade da abordagem. A decisão deles é final e inapelável.

👨‍💻 Quem pode participar

Qualquer membro da Comunidade de Desenvolvedores, exceto funcionários InterSystems ou contratados. Crie uma conta!

🏆 Prêmios

🥇 1º lugar: passe livre para o InterSystems READY 2025 + hospedagem em hotel

🥈 2º & 3º lugares: passe livre para o InterSystems READY 2025

❗️O prêmio não poderá ser trocado por dinheiro ou qualquer outra alternativa.

✨ Pontos Bônus 

Você pode aumentar suas chances de ganhar enviando atividades adicionais:

  • Publique um artigo técnico sobre seu projeto
  • Crie uma demonstração de vídeo extra do seu projeto
  • Compartilhe seu vídeo inspirador nas redes sociais usando a hashtag #Ready2025 e mencione @InterSystems e @InterSystemsDev

Inspire-se. Crie algo divertido. Compartilhe sua história.

É a sua hora de brilhar - PROGRAME o seu caminho para o InterSystems READY 2025! 

Discussion (0)1
Log in or sign up to continue
Question
· Apr 22

Linked Stored Procedure Call - Need Results to populate further logic

I was wondering if someone could help me. In the past I have been able to call external Stored Procedures through a SQL Outbound Connection and have them return me the EnsLib.SQL.Snapshot to use within a BPL to extract data.

But this time instead of using a SQL Outbound BO to make the Stored Procedure call, I decided to create a Linked Stored Procedure through the %JDBC_Server to point to the Stored Procedure out on MS SQL.

However, I am struggling to get the code just right to return the Column value from the Linked Stored Procedure.

 set result = ##class(EnsLib.SQL.Snapshot).%New()
 set result = $SYSTEM.SQL.Execute("CALL osuwmc_Utils_EnterpriseDirDb.InterfaceCheckConnectMedCtrID('$Get(MedCtrID)')")
 while result.%Next(){
  set Loc = result.Get("OSUguestRoleDTL")
 }

Does not return me the value I am looking for because the rest of my code fails.

However, if execute CALL osuwmc_Utils_EnterpriseDirDb.InterfaceCheckConnectMedCtrID('<value>') from the SQL Viewer it will return a Result. If I do a do result.%Display() it shows me the result, so what am I missing? This is the first time I have tried to call a Linked Stored Procedure from within Object Script.

I need to get the value that is being returned within "OSUguestRoleDTL" to help me determine how to route the message and populate addresses within the HL7 message.

2 Comments
Discussion (2)1
Log in or sign up to continue
Question
· Apr 22

DTL help - resolved, great help

New at DTL. I need some pointers on this DTL

For all Prosthetics orders:
when ORC-1(Order Control) is "NW" (New Order), need to update OBR-18(Placer Field 1) based on PV1-2 (Patient Class) value.
assumption is that the selection logic is that all prosthetics orders with OBR-18 field is always blank.
Description :
If PV1-2 is I, insert I in OBR-18
If PV1-2 is O, insert O in OBR-18
If PV1-2 is E, insert O in OBR-18
If PV1-2 is P, insert O in OBR-18
If PV1-2 is R, insert O in OBR-18
If PV1-2 is B, insert O in OBR-18

1 Comment
Discussion (1)1
Log in or sign up to continue
Question
· Apr 22

What the heck is a "Reentrant request"?

I'm playing with %Net.DB.Iris and stumbled over a mystery

set con=##class(%Net.DB.DataSource).CreateConnection(host,...)
set srv=con.CreateIris()
write srv.ClassMethodValue("%SYSTEM.Util","InstallDirectory")

Entering the above lines (in a terminal session) on my local instance yields the correct answer for:

host = "localhost"
host = the real IP of localhost (i.e. host="192.168...")
host = "10.x.y.dev" customers development system (over a VPN tunnel)

but for

host = "10.x.y.tst" (customers test system) I get an error:
 <THROW>zClassMethodValue+8^%Net.DB.Iris.1 *%Exception.StatusException ERROR #5001: Reentrant request

I don't see any reason for a "re-entry problem" in the three lines above, but maybe I'm blind...

If I execute the above three lines in a terminal session on customers dev-system (10.x.y.dev) and try to reach the testsystem (10.x.y.tst), I get the same error BUT if I do that on the test-system (10.x.y.tst) I can reach the dev-system (10.x.y.dev), i.e. no error.

Both customer instances are IRIS 2023.1.1/Win and my local instance is IRIS 2021.2/Linux

I can't figure out what's going on
- why do I get an error at all and
- what do that error means

Does anyone have any idea what's wrong and what this error message is trying to tell me or is it a case for WRC?

5 Comments
Discussion (5)1
Log in or sign up to continue
Article
· Apr 22 3m read

Comment identifier les variables globales temporaires qui consomment de l'espace dans la base de données IRISTEMP

Rubrique FAQ InterSystems

Les variables globales temporaires stockées dans les bases de données IRISTEMP/CACHETEMP sont utilisées lorsqu'un processus n'a pas besoin de stocker des données indéfiniment, mais requiert les performances élevées des variables globales. Les bases de données IRISTEMP/CACHETEMP ne sont pas journalisées ; leur utilisation ne crée donc pas de fichiers journaux.

Le système utilise les bases de données IRISTEMP/CACHETEMP pour le stockage temporaire et les utilisateurs peuvent y accéder à cette fin.

Pour plus d'informations sur les variables globales temporaires et la base de données IRISTEMP, consultez le document suivant :

Globals temporaires et la base de données IRISTEMP

Les globales utilisées comme temporaires sont :

1. Variables globales temporaires du système (^IRIS.Temp*, ^%cspSession, ^CacheTemp*, ^mtemp*, etc.)
2. Variables globales temporaires mappées à IRISTEMP/CACHETEMP par l'utilisateur

3. Process private globals  (^||name, ^|"^"|name, ^["^"]name, ^["^",""]name, etc. )
4. Table de GLOBALE TEMPORAIRE

 -> La définition de la table est persistante (disponible pour tous les processus) et les données de la table sont stockées dans les données globales privées du processus (ne durent que pendant la durée du processus).

Les tailles 1 et 2 peuvent être vérifiées à l'aide de l'utilitaire ^%GSIZE:

USER>do ^%GSIZE

Directory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\
                                               // Specify the iristemp database folder
All Globals? No => yes       // Yes to show all globals: 34 items selected
34 available globals
Show details?? No => No   //  No to not show detailed information 
Device:
Right margin: 80 =>

3,4 Les globales privées des processus peuvent être visualisées à l'aide de l'utilitaire ^GETPPGINFO

Pour plus d'informations sur l'utilitaire ^GETPPGINFO, consultez le document suivant :
About the ^GETPPGINFO utility [IRIS]
About the ^GETPPGINFO utility

L'exemple suivant répertorie les variables globales privées de tous les processus actuels 

 set ^||flintstones(1)="Fred"
 set ^||flintstones(2)="Wilma"
 znspace "%SYS"
 do ^GETPPGINFO("*")

Une autre méthode consiste à afficher le contenu de processus individuels utilisant des blocs globaux privés en grande quantité.

L'exemple suivant affiche le nombre de blocs globaux privés par processus supérieur ou égal à 20.

 set ns=$namespace
 znspace "%SYS"
 
 // Only processes with more PPG blocks than the total number of processes are included
 set st=##class(%SQL.Statement).%New()
 set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
 set rs=st.%Execute()
 while rs.%Next() {
    set pid=rs.%Get("Pid") // Process ID
    set cnt=rs.%Get("PrivateGlobalBlockCount") // Number of PPG blocks
    
    // When the number of PPG blocks per process is 0 or more, the contents are output (the following example shows 20 or more blocks).
    if cnt > 20 {
       set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG")
       // "N" Do not return subscripts of a PPG, just return the root name
       // "B" Return the number of blocks used by the PPG (needs the "N" option)
       do rs2.Execute("*",pid,"NB")
       for {
          quit:'rs2.Next()
          write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",!
       }
    }
 }
 
 znspace ns
Discussion (0)1
Log in or sign up to continue