I am building a custom SSRS report in Dynamics 365 Finance & Operations.
I want the report dialog to have the following fields:
Currently, I am using a DataContract + UIBuilder for the report. I added the ItemId
field in the contract and UIBuilder, but right now it only allows selecting one item at a time.
I want to be able to select multiple items in the ItemIds field, store them in the contract as a container, and then use them in the DP / report class for processing.
I am not sure how to implement multi-select lookup correctly in the UIBuilder and connect it to the contract.
code:-
/// <summary>
/// KORNAP - Purchase Variance Report For Service Items - Contract class
/// </summary>
[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(KORNAPPurchVarianceServiceItemReportUIBuilder))]
class KORNAPPurchVarianceServiceItemReportContract
{
ItemId itemId;
TransDate fromDate, toDate;
[DataMemberAttribute('ItemId'), SysOperationDisplayOrderAttribute('3'),
SysOperationLabelAttribute("Item Id")]
public ItemId parmItemId(ItemId _itemId = itemId)
{
itemId = _itemId;
return itemId;
}
[DataMemberAttribute('FromDate'), SysOperationDisplayOrderAttribute('1'),
SysOperationLabelAttribute("From Date")]
public TransDate parmFromDate(TransDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
[DataMemberAttribute('ToDate'), SysOperationDisplayOrderAttribute('2'),
SysOperationLabelAttribute("To Date")]
public TransDate parmToDate(TransDate _toDate = toDate)
{
toDate = _toDate;
return toDate;
}
}
ui builder:-
/// <summary>
/// KORNAP - Purchase Variance Report For Service Items - UI Builder class
/// </summary>
class KORNAPPurchVarianceServiceItemReportUIBuilder extends SrsReportDataContractUIBuilder
{
KORNAPPurchVarianceServiceItemReportContract contract;
DialogField dialogItemId, dialogFromDate, dialogToDate;
public void getFromDialog()
{
contract = this.dataContractObject() as KORNAPPurchVarianceServiceItemReportContract;
super();
}
public void build()
{
contract = this.dataContractObject() as KORNAPPurchVarianceServiceItemReportContract;
dialogItemId = this.addDialogField(methodStr(KORNAPPurchVarianceServiceItemReportContract,parmItemId),contract);
dialogFromDate = this.addDialogField(methodStr(KORNAPPurchVarianceServiceItemReportContract,parmFromDate), contract);
dialogToDate = this.addDialogField(methodStr(KORNAPPurchVarianceServiceItemReportContract,parmToDate), contract);
}
public void postBuild()
{
super();
dialogItemId.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(KORNAPPurchVarianceServiceItemReportUIBuilder,itemIdLookup), this);
}
private void itemIdLookup(FormStringControl _control)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(InventTable), _control);
Query query = new Query();
QueryBuildDataSource qbdsInvent, qbdsProduct, qbdsTranslation;
LanguageId curLanguageId = SystemParameters::getSystemLanguageId();
qbdsInvent = query.addDataSource(tableNum(InventTable));
qbdsInvent.addRange(fieldNum(InventTable, ItemType)).value(SysQuery::value(ItemType::Service));
sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId));
sysTableLookup.addLookupMethod(tableMethodStr(InventTable, itemDescriptionOrName));
sysTableLookup.addLookupfield(fieldNum(InventTable, ItemType));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
}