![]() |
#4 |
Участник
|
я по этой книжке и пробую.
стр. 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)); } 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; } 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') } Сделал подобное - не помогло. Т.е. всеравно не понятно - как отчет призапуске понимает, что нужно брать именно этот контракт. В моем случает отчет не берет вообще никакой контракт. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
Теги |
ssrs, ssrs reports |
|
|