web
You’re offline. This is a read only version of the page.
close
Skip to main content
Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Suggested answer

Multi-select ItemId lookup in SSRS report contract / UIBuilder

(0) ShareShare
ReportReport
Posted on by 196

Hi Team,

I am building a custom SSRS report in Dynamics 365 Finance & Operations.

I want the report dialog to have the following fields:

  • From Date

  • To Date

  • Item Ids → multi-select lookup (only Service items from InventTable)

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();
    }
}
Categories:
I have the same question (0)
  • Aditya Pal Profile Picture
    196 on at
    Multi-select ItemId lookup in SSRS report contract / UIBuilder
     Sir suggest me how can we do that 
  • Martin Dráb Profile Picture
    236,154 Most Valuable Professional on at
    Multi-select ItemId lookup in SSRS report contract / UIBuilder
    Note that you can also find examples in the standard application.
     
    For instance, Procurement and sourcing  > Inquiries and reports > Procurement category reports > Vendors by category uses several parameters with multi-selection. The contract class (ProcCategoryVendorsContract) uses List as the data type, as I showed before. And the UI builder class, ProcCategoryVendorsUIBuilder, overrides lookup methods and provides custom queries.
  • Martin Dráb Profile Picture
    236,154 Most Valuable Professional on at
    Multi-select ItemId lookup in SSRS report contract / UIBuilder
    Currently we've fixed your data model only. If you want to use a custom lookup you can - do it in the UI builder class. You can also add a validation to your contract.
  • Aditya Pal Profile Picture
    196 on at
    Multi-select ItemId lookup in SSRS report contract / UIBuilder
     
     
      but it coming like this i want add range also but filter is not coming 
  • Suggested answer
    Martin Dráb Profile Picture
    236,154 Most Valuable Professional on at
    Multi-select ItemId lookup in SSRS report contract / UIBuilder
    Your contract class is indeed able to hold a single item ID only. You need to use a collection of item IDs instead of a single item ID. For example:
    [DataContract]
    class KORNAPPurchVarianceServiceItemReportContract
    {
        List itemIds;
        TransDate fromDate, toDate;
        
        [
            DataMember('items'),
            AifCollectionTypeAttribute('_itemIds', Types::String),
            AifCollectionTypeAttribute('return', Types::String),
            SysOperationLabelAttribute("Items"),
            SysOperationDisplayOrderAttribute('3')
        ]
        public List parmItemIds(List _itemIds = itemIds)
        {
            itemIds = _itemIds;
            return itemIds;
        }
        
        ...
    }
    

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Andrés Arias – Community Spotlight

We are honored to recognize Andrés Arias as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
CA Neeraj Kumar Profile Picture

CA Neeraj Kumar 2,333

#2
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 846 Super User 2025 Season 2

#3
Sohaib Cheema Profile Picture

Sohaib Cheema 681 User Group Leader

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans