Você está na página 1de 8

Comunicacin entre objetos

A continuacin mencionaremos los objetos Web y de qu manera interactan entre ellos.

34

Comunicacin entre objetos


Data Provider Procedimiento

Web Panel

Transaccin

Procedimiento PDF

Los objetos GeneXus pueden comunicarse entre ellos o con otros programas externos. Un objeto GeneXus puede llamar o ser llamado por otro objeto, intercambiando informacin a travs de parmetros. Veremos a continuacin cmo invocar desde un objeto a otro, y cmo especificar los parmetros (en el objeto llamador y en el llamado) para el intercambio de la informacin. El esquema presentado arriba ilustra las posibles interacciones entre objetos GeneXus para una aplicacin Web. Obsrvese que la flecha simple entre Web Panel y Procedimiento PDF (as como entre Transaccin y Procedimiento PDF) indica que un Web Panel podr invocar a un Procedimiento PDF pero un Procedimiento PDF no podr invocar a un Web Panel (o Transaccin Web).

35

Comunicacin entre objetos


Posibilidades:
1) PgmName.Call(par , , par ) 1 N
Parm(par1 , , parN);
/*Invocacin a PgmName*/ /*Declaracin de parmetros en el objeto invocado*/

puede omitirse

2)

att|&var = PgmName.Udp(par1, , parN) /*Invocacin a PgmName*/ Parm(par1, , parN , parsalida);


/*Declaracin de parmetros en el objeto invocado*/

CALL - Permite invocar a un objeto GeneXus o a un programa externo, tanto sin pasarle parmetros, como pasndole. UDP (User Defined Procedure) - Permite invocar a un objeto GeneXus o programa externo tanto sin pasarle parmetros como pasndole, y con la particularidad de que el programa llamado retornar necesariamente al menos un valor al programa que lo invoc. En ambientes Web, un objeto con interfaz una vez invocado no devuelve el control al llamdor, por lo que UDP se utiliza nicamente para invocar a Procedimientos y Data Providers (debido a que estos cumplen la condicin de ejecutar y devolver el control al llamador). Una invocacin (ya sea con CALL o UDP) podr escribirse en distintas partes del objeto llamador, dependiendo de si el mismo es una Transaccin, Web Panel, procedimiento, etc. A su vez UDP puede utilizarse tambin en la definicin de un atributo frmula. Es decir, se define que cierto atributo es una frmula y que la definicin de la misma consiste en la invocacin a un procedimiento utilizando UDP. Cuando en la sintaxis de la invocacin se escribe el nombre del objeto invocado y ningn mtodo de invocacin, se asume que se est invocando con udp, por lo que puede omitirse y escribirse directamente: att|&var = PgmName( par1, ..., parN) PARM Cuando un objeto es invocado desde otro con parmetros, debe tener declarada la lista de parmetros que recibe. Esta declaracin se realiza mediante la regla: PARM.

36

Comunicacin entre objetos


Ejemplos:
1) Desde la Transaccin Invoice invocamos un procedimiento para imprimir lafactura: ListInvoice.Call(InvoiceId)
Y en las reglas del procedimento ListInvoice:
Parm(InvoiceId)

2)Ej:

&discount = GetDiscount.udp(ProductId,CustomerId) Parm(ProductId,CustomerId , &disc);

En el proc GetDiscount

Aqu mostramos un ejemplo de uso de CALL para realizar una invocacin y otro ejemplo de uso de UDP. Dependiendo de qu objeto llamador se trate, estas invocaciones podrn escribirse en una seccin u otra del mismo, pero independientemente de eso, aqu apuntamos a mostrar que CALL permite invocar a un objeto con estilo de invocacin a un programa, mientras que UDP invoca a un objeto con estilo de invocacin a una funcin. En el primer ejemplo se est utilizando CALL para invocar a un procedimiento pdf (objeto ListInvoice) pasndole un parmetro (InvoiceId). En el procedimiento invocado se ha declarado el parmetro que recibe (en su seccin de reglas, mediante la regla parm). En el segundo ejemplo se est utilizando UDP para invocar a un procedimiento (objeto GetDiscount) pasndole dos parmetros (ProductId, CustomerId). Ahora, observemos en la sintaxis de la invocacin al procedimiento, que el mismo retorna un valor (en la variable &disc). Por este motivo, en el procedimiento invocado se han declarado tres parmetros utilizando la regla parm: los dos parmetros recibidos + el parmetro de retorno en ltimo lugar. Podemos ver entonces que cuando se utiliza CALL para invocar a un objeto envindole N parmetros, se deben declarar los N parmetros (posicionales y del mismo tipo de datos que los enviados) en el objeto invocado mediante la regla parm. En cambio cuando se utiliza UDP para invocar a un objeto envindole N parmetros (a menos que se trate del caso particular de un Data Provider, caso que veremos ms adelante): en la regla parm del objeto invocado se deben declarar N + 1. El ltimo parmetro declarado en la regla parm del objeto invocado corresponde al que se encuentra al principio de todo en la invocacin, es decir, al que recibe el valor retornado. En algn lugar del objeto invocado se le deber asignar valor al parmetro de retorno.

37

Definicin de tipo de pasaje de parmetros (in, out, inout)


Paracadaparmetroquesedeclaraenlareglaparm,esposibledefinirsise deseaqueelmismoopere:
deentrada(in) desalida(out) deentradasalida(inout)

