AX7 - Utilizar como diálogo un formulario
En este post explicaremos cómo utilizar un formulario como si fuera un diálogo en una clase RunBaseBatch.
Lo primero que haremos será agregar un formulario a nuestro proyecto que será el que utilizaremos como diálogo.
Le aplicaremos un patrón. Para este ejemplo he seleccionado el Dialog - Basic.
Como vemos, el patrón nos pide algunos objetos que debe tener el formulario.
Le agregaremos un ButtonGroup y dos Command Buttons: Ok y Cancel; con sus respectivos comandos.
Agregaremos un grupo.
Añadimos al nuevo grupo un control de tipo string al que nombraremos CustAccount y con la propiedad extended CustAccount.
Nos crearemos una clase que extienda de la RunBaseBatch como la siguiente:
Como veréis es la típica clase que extiende de la RunBaseBatch pero en el método dialog; vemos que no tenemos agregado ningún campo al diálogo pero sin embargo tenemos el siguiente código que es el encargado de llamar al formulario.
Si ejecutamos la clase nos pude devolver algún error; esto ocurre ya que para que el formulario pueda ser utilizado como un diálogo necesita de algunos objetos. en este caso, se queja de que le falta un tab. éste es necesario para poder crear los controles para el tabPage de ejecución por lotes.
En el formulario nos faltará código porque aunque la clase funcione perfectamente y nos muestre nuestro formulario, deberemos pasarle los valores de los controles del formulario a la clase.
En el método init del form recuperaremos la clase.
y en el control custAccount sobrescribiremos el método modified para pasarle el valor a la clase.
Seleccionamos un cliente del desplegable y vemos su funcionamiento.
Lo primero que haremos será agregar un formulario a nuestro proyecto que será el que utilizaremos como diálogo.

Le aplicaremos un patrón. Para este ejemplo he seleccionado el Dialog - Basic.
Como vemos, el patrón nos pide algunos objetos que debe tener el formulario.
Le agregaremos un ButtonGroup y dos Command Buttons: Ok y Cancel; con sus respectivos comandos.
Agregaremos un grupo.
Añadimos al nuevo grupo un control de tipo string al que nombraremos CustAccount y con la propiedad extended CustAccount.
Nos crearemos una clase que extienda de la RunBaseBatch como la siguiente:
class CustTableDialogForm extends RunBaseBatch
{
CustAccount custAccount;
#define.CurrentVersion(1)
#define.Version1(1)
#localmacro.CurrentList
custAccount
#endmacro
public Object dialog()
{
DialogRunbase dialog = Dialog::newFormnameRunbase(formstr(CustTablePrintDialogForm),
this);
dialog.caption("Clientes");
dialog = this.dialogInternal(dialog);
return dialog;
}
static void main(Args _args)
{
CustTableDialogForm form = new CustTableDialogForm();
if (form.prompt())
form.run();
}
public void run()
{
info(custAccount);
}
public void run()
{
info(custAccount);
}
public CustAccount parmCustAccount(CustAccount _custAccount = CustAccount)
{
custAccount = _custAccount;
return custAccount;
}
public boolean canGoBatch()
{
return true;
}
public container pack()
{
return [#CurrentVersion,#CurrentList];
}
public boolean unpack(container packedClass)
{
Version version = RunBase::getVersion(packedClass);
;
switch (version)
{
case #CurrentVersion:
[version,#CurrentList] = packedClass;
break;
default:
return false;
}
return true;
}
}
Como veréis es la típica clase que extiende de la RunBaseBatch pero en el método dialog; vemos que no tenemos agregado ningún campo al diálogo pero sin embargo tenemos el siguiente código que es el encargado de llamar al formulario.
DialogRunbase dialog = Dialog::newFormnameRunbase(formstr(CustTablePrintDialogForm), this);
Si ejecutamos la clase nos pude devolver algún error; esto ocurre ya que para que el formulario pueda ser utilizado como un diálogo necesita de algunos objetos. en este caso, se queja de que le falta un tab. éste es necesario para poder crear los controles para el tabPage de ejecución por lotes.
Agregaremos el tab que nos está pidiendo y crearemos la siguiente estructura:
En el formulario nos faltará código porque aunque la clase funcione perfectamente y nos muestre nuestro formulario, deberemos pasarle los valores de los controles del formulario a la clase.
En el método init del form recuperaremos la clase.
[Form]
public class CustTablePrintDialogForm extends FormRun
{
CustTableDialogForm
custTableDialogForm;
public void init()
{
if (!element.args().caller())
{
throw error("@SYS22539");
}
custTableDialogForm = element.args().caller().runbase();
super();
}
}
y en el control custAccount sobrescribiremos el método modified para pasarle el valor a la clase.
[Control("String")]
class CustAccount
{
///
<summary>
///
///
</summary>
///
<returns></returns>
public boolean modified()
{
boolean ret;
ret = super();
custTableDialogForm.parmCustAccount(CustAccount.valueStr());
return ret;
}
}
Recordad que para poder llamar al control por código deberéis tener la propiedad Auto Declaration a Yes.
Ahora si ejecutamos nuestra clase veremos que tiene la estructura de un diálogo, la cual contiene un campo, el tab para el proceso por lotes y los botones.
Si vemos el tab por lotes están todos los campos del proceso por lotes que han sido asignados por el sistema.
Seleccionamos un cliente del desplegable y vemos su funcionamiento.
Comentarios
Publicar un comentario