Sunteți pe pagina 1din 11

PROGRAMACIN DE FORMULARIOS Introduccin

Como ya hemos comentado, podemos introducir cdigo en lenguaje X++ en muchas partes del sistema. Los formularios no son una excepcin. Existen distintos mbitos en los formularios donde podemos aadir cdigo. Estos mbitos son los siguientes:

Formulario propiamente dicho Origen de datos del formulario Controles del formulario

Dependiendo de la funcionalidad que queramos implementar, escribiremos el cdigo en un mbito o en otro. No obstante, normalmente, se siguen las siguientes reglas: 1. 2. 3. Codificamos en los mtodos del propio formulario, cuando queremos controlar la funcionalidad general del mismo. Codificamos en los mtodos del origen de datos, cuando queremos controlar la funcionalidad de los datos que aparecen en el formulario. Codificamos en los controles, cuando queremos controlar la funcionalidad de alguno de los controles o elementos especficos que aparecen en el formulario.

Variables del sistema


Anteriormente se dijo que todas las variables deben ser declaradas antes de poder ser utilizadas. Sin embargo, cuando trabajamos con los formularios, algunas variables son declaradas implcitamente por el sistema. Adems de estas variables, es conveniente recordar que en cualquier momento, la variable this nos da acceso al elemento al que pertenece el mtodo que estamos modificando. A continuacin se describen las variables de sistema de los formularios y los elementos a los que dan acceso: Formulario Se trata de una variable de tipo FormRun, que recibe el nombre de element y que referencia al objeto formulario. Nos permite acceder a los mtodos definidos a nivel de formulario. La variable element se utiliza normalmente en asignaciones como la que mostramos a continuacin: Tb. Existe la variable form notifyDate = element.design().control(Control::NotifyDate); Tabla Por cada uno de los orgenes de datos del formulario, disponemos de una variable llamada como stos, que nos referencia la tabla que utilizamos en dicho origen de datos. Por ejemplo, suponiendo que el origen de datos del formulario se llamara DatosFormulario, tendramos una variable con ese nombre que hara referencia a la tabla. En realidad, en un momento dado esta variable nos da acceso al registro activo de la tabla, de manera que podremos: 1. Llamar a un mtodo definido en la tabla. Por ejemplo: DatosFormulario.setDefault(ReadWrite::Write); 2. Hacer referencia a los campos individuales de la tabla. Por ejemplo: number = DatosFormulario.accountNo; Origen de datos Tendremos tambin una variable llamada como el origen de datos del formulario con el sufijo _DS para hacer referencia a las propiedades y los mtodos de dicho origen de datos. Por ejemplo, en el caso de que nuestro origen de datos se llamara DatosFormulario, tendramos una variable llamada DatosFormulario_DS. Se trata de una variable de tipo FormDataSource que nos da la posibilidad de ejecutar directamente sus mtodos. Por ejemplo: DatosFormulario_DS.reSearch(); Consulta Existen dos variables que nos permiten acceder a la consulta de un formulario:

1.

Una variable de tipo Query llamada como el origen de datos del formulario con el sufijo _Q para hacer referencia a las propiedades y los mtodos de la consulta (query). Por ejemplo, en nuestro caso, tendramos una variable llamada DatosFormulario_Q. Esto nos da la posibilidad de ejecutar directamente sus mtodos. Por ejemplo:

DatosFormulario_Q.levelNo(1);

1.

Una variable de tipo QueryRun llamada como el origen de datos del formulario con el sufijo _QR para hacer referencia a las propiedades y los mtodos de una instancia en ejecucin de la consulta de dicho origen de datos (queryRun). Por ejemplo, en nuestro caso, tendramos una variable llamada DatosFormulario_QR. Esto nos da la posibilidad de ejecutar directamente sus mtodos. Por ejemplo:

