Os objetos GeneXus podem comunicar-se entre eles ou com outros programas externos.
Um objeto GeneXus pode chamar ou ser ch...
CALL - Permite chamar a um objeto GeneXus ou a um programa externo, podendo passar
parâmetros ou não.
UDP (User Defined Pr...
Aqui mostramos um exemplo do uso do CALL para realizar uma chamada e outro exemplo do uso do
UDP.
Dependendo de qual objet...
Ao definir uma Chamada a um objeto (seja utilizando CALL ou UDP), se tivermos que enviar dados
por parâmetro ao objeto cha...
Como pode-se perceber claramente na sintaxe do exemplo o primeiro parâmetro definido é de saída, o
segundo parâmetro é de ...
A função Link se associa à propriedade link de um controle dentro de qualquer evento de uma
transação ou web panel, tendo ...
O comando Link pode ser utilizado dentro de qualquer evento de uma transação ou web panel¹
Quando se execute o evento, ao ...
04 comunicacao entreobjetos-cursogxxbr
Upcoming SlideShare
Loading in...5
×

04 comunicacao entreobjetos-cursogxxbr

322

Published on

Genexus Course

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
322
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

04 comunicacao entreobjetos-cursogxxbr

  1. 1. 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ções através de parâmetros. Veremos em seguida como chamar desde um objeto a outro, e como especificar os parâmetros (no objeto chamador e no chamado) para a troca da informação. O esquema apresentado acima ilustra as possíveis interações entre objetos GeneXus para uma aplicação Web. Observe que a flecha simples entre Web Panel e Procedimento PDF (assim como entre Transação e Procedimento PDF) indica que uma web panel poderá chamar um Procedimento PDF mas um Procedimento PDF não poderá chamar uma web panel (ou transação Web).
  2. 2. CALL - Permite chamar a um objeto GeneXus ou a um programa externo, podendo passar parâmetros ou não. UDP (User Defined Procedure)– Permite chamar a um objeto GeneXus ou programa externo tanto passando 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 objeto com interface uma vez chamado não devolve o controle ao chamador, porque a UDP é utiliza unicamente para chamar Procedimentos e Data Providers (devido que estes cumprem com a condiçã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 que certo atributo é uma formula e que a definição da mesma consiste no chamada a um procedimento utilizando UDP. Quando na sintaxe da chamada se escreve o nome do objeto chamado e nenhum método de chamada, 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 de parâ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.
  3. 3. Aqui mostramos um exemplo do uso do CALL para realizar uma chamada e outro exemplo do uso do UDP. Dependendo de qual objeto for o chamador, estas chamadas poderão escrever-se em uma seção ou outra do mesmo, mas independentemente disso, aqui mostraremos que CALL permite chamar um objeto com estilo de chamada a um programa, enquanto que UDP uma chamada a um objeto com estilo 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) passando dois parâmetros (ProductId, CustomerId). Agora observemos na sintaxe da chamada ao procedimento, que o mesmo retornará um valor (na variável &disc). Por este motivo no procedimento solicitado são declarados três parâmetros utilizando a regra parm: os dois parâmetros recebidos + o parâ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) no objeto solicitado mediante a regra parm. Por outro lado quando se utiliza UDP para chamar um objeto enviando N parâmetros (exceto que seja o 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 no começ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.
  4. 4. Ao definir uma Chamada a um objeto (seja utilizando CALL ou UDP), se tivermos que enviar dados por parâmetro ao objeto chamado, precisamos determinar se enviaremos atributos e/ou variáveis: se um 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 de como tenha sido enviado. Qual é a diferença entre declarar o parâmetro como variável ou como atributo na regra parm do objeto chamado? Se for declarar como uma variável, poderá utilizar livremente a mesma lógica do objeto 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á como filtro 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 melhor este tema.
  5. 5. Como pode-se perceber claramente na sintaxe do exemplo o primeiro parâmetro definido é de saída, o segundo 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âmetro diferente 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 trabalham com um objeto, fica claro: - se o mesmo chegar com valor e depois da execução do objeto chamado, é devolvido ao objeto 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 ao objeto 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, se devolve 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âmetro opere, ao gerar as aplicações utilizando diferentes linguagens de geração não muda o comportamento dos parâ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 que contrasta com a anterior); isto se refere que para a maioria das linguagens é mais eficiente passar os parâmetros por referência (inout) que por valor (in / out); mas em Java, por exemplo, os parâmetros somente podem ser passados por valor, para poder obter esta funcionalidade de passá-los por referência é necessário que exista conversões de parâmetros, que pode redundar em um overhead importante; por outro lado, quando se trata de aplicações distribuídas (por exemplo Java com RMI ou HTTP), a utilização de parâmetros de tipo out têm a vantagem de que não é necessário enviar parâmetro na chamada, diferente de definir os parâmetros inout (tem que passar todos parâmetros); isto tem como conseqüência que serão enviados mais bytes do que os necessários, o que é inconveniente especialmente nos casos como Internet.
  6. 6. A função Link se associa à propriedade link de um controle dentro de qualquer evento de uma transação ou web panel, tendo como resultado que ao fazer click sobre dito controle se realiza a chamada 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
  7. 7. 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 forma automática à URL especificada. No caso de utilizar-se o comando Link como no exemplo 1, chamando um PgmName (sendo PgmName 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 no objeto chamado, com a regra parm. _____________________________________________________________________________ 1 também um procedimento HTTP, mas não aprofundaremos sobre este conceito neste curso

×