Operação de Ensemble: Chamando um Stored Procedure SQL
Utilizamos o JDBC Gateway do Caché para servidores Oracle e SQL para invocar diretamente seus stored procedures a partir do Ensemble. A obtenção de resultados de dados rápidos e em linha é normalmente tratada dentro da classe Functions.Library como uma função para envolver a consulta e formatar o retorno adequadamente.
Mas e quanto a stored procedures mais elaborados, feitos para postar dados sem congestionar um Router? As operações para construir esses pipelines de dados podem se tornar cansativas, especialmente quando mudanças são necessárias. O que se segue é um gerador de código para criar uma nova classe de Ensemble Message a partir de um SQL Stored Procedure que seja compatível para envio a uma Business Operation. A listagem do código-fonte do pacote está anexada.
Exemplo prático:
Passo 1) Importe a chamada do SQL Stored Procedure via SMP Explorer: SQL Link Wizard
Passo 2) Crie sua nova classe de projeto que aponte para o nome da classe proxy SQL criada pelo Assistente:
Class Pacs.JDBC.MakeImageLab Extends Common.JDBC.MakeRequestClass
{
// forneça o nome da classe proxy JDBC criada pelo SQL Link Procedure Wizard.
Parameter LINK = "dbo.Imagehl7add1";
// forneça o nome da classe de mensagem gerada para o DTL
Parameter MAKE = "Pacs.JDBC.ImageLabRequest";
}
Passo 3) Ao Salvar e Compilar o Passo nº 2, uma nova classe de Mensagem é gerada usando o nome fornecido em MAKE
/// NÃO TOQUE!
/// gerado automaticamente por Common.JDBC.MakeRequestClass via Pacs.JDBC.MakeImageLab
/// Escrito por Robert Hurst
Class Pacs.JDBC.ImageLabRequest Extends Common.JDBC.StoredProcedureRequest [ GeneratedBy = Pacs.JDBC.MakeImageLab.CLS, Not ProcedureBlock ]
{
Property x01mrn As %String(MAXLEN = 20);
Property x02ptname As %String(MAXLEN = 50);
Property x03gender As %String(MAXLEN = 1);
Property x04dob As %TimeStamp;
Property x05clipnum As %String(MAXLEN = 75);
Property x06studydesc As %String(MAXLEN = 200);
Property x07observdt As %TimeStamp;
Property x08orderphys As %String(MAXLEN = 80);
Property x09clinicalinfo As %String(MAXLEN = 300);
Property x10billingcode As %String(MAXLEN = 20);
Property x11ptnameCCC As %String(MAXLEN = 50);
Property x12reporttext As %Stream.GlobalCharacter;
Property x13reportdt As %TimeStamp;
Property x14reportstatus As %String(MAXLEN = 12);
Property x15reportby As %String(MAXLEN = 500);
Property x16ordercomments As %String(MAXLEN = 2500);
/// informa se a classe de mensagem é um grupo de mensagens ou não
Parameter GROUP As INTEGER = 0; /// o nome da classe proxy JDBC criada pelo SQL Link Procedure Wizard
Parameter LINK = "dbo.Imagehl7add1";
}
Observe o prefixo usado na frente do nome de cada parâmetro. Isso serve para reforçar sua posição ordinal quando ele for exibido dentro do Construtor de DTL:
.png)
Passo 4) Crie sua Business Operation de destino usando a classe JDBC.StoredProcedureOperation, fornecendo o nome da mensagem de entrada no campo RequestClassname em suas Additional Settings apresentadas. Neste exemplo prático, o nome da classe de mensagem de destino saindo do DTL é: Pacs.JDBC.ImageLabRequest
Repita o processo com outros stored procedures SQL. Em frente!