DatosFormulario_QR.getNo(1); Es importante sealar que en versiones anteriores de Axapta, no existan las variables declaradas implcitamente para la consulta (_Q) y para la instancia en ejecucin de la consulta (_QR). Esto hace que nos podamos encontrar en muchos mtodos todava la forma tradicional de acceder a ellas desde cdigo. Para acceder a una consulta, debamos hacer una declaracin de variable, tras la cual podamos utilizar la variable declarada para acceder a los mtodos de dicha consulta. Por ejemplo, dentro de un origen de datos podramos acceder a su consulta de la siguiente forma: Ejemplo de declaracin de una consulta Query q; ; q = this.query(); q.levelNo(1); Para acceder a una instancia en ejecucin de una consulta, tambin debamos hacer una declaracin de variable. Siguiendo con el mismo ejemplo lo haramos de la forma siguiente: Ejemplo de declaracin de instancia en ejecucin de una consulta QueryRun qr; ; qr = this.queryRun(); qr.getNo(1); En ambos casos la variable this hara referencia al objeto en ejecucin en ese momento, es decir, al origen de datos.

Mtodos del formulario


Cuando creamos un nuevo formulario el sistema genera automticamente un nodo de mtodos. Adems de modificar los mtodos creados por el sistema, el desarrollador puede aadir nuevos mtodos con el propsito de aadir funcionalidad lgica al formulario. 1. Es interesante recordar, que siempre que sea posible, se debe introducir el cdigo en la tabla de la que se obtienen los datos para el formulario. Los mtodos escritos en la tabla son accesibles desde cualquier formulario que utilice dicha tabla. En trminos de reutilizacin y herencia, aadir cdigo en los mtodos de un formulario es menos eficiente que introducirlo directamente en la tabla.

Mtodos de sistema El nodo contiene lo que se llaman mtodos virtuales, que son mtodos implementados en MorphX, pero que pueden ser sobrecargados para cambiar el comportamiento por defecto de los formularios. En estos mtodos la funcin llamada super() activa la ejecucin del mtodo implementado por MorphX. Lista de mtodos Los formularios en MorphX tienen los siguientes mtodos de sistema: Mtodo Se ejecuta cuando... se cierra un formulario. Utilizaremos este mtodo, para aadir nuestras propias comprobaciones a las que realiza el sistema cuando cerramos un formulario. se cierra un formulario. Dependiendo del estado en el cual cierre el formulario, el mtodo Close se activa desde CloseCancel o desde CloseOK. Close el usuario pulsa con el ratn sobre el botn cancelar o cuando pulsamos le techa ESC. Cuando cerramos un formulario mediante el mtodo CloseCancel, no grabamos las modificaciones.

CanClose

CloseCancel

CloseOK

el usuario pulsa con el ratn el botn Aceptar.

DoApply

el usuario cierra un formulario modal.

se cierra el formulario. El objetivo de este mtodo es destruir el objeto y liberar la memoria. Finalize

FirstField

nos movemos al primer campo de un formulario. abrimos el formulario.

Init nos movemos al ltimo campo de un formulario. LastField

NextField

nos movemos al siguiente campo dentro de un formulario.

NextGroup

nos movemos al siguiente grupo de campos dentro de un formulario.

PrevField

nos movemos al campo anterior dentro de un formulario.

PrevGroup

nos movemos al grupo de campos anterior dentro de un formulario.

Run

abrimos el formulario, inmediatamente despus del mtodo Init, para mostrar el formulario.

Task

