terça-feira, 26 de junho de 2007

Chamadas dinâmicas de Rotinas

Não sei se já aconteceu com vocês, mas dependendo do nível de reaproveitamento de código da sua aplicação podemos ter a necessidade de chamarmos uma PROCEDURE ou FUNCTION que não sabemos o nome ou que não sabemos o numero de parâmetros.
Para isso existe uma solução muito interessante.
Todas AS procedures e functions do PROGRESS são executadas internamente através de uma instancia de CALL.
Então para podermos fazer uma chamada dinâmica precisamos apenas de uma instancia de CALL.

Vamos criá-la então.

DEFINE VARIABLE hCall AS HANDLE.

DEF VAR tipo AS CHAR.

DEF VAR opcao AS INTEGER.

CREATE CALL hCall.

Agora para testar o funcionamento vamos criar duas funções simples:

FUNCTION mostraString RETURNS CHAR (INPUT a AS INT, INPUT b AS CHAR):

MESSAGE 'String é ' b
VIEW-AS ALERT-BOX INFO BUTTONS OK.

END FUNCTION.

FUNCTION mostraInteiro RETURNS CHAR (INPUT a AS INT, INPUT b AS CHAR):

MESSAGE 'Inteiro é ' a

VIEW-AS ALERT-BOX INFO BUTTONS OK.

END FUNCTION.

Vamos dar ao usuário a opção de escolher qual PROCEDURE vai ser executada:


UPDATE opcao.

CASE opcao :

WHEN 1 THEN ASSIGN tipo = 'mostraString'.

WHEN 2 THEN ASSIGN tipo = 'mostraInteiro'.

END CASE.

E NO final vamos chamar a PROCEDURE escolhida

hCall:CALL-NAME = tipo.

hcall:CALL-TYPE = 2.

hCall:NUM-PARAMETERS = 2.

hCall:SET-PARAMETER( 1, "INTEGER", "INPUT", 20).

hCall:SET-PARAMETER( 2, "CHARACTER", "INPUT", "USA").

hCall:INVOKE.

E eliminar o objeto CALL.

DELETE OBJECT hCall.

Lembramos que obviamente nesse exemplo não era necessário o uso DO CALL.

O CASE sozinho resolveria o problema. Mas a idéia e mostrar que você pode fazer qualquer coisa, ate mesmo salvar em uma tabela DO banco o nome da PROCEDURE, basta criatividade.

Abraço Galera

E não esqueça qualquer duvida entrem nos comentarios

13 comentários:

Diego Soares disse...

Olá,

Tenho um site de notícias e gostaria de fazer parceria entre nossos sites, se puder acrescente o meu link nos bookmarks semelhante ao digg it.

http://www.websapiens.net

Obrigado,

Diego Soares

Edson C. Damasceno disse...

muito bom esse blog. gostaria de lhe oferecer uma parceria para troca de banners. entra em contato.
http://cidadevigiada.blogspot.com/
http://cidadevigiada.blogspot.com/
http://cidadevigiada.blogspot.com/

Anônimo disse...

Cara, gostei muito do teu blog!!! Tá a fim de um aparceria???

www.baixedetudo.com

Daniel Lins disse...
Este comentário foi removido pelo autor.
Daniel Lins disse...

boa tarde,

Estou desenvolvendo um projeto em .NET e gostaria de realizar consultas em um banco de dados Progress.

A versao utilizada é o Progress 10.

O driver ODBC da DATADIRECT, versão 5 para Progress 10 já se encontra instalada no servidor, mas a conexão não funciona.

Pelo que pesquisei preciso inicializar um broker(serviço) no Progress, após realizar a carga do banco, para poder possibilitar a conexão.

Como faço para configurar e inicializar este broker no servidor do Progress? Que parametrizações posso configurar neste broker?

Desde já Obrigado.

Muito boa a iniciativa do blog, já que a documentação para este ótimo banco de dados é muito excassa na internet.

Unknown disse...

Eai Blza? interessa em uma parceria de link? estou adicionando o seu, de uma conferida, www.zipdownload.blogspot.com . Obrigado

Anônimo disse...

Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the TV de LCD, I hope you enjoy. The address is http://tv-lcd.blogspot.com. A hug.

WEB honey disse...

Bem legal essas chamadas!!!

Achei bem interessante vocês tratarem de Progress, geralmente acho pouco conteúdo na web.


Desejo sorte!

Gabriel disse...

Gostaria de parceria?
http://entrandonoassunto.blogspot.com
gsbertho@gmail.com

Aline disse...
Este comentário foi removido pelo autor.
Aline disse...

olá

gostaria de saber se você está interessado em fazer uma parceria com meu blog, se tiver interesse dê uma olhada no link

http://downloaddoor.blogspot.com/

caso decida-se por adicioná-lo por favor me avise para que eu o adiocione também


brigada

Daniel Macarenco disse...

Olá,

Gostaria de saber se você esta interessado numa parceria entre blogs. Se estiver, mande um recado para eu colocar seu link no meu blog.

www.stik10.blogspot.com

Sami Informática disse...

OLÁ AMIGO GOSTARIA DE PARCERIA...MEU BLOG É WWW.SAMIINFORMATICA.BLOGSPOT.COM

Topicos Relacionados