Artigo
· Fev. 17 3min de leitura

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:

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!

Discussão (0)1
Entre ou crie uma conta para continuar