el usuario realiza alguna tarea en el formulario, como por ejemplo: utilizar la barra de herramientas, el men o el teclado. Mtodos principales y su funcin A continuacin vamos a describir algunos de los mtodos ms utilizados en los formularios, que por su importancia merecen un tratamiento algo ms exhaustivo. Mtodo ClassDeclaration En este mtodo se definen las variables globales del formulario. Es decir, aqullas cuyo mbito es el formulario en su totalidad y, por lo tanto, pueden ser utilizadas en cualquier mtodo del formulario, de los orgenes de datos o de los controles. Como ejemplo, veamos el mtodo ClassDeclaration del formulario CustTable. Ejemplo de mtodo ClassDeclaration class FormRun extends ObjectRun { NumberSeq numberSeq; CustAccount numAllocated; FormStringControl contactPerson; FormStringControl contactPersonId; } Mtodo Init Se ejecuta cuando abrimos el formulario. Se utiliza, bsicamente, para la inicializacin de variables. Debemos realizar una llamada al mtodo super(), ya que ste es el encargado de crear una instancia en ejecucin del formulario. Crea tambin el origen de datos, mediante una llamada al mtodo Init del origen de datos. Antes de la llamada al mtodo super(), podemos modificar el formulario mediante los mtodos de la clase FormBuild. Tras el mtodo super() y una vez creado el formulario, podemos inicializar variables. Como ejemplo, tenemos el mtodo Init del formulario CustTable. Ejemplo de mtodo Init void init() { super(); contactPersonId = element.control(control::ContactPersonId);

TaxVATNumTable::enableLookupVatNum(vatNum); } Mtodo Run Se ejecuta cuando abrimos un formulario, inmediatamente despus del mtodo Init. La llamada al mtodo super() hace que la ventana aparezca en la pantalla, y realiza una bsqueda en la base de datos para obtener los datos que deben mostrarse en el formulario. La consulta la realiza activando el mtodo ExecuteQuery() del origen de datos. Mtodo Close Se ejecuta cuando cerramos un formulario. La llamada a super() cierra la ventana del formulario, realiza las actualizaciones en la base de datos y activa el indicador booleano Closed. Dependiendo del estado en el cual cierre el formulario, el mtodo Close se activa desde CloseCancel o desde CloseOK. Como ejemplo, tenemos el mtodo Close del formulario CustTable. Ejemplo de mtodo Close void close() { if (!custTable.recId && numberSeq) numberSeq.abort(); super(); } Acceso a los controles desde el cdigo Desde cualquier mtodo podemos acceder a las propiedades y mtodos de los controles del formulario. Para ello, necesitamos tener una referencia al control, que se puede obtener de dos formas:

1.

Mediante la propiedad Autodeclaration de los controles

1.

Mediante mtodos de las clases de sistema

Todos los controles de un formulario tienen una propiedad llamada Autodeclaration. Por defecto, esta propiedad est desactivada, pero si la activamos, el sistema crea de modo automtico una variable con el mismo nombre del control que nos da acceso a todas sus propiedades y mtodos. Esta propiedad es una novedad de la versin 2.0 de Axapta, por lo tanto nos encontraremos que en muchas ocasiones no se hace uso de ella y se utilizan las clases de sistema para hacer referencia a los controles. Sin embargo, es recomendable hacer uso de las propiedades de los elementos de la aplicacin, ya que nos ahorran cdigo innecesario. Para crear una referencia a un control de un formulario mediante el segundo mtodo debemos seguir los siguientes pasos: 1. Declarar una variable de tipo control 2. Inicializar la referencia La variable de referencia debe ser declarada en el mtodo ClassDeclaration del formulario. El tipo de datos de la variable depende del tipo de control al que queramos hacer referencia. Por ejemplo, para hacer referencia a un campo de texto, deberemos crear una variable de tipo FormStringControl, para hacer referencia a un botn, la variable ser de tipo FormButtonControl, etc. Estas clases pueden encontrarse en la documentacin del sistema en el rbol de Objetos de la Aplicacin. Ejemplo FormButtonControl button; La inicializacin de las variables debe hacerse en el mtodo Init, haciendo uso de los mtodos de la clase de sistema FormRun. Suponiendo que en nuestro formulario tuviramos un control de tipo botn llamado ButtonName, tendramos el siguiente ejemplo, donde se asignara dicho botn a la variable button: Ejemplo button = element.design().control(Control::ButtonName); Una vez inicializada la variable, podemos cambiar las propiedades del control en cualquier momento utilizando sus propios mtodos. A continuacin mostramos un ejemplo de esto: Ejemplo button.enabled(false); A continuacin presentamos un ejemplo, donde podemos observar la asignacin de controles de un formulario a variables previamente declaradas. Ejemplo de declaracin de controles class FormRun extends ObjectRun { FormCheckBoxControl includeAll; FormStringControl interestNote;

FormDateControl }

interestDate;

void init() { super(); includeAll = element.control(control::ShowOpen); interestNote = element.control(control::InterestNote); interestDate = element.control(control::InterestDate); } Por otra parte, si sabemos que no vamos a necesitar hacer referencia al control ms de una vez, podemos eliminar la variable y cambiar la propiedad de dicho control en una sola sentencia. Ejemplo element.design().control(Control::ButtonName).enabled(false);

Mtodos del origen de datos