Ejemplo:parm(out:&par1,in:&par2,&par3,inout:&par4); Ventajas:
Mejorespecificacindelasemnticadelasinterfaces. Independenciadellenguajedegeneracin. Optimizar el pasaje de parmetros de las aplicaciones de acuerdo a la arquitectura en la que stas se implementan (ventaja contrapuesta a la anterior).

Como se puede percibir claramente en la sintaxis del ejemplo, el primer parmetro definido es de salida, el segundo parmetro es de entrada, y el cuarto parmetro es de entrada-salida. Cuando no se especifica nada, como es el caso del tercer parmetro de la sintaxis, depender de lo siguiente: si el objeto fue invocado con CALL, el parmetro, ser de entrada-salida. si el objeto fue invocado con UDP, y se trata del ltimo parmetro, ser de salida; y si se trata de otro parmetro distinto del ltimo, depender del lenguaje de generacin. Declarar explcitamente cmo se desea que cada parmetro opere, tiene las siguientes ventajas: 1. Mejor especificacin de la semntica de las interfaces; es decir, tanto para GeneXus como para el programador cuando trabaje con un objeto, ser claro: - si el mismo vendr con valor y luego de la ejecucin del objeto invocado, se devolver al objeto invocador el valor con que haya quedado (inout). - si el mismo vendr con valor y luego de la ejecucin del objeto invocado, no se devolver al objeto invocador el valor con que haya quedado (in). - si el mismo no vendr con valor y luego de la ejecucin del objeto invocado, se devolver al objeto invocador el valor que tenga (out). 2. Independencia del lenguaje de generacin; es decir, si se define explcitamente cmo se desea que cada parmetro opere, al generar las aplicaciones utilizando diferentes lenguajes de generacin no estar cambiando el comportamiento de los parmetros en base al comportamiento por defecto del lenguaje de generacin correspondiente. 3. Optimizar el pasaje de parmetros de acuerdo a la arquitectura en la que stas se generen (siendo una ventaja contrapuesta a la anterior); esto se refiere a lo siguiente: para la mayora de los lenguajes es ms eficiente pasar los parmetros por referencia (inout) que por valor (in / out); pero en Java, por ejemplo, los parmetros solo se pueden pasar por valor, por lo que para lograr la funcionalidad de pasarlos por referencia es necesario hacer conversiones de parmetros, lo cual puede redundar en un overhead importante; por otro lado, cuando se trata de aplicaciones distribuidas (por ejemplo Java con RMI o HTTP), la utilizacin de parmetros de tipo out tiene la ventaja de que no es necesario enviar al parmetro en la invocacin, a diferencia de si los parmetros se definen de inout (que implica que haya que pasar todos los parmetros); esto tiene como consecuencia que se enven ms bytes de los necesarios, lo cual es inconveniente especialmente en entornos tales como Internet.

38

Comunicacin entre objetos Web


Msposibilidadesparadefinirinvocaciones FuncinLink 1) control.Link = PgmName.Link([,par1 , parN])
Ej: imagen.Link = Customer.Link() Los parmetros son opcionales, y en caso de haber, se declaran con regla parm

2)

control.Link = Link(URL)
Ej: imagen.Link = Link(http://www.artech.com.uy)

3)

control.LinkTarget = _blank
Ej: imagen.LinkTarget = _blank imagen.Link = Link(http://www.artech.com.uy)

La funcin Link se asocia a la propiedad link de un control dentro de cualquier evento de una Transaccin o Web Panel, teniendo como resultado que al hacer clic sobre dicho control se realizar la llamada al objeto o URL referenciada en el link. PgmName (el objeto invocado) podr ser un Web Panel, Transaccin, o procedimiento PDF .

----------------------------------------------------------------------------------------------------------------------------------1 tambin un procedimiento HTTP, pero no profundizaremos sobre este concepto en este curso

39

Comunicacin entre objetos Web


Msposibilidadesparadefinirinvocaciones ComandoLink

1)

PgmName.Link([,par1 , parN]) Ej: Customer.Link(CustomerId)

2)

Link(URL) Ej: Link(http://www.google.com)

El comando Link puede ser utilizado dentro de cualquier evento de una Transaccin o Web Panel. Cuando se ejecute el evento, al llegar a la sentencia con el comando Link, se redireccionar en forma automtica a la URL especificada. En caso de utilizarse el comando Link invocando a un PgmName (siendo PgmName un Web Panel, Transaccin o procedimiento PDF), ser equivalente a la utilizacin de Call. Opcionalmente se podrn pasar parmetros al objeto invocado, debiendo declararse los mismos en el objeto llamado, con la regla parm.

40

Diferencias entre Call y Link


Call Puedenhacersecallsa: WebObjects Procedimientos Link Sonpermitidoslinksa: WebObjects URL

InvocaaunobjetoGeneXusoURLreferenciadaenellink

Para relacionar Web Objects dentro de una aplicacin se dispone de los comandos call, link y la funcin link. A continuacin se realiza una comparacin para aclarar las diferencias entre los mismos. Desde un web object se puede hacer CALL a: Web Objects Procedimientos La funcin y el comando LINK puede hacer referencia a: Web Objects Pginas HTML estticas NOTAS: 1. La funcin link se dispara cuando el usuario hace clic sobre el mismo. 2. El comando link, en cambio se ejecuta en forma automtica cuando se ejecuta el evento. A diferencia del call, el comando link permite redireccionar a otros sitios Web o pginas dentro de otros directorios del sitio donde se est ejecutando el Web Object.

41

Você também pode gostar