1.11 Sobrescribir los métodos de los campos del diálogo interactuando entre ellos
Como hicimos con la RunBaseBatch vamos a agregar dos campos de tipo fecha para que interactúen con el lookup de clientes.
Lo primero que haremos será modificar nuestra clase contract para agregarle nuestros campos de fechas.
[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(TestSysOperationUIBuilder))]
class TestSysOperationDataContract implements SysOperationInitializable, SysPackable
{
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
#define.CurrentVersion(1)
#LocalMacro.ParmList
custAccount,
fromDate,
toDate
#EndMacro
}
Añadiremos los métodos parm para los dos campos.
[DataMemberAttribute,
SysOperationDisplayOrderAttribute('2')]
public FromDate parmFromDate(FromDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
[DataMemberAttribute,
SysOperationDisplayOrderAttribute('3')]
public ToDate parmToDate(ToDate _toDate = toDate)
{
toDate = _toDate;
return toDate;
}
Haremos lo mismo en la UIBuilder.
class TestSysOperationUIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField dlgCustAccount;
DialogField dlgFromDate;
DialogField dlgToDate;
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
}
Modificaremos el lookup para que filtre por los campos de fecha(Texto en amarillo)
public void custAccountLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(CustTable), _control);
Query q = new Query();
QueryBuildDataSource custTableQbds;
QueryBuildDataSource invoiceTableQbds;
//El true es para indicarle que éste es el valor a devolver, si no se le indica
//devuelve el primer campo de los agregados. En éste caso también sería el AccountNum
sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum),true);
sysTableLookup.addLookupMethod(tableMethodStr(CustTable, Name)); //Con addLookupMethod podemos añadir un método
custTableQbds = q.addDataSource(tablenum(CustTable));
invoiceTableQbds = custTableQbds.addDataSource(tableNum(CustInvoiceTable));
invoiceTableQbds.relations(false);
invoiceTableQbds.joinMode(JoinMode::ExistsJoin);
invoiceTableQbds.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustInvoiceTable, OrderAccount));
invoiceTableQbds.addRange(fieldNum(CustInvoiceTable, InvoiceDate)).value(queryRange(dlgFromDate.value(), dlgToDate.value())); //Usamos los campos dialog porque las variable fromDate y toDate no tienen valor todavía, ya que se recupera en el getFromDialog
sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}
Nos crearemos un método que valide los campos de fecha.
public Boolean dateValidate(FormStringControl _control)
{
boolean ret = true;
if (dlgFromDate.value() && dlgToDate.value() && dlgFromDate.value() > dlgToDate.value())
{
ret = checkFailed(strFmt("La fecha desde no puede ser superior a la fecha hasta"));
}
return ret;}
public void postBuild()
{
super();
// get references to dialog controls after creation
dlgCustAccount = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmCustAccount));
dlgFromDate = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmFromDate));
dlgToDate = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmToDate));
}
public void postRun()
{
super();
//Sobrescribimos el método lookup del control CustAccount
dlgCustAccount.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(TestSysOperationUIBuilder, custAccountLookup), this);
//Sobrescribimos el método validate de los controles de fecha
//Cuidado al agregar nuevos campos con lo empaquetado , refrescar caches
dlgFromDate.registerOverrideMethod(methodstr(FormDateControl, validate), methodstr(TestSysOperationUIBuilder, dateValidate), this);
dlgToDate.registerOverrideMethod(methodstr(FormDateControl, validate), methodstr(TestSysOperationUIBuilder, dateValidate), this);
}
*Es posible que os muestre un error al realizar la ejecución.
Recordad hacer un CIL y si habéis ejecutado la clase anteriormente, borrar los datos de uso o añadir una nueva versión a la contract.
Nuestro diálogo tendrá este aspecto:
Este post es el equivalente al siguiente para la RunBaseBatch:
1.5. Sobrescribir los métodos de los campos del diálogo interactuando entre ellos
Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:
Descargar fichero xpo
Lo primero que haremos será modificar nuestra clase contract para agregarle nuestros campos de fechas.
[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(TestSysOperationUIBuilder))]
class TestSysOperationDataContract implements SysOperationInitializable, SysPackable
{
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
#define.CurrentVersion(1)
#LocalMacro.ParmList
custAccount,
fromDate,
toDate
#EndMacro
}
Añadiremos los métodos parm para los dos campos.
[DataMemberAttribute,
SysOperationDisplayOrderAttribute('2')]
public FromDate parmFromDate(FromDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
[DataMemberAttribute,
SysOperationDisplayOrderAttribute('3')]
public ToDate parmToDate(ToDate _toDate = toDate)
{
toDate = _toDate;
return toDate;
}
Haremos lo mismo en la UIBuilder.
class TestSysOperationUIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField dlgCustAccount;
DialogField dlgFromDate;
DialogField dlgToDate;
CustAccount custAccount;
FromDate fromDate;
ToDate toDate;
}
Modificaremos el lookup para que filtre por los campos de fecha(Texto en amarillo)
public void custAccountLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(CustTable), _control);
Query q = new Query();
QueryBuildDataSource custTableQbds;
QueryBuildDataSource invoiceTableQbds;
//El true es para indicarle que éste es el valor a devolver, si no se le indica
//devuelve el primer campo de los agregados. En éste caso también sería el AccountNum
sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum),true);
sysTableLookup.addLookupMethod(tableMethodStr(CustTable, Name)); //Con addLookupMethod podemos añadir un método
custTableQbds = q.addDataSource(tablenum(CustTable));
invoiceTableQbds = custTableQbds.addDataSource(tableNum(CustInvoiceTable));
invoiceTableQbds.relations(false);
invoiceTableQbds.joinMode(JoinMode::ExistsJoin);
invoiceTableQbds.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustInvoiceTable, OrderAccount));
invoiceTableQbds.addRange(fieldNum(CustInvoiceTable, InvoiceDate)).value(queryRange(dlgFromDate.value(), dlgToDate.value())); //Usamos los campos dialog porque las variable fromDate y toDate no tienen valor todavía, ya que se recupera en el getFromDialog
sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}
Nos crearemos un método que valide los campos de fecha.
public Boolean dateValidate(FormStringControl _control)
{
boolean ret = true;
if (dlgFromDate.value() && dlgToDate.value() && dlgFromDate.value() > dlgToDate.value())
{
ret = checkFailed(strFmt("La fecha desde no puede ser superior a la fecha hasta"));
}
return ret;}
public void postBuild()
{
super();
// get references to dialog controls after creation
dlgCustAccount = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmCustAccount));
dlgFromDate = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmFromDate));
dlgToDate = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(TestSysOperationDataContract, parmToDate));
}
public void postRun()
{
super();
//Sobrescribimos el método lookup del control CustAccount
dlgCustAccount.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(TestSysOperationUIBuilder, custAccountLookup), this);
//Sobrescribimos el método validate de los controles de fecha
//Cuidado al agregar nuevos campos con lo empaquetado , refrescar caches
dlgFromDate.registerOverrideMethod(methodstr(FormDateControl, validate), methodstr(TestSysOperationUIBuilder, dateValidate), this);
dlgToDate.registerOverrideMethod(methodstr(FormDateControl, validate), methodstr(TestSysOperationUIBuilder, dateValidate), this);
}
*Es posible que os muestre un error al realizar la ejecución.
Recordad hacer un CIL y si habéis ejecutado la clase anteriormente, borrar los datos de uso o añadir una nueva versión a la contract.
Nuestro diálogo tendrá este aspecto:
Y si asignamos una rango de fechas podremos ver que el lookup está modificado.
1.5. Sobrescribir los métodos de los campos del diálogo interactuando entre ellos
Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:
Descargar fichero xpo
Comentarios
Publicar un comentario