New post

Find

Question
· Feb 3

trying to put the SYSMGR global into a readable string

I'm trying to put this global into a readable list. any suggestions
The nested $bl's are giving me a problem.

SYSMGR("Task","TaskD",1046)=$lb("","",0,0,"","0","","Import data to PROG namespace OS.SarD",$lb("63735","1"),,,0,"","<ENDOFFILE>Import+30^PROG0","%SYS.Task.RunLegacyTask",0,"","","",0,"63735,40372","","63735,40320","ImportD","PROG2",,0,"","",0,0,,"",64117,"0 "_$lb($lb(5001,"<ENDOFFILE>Import+30^PROG0",,,,,,,,))/* ERROR #5001: <ENDOFFILE>Import+30^PROG0 */,1,"",5,"","",2,,,1,"123-123-123-ABCD-12345A789A","","SMITH1",$lb("ExecuteCode","q  ; D Import^PROG0()"),3,0)

5 Comments
Discussion (5)2
Log in or sign up to continue
Question
· Feb 3

Py fails in Win Terminal - fixed

USER>do $System.Python.Shell()
 
ERROR #5002: ObjectScript-Error: <OBJECT DISPATCH>Shell+16^%SYS.Python.1 
*Failed to Load Python: Check documentation and messages.log, 
Check CPF parameters:[PythonRuntimeLibrary,PythonRuntimeLibraryVersion], 
Check sys.path setup in: $INSTANCE/lib/python/iris_site.py
02/03/25-18:27:39:497 (13156) 1 [Generic.Event] CPF settings (PythonRuntimeLibraryVersion) do not specify python correctly - Python can not be loaded
02/03/25-18:27:39:498 (13156) 1 [Generic.Event] CPF settings (PythonRuntimeLibrary) do not specify python correctly - Python can not be loaded

my iris.CPF just shows nothing. what is the correctly formatted content ?

^CONFIG("config","PythonPath")=""
^CONFIG("config","PythonRuntimeLibrary")=""
^CONFIG("config","PythonRuntimeLibraryVersion")=""

next from iris_site.py:

>>> print(get_win_python_install_dir())
C:\Program Files\Python313

>>> print( __sitegetsitepackages([get_win_python_install_dir()]))
['C:\\Program Files\\Python313', 'C:\\Program Files\\Python313\\Lib\\site-packages']

>>> print(sys.path)
['', 'C:\\Program Files\\Python313\\python313.zip', 'C:\\Program Files\\Python313\\DLLs', 'C:\\Program Files\\Python313\\Lib', 'C:\\Program Files\\Python313', 'C:\\Program Files\\Python313\\Lib\\site-packages']

Various attempts to set iris.CPF according to docs / examples manually failed
What else can I check?

PythonPath=C:\Program Files\Python313
PythonRuntimeLibrary=C:\Program Files\Python313\python3.dll
PythonRuntimeLibraryVersion=3.13

Also downgrade to Python 3.9.13 didn't improve anything.

9 Comments
Discussion (9)1
Log in or sign up to continue
Announcement
· Feb 3

Building and Managing HL7 Integrations – IN PERSON February 24-28, 2025 / Registration space available

*** This is our first in person public course scheduled in the new InterSystems One Congress Street training rooms! ***

 

  • Building and Managing HL7 Integrations – In Person February 24-28, 2025 9:00am-5:00pm EST
    • Build, configure, and manage HL7® V2 interfaces using InterSystems integration technologies.
    • This healthcare-focused 5-day course teaches implementation partners, integrators and analysts how to rapidly build HL7 integration solutions.
    • Students build a production that processes and routes HL7 messages.
    • Students learn how to work with the pre-built HL7 business services, business processes and business operations to receive and send HL7 messages.
    • Students also learn how to transform HL7 messages using graphical tools in the Management Portal.
    • This course teaches students how to monitor, manage, and troubleshoot Productions. Students also learn how to use the Management Portal for viewing, searching, and resending messages.
    • This course is applicable for users of InterSystems IRIS for Health, Ensemble, and HealthShare.
  • Self-Register Here
Discussion (0)1
Log in or sign up to continue
Question
· Feb 3

Base64 decoding and storing it in a local path

Dear Community,

I am trying to convert a base64 encoded string to a pdf. I have tried a lot of possible ways, but never succeeded. I am able to decode the base64 using $System.Encryption.Base64Decode but I am not able to convert it and store this in a path.

Can anybody help me out here?

 

Thanks.

3 Comments
Discussion (3)2
Log in or sign up to continue
Article
· Feb 3 3m read

Variáveis de host SQL ausentes ?

Variáveis de host são um recurso de programação bastante comum em muitas implementações de SQL.
Uma pergunta recente no DC me alertou para o fato de que, no IRIS, Caché, Ensemble, ... variáveis de host existem apenas dentro do SQL incorporado:

