You are on page 1of 8

56

Los objetos GeneXus pueden comunicarse entre ellos o con otros programas externos. Un objeto GeneXus puede llamar informacin a travs de parmetros. o ser llamado por otro objeto, intercambiando

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).

57

Call Permite invocar a un objeto pasarle parmetros, como pasndole.

GeneXus

un programa externo, tanto

sin

Udp - 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. Nota: En ambiente Web, cuando se invoca a un objeto que tiene formulario, al finalizar su ejecucin, no retorna al objeto llamador. Por esto, 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) se puede escribir en distintas partes del objeto llamador(reglas, eventos, etc.), 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 global. Es decir, se define que cierto atributo es una frmula global y que la definicin de la misma consiste en la invocacin a un procedimiento utilizando Udp. Parm Cuando declarada la lista regla: Parm. un de objeto es invocado desde parmetros que recibe. Esta otro con declaracin parmetros, se realiza debe tener mediante la

A continuacin daremos ms detalles acerca del uso de Call, Udp y Parm.

58

Aqu se muestra un ejemplo de uso de Call para realizar una invocacin y otro ejemplo de uso de Udp. 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 mediante la regla Parm (en su seccin de reglas). En el segundo ejemplo se est utilizando Udp para invocar a un procedimiento (objeto GetDiscount) pasndole dos parmetros(ProductId, CustomerId). Si observamos la sintaxis de la invocacin al procedimiento, vemos 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. Resumen: Cuando se utiliza Call para invocar a un objeto envindole N parmetros, se deben declarar los N parmetros en el objeto invocado mediante la regla Parm. El orden en el que se enviaron los parmetros, ser el orden en el cual se recibirn, por lo que debe coincidir el tipo de datos de cada parmetro enviado con el recibido. 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 parmetros. El ltimo parmetro declarado en la regla Parm del objeto invocado, corresponde al que se encuentra al principio de todo en la invocacin. En algn lugar del objeto invocado se le deber asignar valor al parmetro de retorno.

59

Al definir una invocacin a un objeto (ya sea utilizando Call o Udp), si se tienen que enviar datos por parmetro al objeto invocado, resulta fcil determinar si enviar atributos y/o variables:

-si el dato a ser que enviar al mismo

enviado se

encuentra se

en

el

objeto llamador objeto

en

un

atributo,

habr

-si el dato a ser enviado habr que enviar a la misma

encuentra

en el

llamador

en una variable,

Sin embargo, al declarar la lista de parmetros en el objeto invocado, el programador GeneXus deber decidir para cada parmetro, si declararlo mediante un atributo o una variable, independientemente de cmo haya sido enviado. Cul es la diferencia entre declarar parmetro como variable o como atributo? en la regla Parm del objeto invocado un

Si se declara una variable, se la podr utilizar libremente en la lgica del objeto invocado: se la podr utilizar como condicin de filtro por igualdad, por mayor, mayor o igual, menor, menor o igual, LIKE, etc.; se la podr utilizar para alguna operacin aritmtica, o lo que se necesite. Y si en cambio se declara un atributo, automticamente el mismo actuar como filtro por igualdad en el objeto, no siendo posible modificar el valor recibido.

Cuando lleguemos a la etapa del curso en la cual procedimientos pdf para listados, pasndoles parmetros, objetos, podremos terminar de comprender mejor este tema.

podamos invocar a as como a otros

60

Como se puede percibir claramente parmetro definido es de salida, el cuarto parmetro es de entrada-salida. Cuando no se especifica nada, sintaxis, depender de lo siguiente: como

en la segundo

sintaxis del ejemplo, el primer parmetro es de entrada, y el

es

el

caso

del

tercer

parmetro

de

la

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) Mayor claridad a simple vista: Tanto para el programador cuando trabaje con un objeto, como para GeneXus ser claro al observar la regla Parm, el uso de cada parmetro sin tener que analizar la codificacin. 2) Independencia del lenguaje de generacin: 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): Para la mayora de los lenguajes es ms eficiente pasar los parmetros como inout; si embargo en Java por ejemplo, los parmetros solo se pueden pasar o bien como in o como out, entonces para lograr la funcionalidad de pasarlos como inout es necesario hacer conversiones que pueden redundar en un overhead importante. Por esto, de generar en Java, resulta eficiente especificar si los parmetros se reciben como in o out.

61

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. ObjectName (el objeto procedimiento PDF. invocado) podr ser una transaccin o web panel o

62

El comando Link puede ser utilizado dentro de cualquier evento de una transaccin o web panel1. 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 como en el ejemplo 1, 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.

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

63

You might also like