1.6. Agregar una query al diálogo
Hoy mostraremos como agregar una query a nuestro diálogo, también veremos como agrupar los campos del diálogo en grupos.
Lo primero será declararnos una variable de tipo queryRun.
He creado dos versiones de listas para que veáis como funciona. Si modificamos una lista al intentar desempaquetarla si tiene más variables de las empaquetadas nos mostrará un mensaje de error el programa. Así que tenemos dos opciones: crearnos una lista nueva o borrar los datos de uso.
class TestRunBaseBatch extends RunBaseBatch
{
QueryRun qr;
//Campos que agregaremos al diálogo
DialogField dlgCustAccount;
DialogField dlgFromDate;
DialogField dlgToDate;
//Variables a las que asignaremos el valor del campo del diálogo
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
#define.CurrentVersion(1) //Versión de la lista
#LOCALMACRO.CurrentList
CustAccount,
#ENDMACRO
#define.CurrentVersion2(2) //Versión de la lista
#LOCALMACRO.CurrentList
CustAccount,
FromDate,
ToDate
#ENDMACRO
}
En el método Dialog hemos agregado grupos. Más tarde veremos como queda esto.
protected Object dialog()
{
DialogRunbase dialog = super();
DialogGroup dlgGroup;
dialog.addGroup("Cliente");
dlgCustAccount = dialog.addFieldValue(IdentifierStr(CustAccount), custAccount, 'Cliente', 'Texto ayuda!!!!!!!');
dlgGroup = dialog.addGroup("Fechas");
dlgGroup.frameType(FormFrameType::Raised3D);
dlgFromDate = dialog.addFieldValue(IdentifierStr(FromDate), fromDate);
dlgToDate = dialog.addFieldValue(IdentifierStr(ToDate), toDate);
return dialog;
}
En el método pack le indicamos que nos empaquete la query, así en la próxima ejecución los datos seleccionados en la query nos parecerán de nuevo.
public container pack()
{
return [#CurrentVersion, #CurrentList] + [qr.pack()];
}
Y en el unpack como explicaba al principio del post, verificamos que versión esta desempaquetando para saber que variables agregar.
Si nos fijamos en la versión dos, si no hay query la creamos.
public boolean unpack(container packedClass)
{
Integer version = RunBase::getVersion(packedClass);
container packedQuery;
switch (version)
{
case #CurrentVersion:
[version,#CurrentList] = packedClass;
break;
case #CurrentVersion2:
[version,#CurrentList,packedQuery] = packedClass; //Añadimos el container para recuperar la query empaquetada en el pack
if (SysQuery::isPackedOk(packedQuery))
{
qr = new QueryRun(packedQuery);
}
else
{
qr = this.queryRun();
}
break;
default:
return false;
}
return true;
}
En el método queryBuild creamos la query.
protected QueryRun queryBuild()
{
qr = new QueryRun(querystr(CustInvoice));
return qr;
}
En el método query run devolvemos la query.
public QueryRun queryRun()
{
if (!qr)
{
this.queryBuild();
}
return qr;
}
Este método sirve para indicarle que muestre los valores de la query (vamos el típico botón de query).
//Obligamos a que nos muestre el botón para la query
public boolean showQueryValues()
{
return true;
}
Así es como nos quedará nuestro diálogo:
Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:
Descargar fichero xpo
Lo primero será declararnos una variable de tipo queryRun.
He creado dos versiones de listas para que veáis como funciona. Si modificamos una lista al intentar desempaquetarla si tiene más variables de las empaquetadas nos mostrará un mensaje de error el programa. Así que tenemos dos opciones: crearnos una lista nueva o borrar los datos de uso.
class TestRunBaseBatch extends RunBaseBatch
{
QueryRun qr;
//Campos que agregaremos al diálogo
DialogField dlgCustAccount;
DialogField dlgFromDate;
DialogField dlgToDate;
//Variables a las que asignaremos el valor del campo del diálogo
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
#define.CurrentVersion(1) //Versión de la lista
#LOCALMACRO.CurrentList
CustAccount,
#ENDMACRO
#define.CurrentVersion2(2) //Versión de la lista
#LOCALMACRO.CurrentList
CustAccount,
FromDate,
ToDate
#ENDMACRO
}
En el método Dialog hemos agregado grupos. Más tarde veremos como queda esto.
protected Object dialog()
{
DialogRunbase dialog = super();
DialogGroup dlgGroup;
dialog.addGroup("Cliente");
dlgCustAccount = dialog.addFieldValue(IdentifierStr(CustAccount), custAccount, 'Cliente', 'Texto ayuda!!!!!!!');
dlgGroup = dialog.addGroup("Fechas");
dlgGroup.frameType(FormFrameType::Raised3D);
dlgFromDate = dialog.addFieldValue(IdentifierStr(FromDate), fromDate);
dlgToDate = dialog.addFieldValue(IdentifierStr(ToDate), toDate);
return dialog;
}
En el método pack le indicamos que nos empaquete la query, así en la próxima ejecución los datos seleccionados en la query nos parecerán de nuevo.
public container pack()
{
return [#CurrentVersion, #CurrentList] + [qr.pack()];
}
Y en el unpack como explicaba al principio del post, verificamos que versión esta desempaquetando para saber que variables agregar.
Si nos fijamos en la versión dos, si no hay query la creamos.
public boolean unpack(container packedClass)
{
Integer version = RunBase::getVersion(packedClass);
container packedQuery;
switch (version)
{
case #CurrentVersion:
[version,#CurrentList] = packedClass;
break;
case #CurrentVersion2:
[version,#CurrentList,packedQuery] = packedClass; //Añadimos el container para recuperar la query empaquetada en el pack
if (SysQuery::isPackedOk(packedQuery))
{
qr = new QueryRun(packedQuery);
}
else
{
qr = this.queryRun();
}
break;
default:
return false;
}
return true;
}
En el método queryBuild creamos la query.
protected QueryRun queryBuild()
{
qr = new QueryRun(querystr(CustInvoice));
return qr;
}
En el método query run devolvemos la query.
public QueryRun queryRun()
{
if (!qr)
{
this.queryBuild();
}
return qr;
}
Este método sirve para indicarle que muestre los valores de la query (vamos el típico botón de query).
//Obligamos a que nos muestre el botón para la query
public boolean showQueryValues()
{
return true;
}
Así es como nos quedará nuestro diálogo:
Han sido unos cuantos post donde hemos ido paso a paso añadiendo funcionalidad a la clase, espero que los conceptos hayan quedado claros. El siguiente paso será hacer lo mismo que hemos visto en estos post pero con el nuevo framework.
Descargar fichero xpo
Comentarios
Publicar un comentario