2.4.La clase contract
Seguiremos con nuestro ejemplo.
A continuación vamos a meterle al dialogo un rango de fechas para que nos muestre las facturas de ese periodo.
Debemos crear una clase de tipo contract
Class CustInvoiceJourReportContract implements SysOperationValidatable
{
FromDate fromDate;
ToDate toDate;
}
Nota: Implementamos de la clase SysOperationValidatable porque queremos realizar una validación de los parámetros en el dialogo, en caso que no quisiéramos realizar ninguna validación no haría falta hacer la implementación.
Crearemos dos métodos parm para nuestra variables.
[DataMemberAttribute]
FromDate parmFromDate(FromDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
[DataMemberAttribute]
ToDate parmToDate(ToDate _ToDate = toDate)
{
toDate = _toDate;
return toDate;
}
Los métodos parm de la clase contract admiten algunos parámetros para modificar el parámetro.
Alguno de los más comunes son los que se utilizan para cambiar la etiqueta del campo o el orden en que se deben mostrar los parámetros.
En caso de quererlo cambiar la parte superior del método quedaría así..
[
DataMemberAttribute,
SysOperationLabelAttribute(literalStr("Fecha final del período")),
SysOperationHelpTextAttribute(literalStr("Fecha final del período"))
]
Pos supuesto podemos utilizar etiquetas, lo he dejado así para que lo entendáis.
Hay cientos de ejemplos en Ax.
Como hemos implementado nuestra clase de la SysOperationValidatable esto nos obligará a crear el método validate.
public boolean validate()
{
boolean ret = true;
;
if (fromDate > toDate)
{
ret = checkFailed("La fecha desde no puede ser superior a la fecha hasta.");
}
return ret;
}
Atención
En nuestra clase DP deberemos indicarle que tiene una contract, con lo que el método classDeclaration de nuestra clase DP quedaría así.
[
SRSReportQueryAttribute(queryStr(CustInvoiceJourReport)),
SRSReportParameterAttribute(classStr(CustinvoiceJourReportContract))
]
class CustInvoiceJourReportDP extends SRSReportDataProviderBase
{
CustInvoiceJourReportTmp tmp;
}
Recordad de hacerle una compilación CIL.
Ahora, si lanzamos nuestro informe aparecerán nuestros parámetros en el dialogo.
Por último, nos faltará modificar el método processReport para recuperar los valores de los parámetros de la contract para asignárselos a nuestra query.
[SysEntryPointAttribute]
Public void processReport()
{
CustInvoiceJourReportContract contract = this.parmDataContract() as CustInvoicejourReportContract;
QueryRun qr = new QueryRun(this.parmQuery());
QueryBuildDataSource qbds;
CustInvoiceJour custInvoiceJour;
FromDate fromDate;
ToDate toDate;
;
fromDate = contract.parmFromDate();
toDate = contract.parmToDate();
qbds = qr.query().dataSourceTable(tablenum(CustinvoiceJour));
qbds.addRange(fieldnum(CustinvoiceJour, DueDate)).value(queryRange(fromDate, toDate));
While (qr.next())
{
custInvoiceJour = qr.get(tablenum(CustInvoiceJour));
tmp.clear();
tmp.CustGroup = custInvoiceJour.custGroup;
tmp.DueDate = custInvoiceJour.DueDate;
tmp.invoiceAccount = custInvoiceJour.invoiceAccount;
tmp.InvoiceDate = custInvoiceJour.invoiceDate;
tmp.InvoiceId = custInvoiceJour.InvoiceId;
tmp.salesId = custInvoicejour.salesId;
tmp.insert()
}
}
Con todo esto ahora nuestro informe tendrá unos parámetros para filtrar por fecha de vecimiento las facturas.
Con todo esto ahora nuestro informe tendrá unos parámetros para filtrar por fecha de vecimiento las facturas.
Comentarios
Publicar un comentario