Hi,
I'm newbie in creating report in D365FO.
When create a report, with parameter are From date and To Date in its dialog, I created these objects:
1. Temp table (XX_Report1Tmp)
2. SSRSReport named /XX_Detail/ (and deployed)
3. Contract class = XX_RptContract
[DataContractAttribute, SysOperationAlwaysInitializeAttribute,SysOperationContractProcessing(classStr(XX_RptUIBuilder))]class XX_RptContract extends SrsReportRdlDataContract{ TransDate fromDate, toDate; private const str ParameterFromDate = 'FromDate'; private const str ParameterToDate = 'ToDate'; public boolean validate() { boolean isValid = super(); fromDate = this.getValue(ParameterFromDate); toDate = this.getValue(ParameterToDate); if (!fromDate) { isValid = checkFailed(/@SYS97591/); } if (!toDate) { isValid = checkFailed(/@SYS97592/); } if (fromDate && toDate) { if (fromDate > toDate) { isValid = checkFailed(/@SYS120590/); } } return isValid; }}
4. UIBuilder Class = XX_RptUIBuilder (and put the name in the Contract class)
[ SrsReportNameAttribute('XX_Detail.Report'), SysOperationContractProcessingAttribute(classstr(XX_RptUIBuilder), SysOperationDataContractProcessingMode::CreateUIBuilderForRootContractOnly)]class XX_RptUIBuilder extends SrsReportDataContractUIBuilder{ XX_RptContract rptContract; DialogField dlgFrom, dlgTo; private const str ParameterFromDate = 'FromDate'; private const str ParameterToDate = 'ToDate'; public void build() { Dialog dialogLocal; dialogLocal = this.dialog(); rptContract = this.getRdlContractInfo().dataContractObject() as XX_RptContract; dialogLocal.addGroup(/@SYS183857/); dlgFrom = dialogLocal.addFieldValue(extendedTypeStr(FromDate), DatetimeUtil::date(rptContract.getValue(ParameterFromDate)), /@SYS5209/,//); dlgTo = dialogLocal.addFieldValue(extendedTypeStr(ToDate), DatetimeUtil::date(rptContract.getValue(ParameterToDate)), /@SYS14656/); } /// <summary> /// Transfers data from the dialog into the data contract object. /// </summary> public void getFromDialog() { rptContract.setValue(ParameterFromDate, DateTimeUtil::newDateTime(dlgFrom.value(), 0)); rptContract.setValue(ParameterToDate, DateTimeUtil::newDateTime(dlgTo.value(), 0)); }}
5. Controller class
class XX_RptController extends SrsReportRunController{ public static void main(Args _args) { XX_RptController controller = new XX_RptController(); controller.parmArgs(_args); controller.parmReportName(ssrsReportStr(XX_Detail, AutoDesign)); controller.parmShowDialog(true); controller.startOperation(); }}
But I always getting error /Object reference not set to an instance of an object/, hit in UIBuilder class on this line /rptContract = this.getRdlContractInfo().dataContractObject() as XX_RptContract;/. May I know what I've been missed ?
Thanks.