Cuando creamos un nuevo formulario debemos definir un origen de datos, que nos da acceso a la informacin almacenada en la base de datos. Al definir un origen de datos, se crea automticamente un nodo de mtodos. Mtodos de sistema Lista de mtodos Los orgenes de datos en los formularios tienen los siguientes mtodos de sistema: Mtodo Se ejecuta cuando...

Active

el usuario cambia de registro activo.

Create

el usuario crea un nuevo registro.

Delete

el usuario borra un registro.

ExecuteQuery

abrimos el formulario y el sistema accede a la base de datos para recuperar la informacin que se va a mostrar al usuario.

FindRecord

se ejecuta desde el mtodo FindValue.

FindValue

el usuario pulsa con el ratn sobre el comando Buscar (Find) en el men contextual.

First

nos movemos al primer registro.

Init

se abre el formulario.

InitValue

se crea un nuevo registro. Su propsito es dar valores iniciales al nuevo registro.

Last

nos movemos al ltimo registro.

LinkActive

el usuario cambia de registro en un formulario que tiene su origen de datos enlazado con otro origen de datos.

Next

nos movemos al siguiente registro.

Prev

nos movemos al registro anterior.

Print

el usuario activa el comando Imprimir (Print) en el men Archivo.

Prompt

el usuario activa el comando Filtrar (Filter).

Refresh

Refresca el contenido del registro activo sin leerlo desde el disco. Este mtodo no lo activa automticamente el sistema.

RemoveFilter

el usuario pulsa con el ratn sobre el comando Eliminar filtro (Remove filter) en el men contextual.

Reread

Se refresca el contenido del registro activo leyendolo de la base de datos. Este mtodo no lo activa automticamente el sistema.

Research

Vuelve a ejecutar el mtodo ExecuteQuery con la excepcin de que se preserva el filtro, el orden de los registros, etc. Este mtodo no lo activa automticamente el sistema.

ValidateDelete

vamos a borrar un registro.

ValidateWrite

vamos a actualizar un registro o escribir un nuevo registro.

Write Mtodos de validacin

el usuario introduce un nuevo registro o actualiza uno existente.

Como hemos visto en la lista anterior, los orgenes de datos tienen sus propios mtodos de validacin. Estos mtodos son los siguientes: ValidateDelete Este mtodo se ejecuta justo antes de que un registro vaya a ser borrado. La llamada al mtodo super() invoca al mtodo ValidateDelete de la tabla asociada. Utilizamos este mtodo cuando queremos aadir nuestras propias comprobaciones de validacin antes del borrado de los registros de la base de datos. ValidateWrite Este mtodo se ejecuta justo antes de que un registro vaya a ser escrito o actualizado. La llamada al mtodo super() invoca al mtodo ValidateWrite de la tabla asociada. Tambin utilizamos este mtodo cuando queremos aadir nuestras propias comprobaciones de validacin antes de la actualizacin o escritura de los registros en la base de datos. Como podemos apreciar, existe un paralelismo entre los mtodos de la tabla y los mtodos del origen de datos de un formulario. En realidad, los mtodos de validacin del origen de datos llaman a los de la tabla asociada. A partir de esto podemos llegar a la conclusin de que introduciremos los mtodos de validacin en un sitio o en otro dependiendo de nuestro objetivo. Supongamos que tenemos varios formularios que trabajan con los mismos datos. Cada uno de ellos tendr su propio origen de datos, pero todos esos orgenes de datos tendrn asociada la misma tabla. Si nosotros queremos validar el borrado o la escritura de los registros en todos los formularios, ser ms conveniente hacer la comprobacin directamente en los mtodos

de validacin de la tabla, ya que solo tendramos que escribir el cdigo una vez. Esta validacin sera efectiva en todos los orgenes de datos que tuvieran dicha tabla asociada. Por el contrario, vamos a considerar que en un formulario especfico necesitamos realizar una validacin especial cuando queremos insertar un registro. Esta comprobacin ser ms conveniente hacerla sobre los mtodos de validacin del origen de datos de dicho formulario. No sera vlido hacerlo en los mtodos de la tabla, porque de esta forma estaramos forzando a todos los formularios a realizar esta validacin. A continuacin, vamos a ver cual es la secuencia de ejecucin de mtodos cuando intentamos escribir o actualizar un registro desde un formulario. Podemos verlo de manera grfica en el siguiente esquema:

