In D365 Finance & Operations SSRS reports, validation should be written mainly in the Data Contract class, preferably in the validate() method.
This ensures:
Validation runs before the report executes
Invalid parameters stop the report early
Clean and best-practice design
Data-dependent validation (like checking if records exist) can be done in the RDP class.
đ Best practice:
Parameter validation â Data Contract
Data validation â RDP class
/// l /// A data contract class for SSRS ///ANSARIaDSDLoadStatusListReport report. ////// Developed for ANSARI_30343_RDD-LEW-005-SDShipmentList on 31-Jan-2022 by Vijay Kumar /// [ DataContractAttribute ] class ANSARIaDSDLoadStatusListContract implements SysOperationValidatable { DirPartyName userName; TransDate createdDateFrom, createdDateTo; NoYesId settled; ////// Parameter method for /// DirPartyName value ///DirPartyName . ///DirPartyName [ DataMemberAttribute(identifierStr(UserName)) ] public DirPartyName parmUserName(DirPartyName _userName = userName) { userName = _userName; return userName; } ////// Parameter method for /// Settled value ///Settled . ///NoYesId [ DataMemberAttribute('Settled'), SysOperationLabelAttribute("@ANSARI:ANSARISettled") ] public NoYesId parmSettledFlag(NoYesId _settled = settled) { settled = _settled; return settled; } ////// Parameter method for /// TransDate value ///CreatedDateFrom ///CreatedDateFrom [ DataMemberAttribute('CreatedFromDate'), SysOperationLabelAttribute("@ANSARI:ANSARIFromDate") ] public TransDate parmCreatedDateFrom(TransDate _createdDateFrom = createdDateFrom) { createdDateFrom = _createdDateFrom; return createdDateFrom; } ////// Parameter method for /// TransDate value ///CreatedDateTo ///CreatedDateTo [ DataMemberAttribute('CreatedToDate'), SysOperationLabelAttribute("@ANSARI:ANSARIToDate") ] public TransDate parmCreatedDateTo(TransDate _createdDateTo = createdDateTo) { createdDateTo = _createdDateTo; return createdDateTo; } ////// Validates the parameters. /// ////// true if successful; otherwise, false. /// public boolean validate() { boolean ret = true; if (createdDateFrom && createdDateTo && createdDateFrom > createdDateTo) { ret = checkFailed("@ANSARI:ANSARICreatedDateValidate"); } return ret; } }
Example 2:
[DataContract] class ANSARI_SalesReportContract { FromDate fromDate; ToDate toDate; [DataMember] public FromDate parmFromDate(FromDate _fromDate = fromDate) { fromDate = _fromDate; return fromDate; } [DataMember] public ToDate parmToDate(ToDate _toDate = toDate) { toDate = _toDate; return toDate; } public boolean validate() { boolean isValid = true; if (!fromDate || !toDate) { error("From date and To date are mandatory."); isValid = false; } if (fromDate > toDate) { error("From date cannot be greater than To date."); isValid = false; } return isValid; } }
Use validation here only if:
Validation depends on database data
Example: âNo records exist for selected criteriaâ
public void processReport() { if (!this.hasData()) { throw error("No data found for selected criteria."); } // report logic }
First read the answer fully, then try to explain it in your own words. After that, open a few related questions and compare the concepts. This method helps you remember the topic for a longer time and improves exam preparation.