>  Você pode fornecer variáveis de host apenas para consultas SQL incorporadas.  <

Exemplos relacionados estão incluídos na documentação disponível.

Esta é uma descrição de uma solução alternativa caso você não use/não possa usar SQL incorporado.
A ideia básica é usar PPGs (Globais Privadas de Processo) para armazenar a imitação de uma variável de host.
Uma das principais razões para usar PPGs é o fato de serem excluídas automaticamente ao final do processo.
Outra ideia é evitar conflitos com arrays de variáveis locais e escopo de variáveis local versus global.Além disso, não há necessidade de uma atividade de limpeza.

Na verdade, trata-se de um conjunto de 3 métodos SQL:

  • HDEC para simular SQL DECLARE @var e SQL SET @var
  • HGETV e HGETI para retornar o valor da variável como VARCHAR ou INT.
    • Como um recurso adicional, NULL é retornado se a variável não foi definida ou declarada anteriormente.
    • Se necessário, retornar qualquer outro tipo de dado é bastante fácil.
  • HDEL é fornecido caso surja a improvável necessidade de excluir uma variável de host.
Class User.HostVar
{
ClassMethod GetV(name) As %String [ SqlName = HGETV, SqlProc ]
{
    quit $get(^||host($g(name,"%")))
}
ClassMethod GetI(name) As %Integer [ SqlName = HGETI, SqlProc ]
{
    quit $get(^||host($g(name,"%")))
}
ClassMethod Declare(name, val) As %Integer [ SqlName = HDEC, SqlProc ]
{
    set ^||host($g(name,"%"))=$g(val)
    quit $$$OK
}
ClassMethod Del(name) As %Integer [ SqlName = HDEL, SqlProc ]
{
    kill ^||host($g(name,"%"))
    quit $$$OK
}
}

Meu exemplo contém 2 variantes para implementação.

A primeira é em ObjectScript puro; essa variante também está disponível em IPM.

A segunda é baseada em SQL e pode ser implementada também sobre ODBC/JDBC.

CREATE or REPLACE
PROCEDURE HDEC(IN name VARCHAR(50), IN val VARCHAR(50)) RETURNS INT
  LANGUAGE OBJECTSCRIPT 
  { 	set ^||host($g(name,"%"))=$g(val)
	quit $$$OK
  } 
CREATE or REPLACE PROCEDURE
HGETV(IN name VARCHAR(50)) RETURNS VARCHAR(50)
  LANGUAGE OBJECTSCRIPT 
  {
 	quit $get(^||host($g(name,"%")))
  }
CREATE or REPLACE PROCEDURE
HGETI(IN name VARCHAR(50)) RETURNS INT
  LANGUAGE OBJECTSCRIPT 
  {
 	quit $get(^||host($g(name,"%")))
  }  
CREATE or REPLACE  
PROCEDURE HDEL(IN name VARCHAR(50)) RETURNS INT
  LANGUAGE OBJECTSCRIPT 
  { 	kill ^||host($g(name,"%"))
	quit $$$OK
  } 

Ambas as variantes são projetadas para serem utilizáveis sem um prefixo de pacote.

Portanto, o pacote User (o padrão) é usado, mapeando para o esquema padrão SQLUser em SQL.

Durante os testes, detectei que forçar uma sequência de Definição e Consumo dessas variáveis de host pode ser um exercício complicado se você quiser executá-lo dentro de uma única instrução SQL.

Eu consegui fornecer uma sequência previsível apenas usando uma construção CASE.

SELECT 
CASE
  WHEN HDEC('rcc',66) > 0  -- set host var 
   THEN HGETI('rcc')-5||' ** '||HGETV('rcc')
END  

Dentro de um stored procedure você não enfrenta esse problema.

Meu exemplo e também o pacote fornecido no Open Exchange foram construídos e testados no IRIS. Embora a construção seja bastante básica, ela também roda sem nenhuma alteração no Caché, Ensemble, ... e seus derivados e, claro, em todos os derivados HEALTH* do IRIS.

Minha única dúvida é sobre um banco de dados fragmentado em combinação com Globais Privadas de Processo. Eu simplesmente não tinha uma configuração disponível para testar esse cenário.

Não presumo que esta proposta seja a solução definitiva. Situações específicas podem exigir uma abordagem mais sofisticada ou, de outra forma, construções mais simples.

Como mencionado anteriormente, vejo a grande vantagem de ter uma solução que possa ser usada sobre acesso ODBC ou JDBC e não requeira codificação com VSCode ou Studio.Video

GitHub

Implementação do Portal de Ideias

 
Esperando seus votos no concurso.

1 Comment
Discussion (1)1
Log in or sign up to continue