04 comunicacao entreobjetos-cursogxxbr

8

Upload: cristiano-rafael-steffens

Post on 15-Jun-2015

316 views

Category:

Technology


0 download

DESCRIPTION

Genexus Course

TRANSCRIPT

Page 1: 04 comunicacao entreobjetos-cursogxxbr

���

Page 2: 04 comunicacao entreobjetos-cursogxxbr

���

Os objetos GeneXus podem comunicar-se entre eles ou com outros programas externos.

Um objeto GeneXus pode chamar ou ser chamado por qualquer outro objeto, trocando informaçõesatravés de parâmetros.

Veremos em seguida como chamar desde um objeto a outro, e como especificar os parâmetros (noobjeto chamador e no chamado) para a troca da informação.

O esquema apresentado acima ilustra as possíveis interações entre objetos GeneXus para umaaplicação Web. Observe que a flecha simples entre Web Panel e Procedimento PDF (assim comoentre Transação e Procedimento PDF) indica que uma web panel poderá chamar um ProcedimentoPDF mas um Procedimento PDF não poderá chamar uma web panel (ou transação Web).

Page 3: 04 comunicacao entreobjetos-cursogxxbr

���

CALL - Permite chamar a um objeto GeneXus ou a um programa externo, podendo passarparâmetros ou não.

UDP (User Defined Procedure)– Permite chamar a um objeto GeneXus ou programa externo tantopassando parâmetros ou não, e com a particularidade de que o programa chamado retornaránecessariamente ao menos um valor ao programa que chamou. Em ambientes Web, um objetocom interface uma vez chamado não devolve o controle ao chamador, porque a UDP é utilizaunicamente para chamar Procedimentos e Data Providers (devido que estes cumprem com acondição de executar e devolver o controle ao chamador).

Uma chamada (seja com CALL ou UDP) pode ser utilizado em distintas partes do objeto chamador,dependendo se o mesmo é uma transação, wep panel, procedimento, etc.

A UDP pode utilizar-se também na definição de um atributo formula. Quer dizer que se define quecerto atributo é uma formula e que a definição da mesma consiste no chamada a um procedimentoutilizando UDP.

Quando na sintaxe da chamada se escreve o nome do objeto chamado e nenhum método dechamada, se assume que se está chamando com udp, e pode ser omitida e escrever diretamente:

att|&var = PgmName( par1, ..., parN)

PARM – Quando um objeto é chamado desde outro com parâmetros, deve ter declarada a lista deparâmetros que recebe. Esta declaração se realiza mediante a regra: PARM.

A continuação daremos mais detalhes sobre o uso de CALL, UDP e PARM.

Page 4: 04 comunicacao entreobjetos-cursogxxbr

���

Aqui mostramos um exemplo do uso do CALL para realizar uma chamada e outro exemplo do uso doUDP.

Dependendo de qual objeto for o chamador, estas chamadas poderão escrever-se em uma seção ououtra do mesmo, mas independentemente disso, aqui mostraremos que CALL permite chamar umobjeto com estilo de chamada a um programa, enquanto que UDP uma chamada a um objeto comestilo de chamada em uma função.

No primeiro exemplo esta se utilizando CALL para chamar um procedimento pdf (objeto ListInvoice)passando um parâmetro (InvoiceId). No procedimento chamado se declarou o parâmetro que recebe(em sua seção de regras, mediante a regra parm).

No segundo exemplo é utilizado UDP para chamar um procedimento (objeto GetDiscount) passandodois parâmetros (ProductId, CustomerId). Agora observemos na sintaxe da chamada aoprocedimento, que o mesmo retornará um valor (na variável &disc). Por este motivo no procedimentosolicitado são declarados três parâmetros utilizando a regra parm: os dois parâmetros recebidos + oparâmetro de retorno no último lugar.

Podemos ver então que quando se utiliza CALL para chamar um objeto enviando-lhe N-parâmetros,se devem declarar os N parâmetros (posicionais e do mesmo tipo de dados que os enviados) noobjeto solicitado mediante a regra parm.

Por outro lado quando se utiliza UDP para chamar um objeto enviando N parâmetros (exceto que sejao caso particular de um Data Provider, caso que veremos mais adiante):

• na regra parm do objeto chamado se devem declarar N + 1• o último parâmetro declarado na regra parm do objeto chamado corresponde ao que se encontra nocomeço de tudo na chamada, é dizer, ao que recebe o valor retornado.

• em algum lugar do objeto chamado deverá ser atribuído valor ao parâmetro de retorno.

Page 5: 04 comunicacao entreobjetos-cursogxxbr

���

