Цитата:
Сообщение от
dech
я по этой книжке и пробую.
стр. 58:
1. Создал в VS SSRS : PktRdlItemTransList.ItemTransList
2. Controller:
X++:
class PktRdlItemTransController extends SRSReportRunController
{}
public static void main(Args args)
{
PktRdlItemTransController controller;
controller = new PktRdlItemTransController ();
controller.parmReportName(ssrsReportStr
(PktRdlItemTransList, ItemTransList));
controller.parmArgs(args);
controller.startOperation();
}
Проверил - отчет запускается
3. UIBuilder:
X++:
class PktRdlWarehouseUIBuilder extends SrsReportDataContractUIBuilder
{
DialogField dialogStatus;
DialogField dialogFromDate;
DialogField dialogToDate;
}
public void build()
{
PktRdlWarehouseContract pktRdlWarehouseContract;
pktRdlWarehouseContract = this.dataContractObject() as
PktRdlWarehouseContract;
dialogStatus = this.addDialogField
(methodStr(PktRdlWarehouseContract, parmStatus),
pktRdlWarehouseContract);
dialogFromDate = this.addDialogField
(methodStr(PktRdlWarehouseContract,parmFromDate),
pktRdlWarehouseContract);
dialogToDate = this.addDialogField
(methodStr(PktRdlWarehouseContract,parmToDate),
pktRdlWarehouseContract);
}
public void postBuild()
{
PktRdlWarehouseContract pktRdlWarehouseContract;
super();
pktRdlWarehouseContract = this.dataContractObject() as
PktRdlWarehouseContract;
dialogStatus = this.bindInfo().getDialogField
(pktRdlWarehouseContract,
methodStr(PktRdlWarehouseContract, ParmStatus));
dialogFromDate = this.bindInfo().getDialogField
(pktRdlWarehouseContract,
methodStr(PktRdlWarehouseContract, parmFromdate));
dialogToDate = this.bindInfo().getDialogField
(pktRdlWarehouseContract,
methodStr(PktRdlWarehouseContract, parmTodate));
}
4. Contract:
X++:
[
DataContractAttribute,
SysOperationContractProcessingAttribute
(classstr(PktRdlWarehouseUIBuilder))
]
public class PktRdlWarehouseContract implements
SysOperationValidatable
{
TransDate fromDate;
TransDate toDate;
InventtransferUpdateType status;
}
[
DataMemberAttribute('ToDate'),
SysOperationLabelAttribute(literalStr("ToDate"))
]
public ToDate parmToDate(ToDate _toDate = toDate)
{
toDate = _toDate;
return toDate;
}
[
DataMemberAttribute('FromDate'),
SysOperationLabelAttribute(literalStr("FromDate"))
]
public FromDate parmFromDate(FromDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
[
DataMemberAttribute('Status'),
SysOperationLabelAttribute(literalStr("Status"))
]
public InventTransferUpdateTye
parmStatus(InventTransferUpdateTye _status = status)
{
status = _status;
return status;
}
public boolean validate()
{
boolean isValid = true;
if (fromDate && toDate && fromDate > toDate)
{
isValid = checkFailed("From date cannot be
greater than to date");
}
if (!fromDate)
{
isValid = checkFailed("From date must
be filled in");
}
if (!toDate)
{
isValid = checkFailed("To date must
be filled in ");
}
return isValid;
}
как связывается UIBuilder с Contract видно:
SysOperationContractProcessingAttribute
(classstr(PktRdlWarehouseUIBuilder))
как контролер связывается с отчетом - тоже понятно:
controller.parmReportName(ssrsReportStr
(PktRdlItemTransList, ItemTransList));
А вот как контроллер или отчет связывается с контрактом или UIBuilder - я не увидел.
Правда на стр. 66 этойже книги я увидел, что контракт уже был реализован следующим образом:
X++:
[
SrsReportNameAttribute(ssrsReportStr
(PktRdlItemTransList, ItemTransList)),
SysOperationContractProcessingAttribute(classstr
(PktItemTransUIBuilder),
SysOperationDataContractProcessingMode::
CreateSeparateUIBuilderForEachContract)
]
public class PktRdlItemTransListRdlContract extends
SRSReportRdlDataContract
{
TransDate fromDate;
TransDate toDate;
#define.FromDate('FromDate')
#define.ToDate('ToDate')
}
тут уже видно, что контракт связывается с отчетом через атрибут.
Сделал подобное - не помогло.
Т.е. всеравно не понятно - как отчет призапуске понимает, что нужно брать именно этот контракт. В моем случает отчет не берет вообще никакой контракт.