Figura 8. Escritura de un registro. Secuencia de ejecucin de mtodos. La secuencia de ejecucin sera la siguiente:

1. 2. 3.
1.

Se ejecutara el mtodo ValidateWrite del origen de datos del formulario. Este a su vez llamara al mtodo ValidateWrite de la tabla asociada. Se ejecutara le mtodo Write del origen de datos del formulario. Se llamara al mtodo Insert o al mtodo Update de la tabla asociada al formulario, dependiendo de si la operacin a realizar en una insercin o una actualizacin de registro. En la programacin de los mtodos de validacin de los orgenes de datos debemos seguir la misma estructura estndar que se sigue en los mtodos de validacin de las tablas.

Mtodos principales y su funcin A continuacin vamos a describir algunos de los mtodos ms utilizados en los orgenes de datos de los formularios, que por su importancia merecen un tratamiento algo ms exhaustivo. Mtodo Init Se ejecuta cuando abrimos un formulario. La llamada al mtodo super() crea la consulta para cargar los datos en el formulario. Tras esta llamada deben aadirse, en caso de que sea necesario, las sentencias de modificacin de la consulta. Como ejemplo, presentamos el mtodo Init del origen de datos del formulario CustTrans. Ejemplo de mtodo Init void init() { super(); dataSource = this.query().dataSourceNo(1); criteriaOpen = dataSource.addRange(fieldnum(CustTrans,open)); } Mtodo ExecuteQuery El mtodo ExecuteQuery se ejecuta cuando abrimos un formulario para ver sus datos. La llamada al mtodo super() ejecuta la consulta generada por el mtodo Init y muestra los registros. Si deseamos modificar los criterios de seleccin, debemos insertar las sentencias correspondientes antes de la llamada a super(). Como ejemplo, presentamos el mtodo ExecuteQuery del origen de datos del formulario CustTrans. Ejemplo de mtodo ExecuteQuery void executeQuery() { switch (includeAll.value()) { case (1) : { criteriaOpen.value('1'); break; }

case (0) : { criteriaOpen.value('0..1'); break; } } super(); } En este ejemplo, vemos que el mtodo puede servirnos para establecer dos criterios distintos de seleccin en la consulta antes de la llamada al mtodo super(). Mtodo Active Se ejecuta cada vez que cambia el registro activo. Esto sucede cuando pasamos de un registro a otro y tambin cuando pasamos de un formulario a otro. La llamada a super() hace que el nuevo registro pase a ser el registro actual. Como ejemplo, presentamos el mtodo Active del origen de datos del formulario Unit. Ejemplo de mtodo Active int active() { int ret; ; ret = super(); Unit_Unit.allowEdit(!Unit.recId); return ret; } Mtodo LinkActive El mtodo LinkActive se ejecuta cuando el usuario cambia de registro en un formulario que tiene su origen de datos enlazado con otro origen de datos. Este mtodo solo es utilizado cuando se ha establecido un enlace entre dos orgenes de datos, poniendo la propiedad LinkType a valor Yes en el origen de datos. La llamada al mtodo super() activa el mtodo ExecuteQuery del origen de datos enlazado con el origen de datos principal. Como ejemplo, presentamos el mtodo LinkActive del origen de datos SalesLine del formulario SalesTable. Ejemplo de mtodo LinkActive void linkActive() { super(); if (!salesLine) element.setCaptionText(); } Mtodo Reread La llamada al mtodo super() vuelve a leer el registro actual de la base de datos. El sistema no activa este mtodo de forma automtica. Mtodo Research La llamada al mtodo super() refresca la recuperacin de registros de la base de datos, definida por la consulta que se genera automticamente en el mtodo Init. Corresponde a una llamada al mtodo ExecuteQuery con la excepcin de que se mantienen ciertas cosas, como los filtros, el orden de los registros, etc. El sistema no activa este mtodo de forma automtica. Para comprender bien el funcionamiento del mtodo Research, vamos a ver las diferencias existentes entre dicho mtodo y el mtodo ExecuteQuery. Si queremos refrescar el contenido del formulario con los registros que han sido insertados desde un mtodo al cual hemos llamado, debemos utilizar el mtodo Research. Por el contrario, si queremos cambiar la consulta para mostrar otros registros, quizs basados en un filtro modificado, debemos utilizar el mtodo ExecuteQuery. Mtodo Refresh La llamada al mtodo super() actualiza la pantalla, refrescando el contenido del registro activo sin leerlo desde el disco. El sistema no activa este mtodo de forma automtica. Nosotros podemos utilizarlo, por ejemplo, si necesitamos actualizar los datos dentro de una operacin ms compleja. Mtodo Write