Ao definir uma Chamada a um objeto (seja utilizando CALL ou UDP), se tivermos que enviar dadospor parâmetro ao objeto chamado, precisamos determinar se enviaremos atributos e/ou variáveis: seum dado a ser enviado por parâmetro, se encontra no objeto que o chamou, em um atributo, teráque enviar o mesmo; e se estiver numa variável, terá que enviar a variável.

Todavia, ao declarar a lista de parâmetros no objeto chamado, o programador GeneXus deverádecidir para cada parâmetro, se o declara como um atributo ou uma variável, independentemente decomo tenha sido enviado.

Qual é a diferença entre declarar o parâmetro como variável ou como atributo na regra parm doobjeto chamado? Se for declarar como uma variável, poderá utilizar livremente a mesma lógica doobjeto chamado: pode utilizá-la como condição de filtro por igualdade, por maior, maior ou igual,menor, menor ou igual, LIKE, etc.; poderá utilizar para alguma operação aritmética, como bandeira(flag), ou para o que se queira. Se for declarar um atributo, automaticamente o mesmo atuará comofiltro por igualdade no objeto, não sendo possível modificar o valor recebido.

Quando cheguemos à etapa do curso na qual podemos chamar a procedimentos pdf para listagem,passando parâmetros, assim como a outros objetos, poderemos terminar de compreender melhoreste tema.

Page 6: 04 comunicacao entreobjetos-cursogxxbr

���

Como pode-se perceber claramente na sintaxe do exemplo o primeiro parâmetro definido é de saída, osegundo parâmetro é de entrada, e o quarto parâmetro é de entrada-saída. Quando não for especificado,como é o caso do terceiro parâmetro do exemplo, dependerá do seguinte:

• se o objeto foi chamado com CALL, o parâmetro, será de entrada-saída.• se o objeto foi chamado com UDP, e se trata do último parâmetro, será de saída; e se for outro parâmetrodiferente do último, dependerá da linguagem de operação.

Declarar explicitamente como se quer que cada parâmetro opere, possui as seguintes vantagens:1. Melhor especificação da semântica das interfaces; ou seja, o GeneXus e o programador quando trabalhamcom um objeto, fica claro:

- se o mesmo chegar com valor e depois da execução do objeto chamado, é devolvido aoobjeto que o chamou o valor que tenha ficado (inout).

- se o mesmo chegar com valor e depois da execução do objeto chamado, não devolve aoobjeto que o chamou o valor que tenha ficado (in).

- se o mesmo não chegar com valor e depois da execução do objeto que o chamado, sedevolve ao objeto que o chamou o valor que tenha ficado (out).

2. Independência da linguagem de geração; isto é, se define explicitamente como deseja que cada parâmetroopere, ao gerar as aplicações utilizando diferentes linguagens de geração não muda o comportamento dosparâmetros baseados ao comportamento por default da linguagem de geração correspondente.

3. Otimizar a passagem de parâmetros de acordo com a arquitetura gerada (sendo uma vantagem quecontrasta com a anterior); isto se refere que para a maioria das linguagens é mais eficiente passar osparâmetros por referência (inout) que por valor (in / out); mas em Java, por exemplo, os parâmetros somentepodem ser passados por valor, para poder obter esta funcionalidade de passá-los por referência é necessárioque exista conversões de parâmetros, que pode redundar em um overhead importante; por outro lado, quandose trata de aplicações distribuídas (por exemplo Java com RMI ou HTTP), a utilização de parâmetros de tipoout têm a vantagem de que não é necessário enviar parâmetro na chamada, diferente de definir osparâmetros inout (tem que passar todos parâmetros); isto tem como conseqüência que serão enviados maisbytes do que os necessários, o que é inconveniente especialmente nos casos como Internet.

Page 7: 04 comunicacao entreobjetos-cursogxxbr

���

A função Link se associa à propriedade link de um controle dentro de qualquer evento de umatransação ou web panel, tendo como resultado que ao fazer click sobre dito controle se realiza achamada ao objeto URL referenciada no Link.

PgmName (o objeto chamado) poderá ser uma web panel, transação, ou procedimento PDF1.

______________________________________________________________________________1 também um procedimento HTTP, mas não aprofundaremos sobre este conceito neste curso

Page 8: 04 comunicacao entreobjetos-cursogxxbr

���

O comando Link pode ser utilizado dentro de qualquer evento de uma transação ou web panel¹

Quando se execute o evento, ao chegar a sentença com o comando Link, se redirecionará em formaautomática à URL especificada.

No caso de utilizar-se o comando Link como no exemplo 1, chamando um PgmName (sendoPgmName uma web panel, transação ou procedimento PDF), será equivalente à utilização do Call.Opcionalmente se poderá passar parâmetros ao objeto chamado, devendo declarar-se os mesmos noobjeto chamado, com a regra parm.

_____________________________________________________________________________1 também um procedimento HTTP, mas não aprofundaremos sobre este conceito neste curso