El mtodo Write se ejecuta cuando el usuario introduce un nuevo registro o actualiza uno ya existente. Este mtodo es el equivalente a los mtodos Insert y Update de las tablas, realizando una u otra operacin dependiendo de que exista ya el registro sobre el que vamos a escribir o no. La llamada al mtodo super() activa el mtodo ValidateWrite, y en el caso de que ste devuelva verdadero, gestiona la accin de escritura sobre la base de datos. Como ejemplo, presentamos el mtodo Write del origen de datos del formulario LedgerJournalTable. Ejemplo de mtodo Write void write() { super(); if (newJournalNum) { ledgerJournal.usedVoucher(); ledgerJournal = null; newJournalNum = false; } } Mtodo Delete El mtodo Delete se ejecuta cuando el usuario borra un registro en el origen de datos. La llamada al mtodo super() activa el mtodo ValidateDelete y en el caso de que ste devuelva verdadero, gestiona la accin de borrado sobre la base de datos, realizando una llamada al mtodo Delete de la tabla. Como ejemplo, presentamos el mtodo Delete del origen de datos del formulario LedgerJournalTable. Ejemplo de mtodo Delete void delete() { this.returnJournalNum(); super(); } Es muy importante destacar que en un formulario los orgenes de datos enlazados son tratados como un nico origen de datos. Es decir, las operaciones de seleccin, actualizacin y creacin de registros desde el formulario se realizan sobre todas las tablas enlazadas. El mtodo Init se ejecuta tambin en todos los orgenes de datos. Por otro lado, los mtodos de notificacin (como el mtodo Active) se ejecutan tambin en todos los orgenes de datos. Acceso y modificacin de las consultas en los formularios Todos los formularios con un origen de datos tienen una consulta activa, generada automticamente en el mtodo Init de dicho origen de datos. Como hemos visto anteriormente, existe una variable de sistema que nos da acceso a dicha consulta. En algunos casos es necesario modificar la consulta mediante programacin. Vamos a ver mediante un ejemplo, cmo modificar en tiempo de ejecucin los criterios de seleccin de la consulta de un formulario. El ejemplo corresponde al formulario CustTrans. En primer lugar, se declaran en el mtodo ClassDeclaration del formulario las variables que consideremos necesarias. Los tipos de datos de estas variables correspondern a clases de sistema. As, por ejemplo, la clase QueryBuildDataSource nos da acceso al origen de datos de una consulta y la clase QueryBuildRange nos da acceso al rango de seleccin de registros. La informacin acerca de los mtodos de estas clases puede encontrarse en la documentacin del sistema, dentro del Arbol de Objetos de la Aplicacin. Ejemplo class FormRun extends ObjectRun { QueryBuildDateSource dataSource; QueryBuildRange criteriaOpen; } 1. El nombre de las variables que corresponden a rangos de seleccin suele empezar con la palabra criteria.

A continuacin deben inicializarse las variables de referencia. Para ello debe aadirse cdigo al mtodo del origen de datos. Las sentencias correspondientes deben insertarse despus de la llamada al mtodo super(), ya que ste es el encargado de crear la consulta. Hacer esto es equivalente a inicializar dichas variables antes de la llamada al mtodo super() en el mtodo Run. Ejemplo void init() { super(); dataSource = CustTrans_Q.dataSourceNo(1); criteriaOpen = dataSource.addRange(fieldnum(CustTrans,open)); } Una vez inicializadas las variables, podremos modificar el rango de seleccin de registros. Esto se realiza antes de la llamada al mtodo super() del mtodo ExecuteQuery. Ejemplo void executeQuery() {

criteriaOpen.value('0..1'); super(); } Como ya mencionamos anteriormente, en versiones ms antiguas de Axapta, no existan las variables declaradas implcitamente para las consultas. En ese caso habra que acceder a la consulta mediante mtodos de las clases de sistema, tal y como muestra el ejemplo: Ejemplo void init() { super(); dataSource = this.query().dataSourceNo(1); criteriaOpen = dataSource.addRange(fieldnum(CustTrans,open)); } Como podemos apreciar, sustituiramos la variable CustTrans_Q por this.query(), donde this hara referencia al origen de datos del formulario y query() sera el mtodo que nos devuelve la consulta de dicho origen de datos.

Mtodos en los controles


En MorphX, adems de introducir cdigo en el propio formulario y en el origen de datos, podemos introducir cdigo en los controles de dicho formulario. Trataremos de codificar lo menos posible en los controles, dado que el cdigo que introduzcamos en estos mtodos no podr ser utilizado para otros elementos. Todos aquellos procesos generales que queramos realizar con el formulario deberemos codificarlos en los mtodos del propio formulario o en los del origen de datos. nicamente codificaremos en los controles, cuando queramos controlar su funcionalidad. La lista de mtodos de los controles es interminable, dado que existen muchos tipos de controles y cada uno de ellos tiene sus propios mtodos. Podemos obtener una lista completa de los mtodos en la Gua del desarrollador de Axapta. nicamente vamos a destacar por su importancia dos mtodos: Mtodo Clicked Este mtodo existe en los controles de tipo CheckBox, Button, CommandButton y MenuItemButton. Se ejecuta cuando el usuario pincha sobre el control correspondiente. En los botones de tipo MenuItemButton, la llamada al mtodo super() ejecuta el men item correspondiente. En el caso de los botones CommandButton, se ejecuta el comando asociado al botn. En los botones de tipo Button, la llamada a super() no realiza ninguna accin. Mtodo Lookup Este mtodo existe en los controles de tipo StringEdit, IntEdit, RealEdit y DateEdit. Se ejecuta cuando el usuario pulsa el botn de lookup. Normalmente se aade cdigo a este mtodo cuando el desarrollador desea que se abra una ventana de bsqueda distinta de la ventana estndar.

Secuencia de ejecucin de mtodos


Cuando realizamos acciones sobre un formulario, ejecutamos los mtodos del propio formulario y los de su origen de datos. La ejecucin de estos mtodos sigue una secuencia determinada, que nos va a condicionar el funcionamiento del sistema. Por lo tanto, es muy importante conocer esa secuencia, ya que esto nos permitir poder determinar qu mtodo debemos codificar para obtener los resultados esperados. Por ejemplo, veamos en el siguiente esquema qu mtodos se ejecutan cuando abrimos un formulario:

Figura 9. Apertura de un formulario. Secuencia de ejecucin de mtodos. La secuencia de ejecucin de mtodos es la siguiente: 1. Mtodo constructor New. 2. Mtodo Init del formulario.

3. Mtodo Init del origen de datos del formulario. 4. Mtodo Run del formulario. 5. Mtodo ExecuteQuery del origen de datos del formulario. 6. Mtodo NextField del formulario. A continuacin, vamos a ver la secuencia de ejecucin que tiene lugar cuando cerramos un formulario. Podemos apreciarla en el siguiente esquema:

Figura 10. Cierre de un formulario. Secuencia de ejecucin de mtodos. La secuencia de ejecucin de mtodos es la siguiente: 1. Mtodo CloseCancel del formulario. 2. Mtodo CanClose del formulario. 3. Mtodo Close del formulario. Por ltimo, vamos a ver qu mtodos se ejecutan cuando salimos de un control de un formulario:

Figura 11. El usuario sale de un control. Secuencia de ejecucin de mtodos. La secuencia de ejecucin de mtodos es la siguiente: 1. 2. 3. 4. 5. 6. Mtodo Leave del control. Mtodo Validate del control. Mtodo Modified del control. Mtodo Validate del origen de datos del formulario. Mtodo ValidateField de la tabla. Mtodo Modified del origen de datos del formulario.

S-ar putea să vă placă și