How to Dynamically Filter Multi-Select Option set/Picklist in D365 CRM using JavaScript

Posted On April 27, 2022 by Sancia Dcunha Posted in  Tagged in ,

In this blog, I am going to show how we can filter a field (multi-select option set) item dynamically based on another field (single-select option set) item.

Let’s consider a use case,

We have a field named ‘Application Area’ which is a (single-select option set) field and ‘Application Type’ which is a (multi-select option set) field.

Application Area field
Application Type field

Let’s have a look at JavaScript where the magic is making this possible.

Step 1: Below is the entire code of JS

var ApplicationProductSelection ={
       "BevProduct" : [{text: 'Beverage-CSD', value: 979570000},
       {text: 'Beverage-Juice drinks', value: 979570001},
       {text: 'Beverage-Alcoholic Beverage RTD', value: 979570002},
       {text: 'Beverage-Spirits & Cordials', value: 979570003},
       {text: 'Beverage-Ready to Mix', value: 979570004},
       {text: 'Beverage-Concentrate', value: 979570005},
       {text: 'Other', value: 979570006}]

       "DairyProduct": [
        {text: 'Dairy-Ice Cream', value: 979570007},
        {text: 'Dairy-Fluid Milk', value: 979570008},
        {text: 'Dairy-Yogurt', value: 979570009},
        {text: 'Dairy-Cheese', value: 979570010},
        {text: 'Other', value: 979570006}]

var MasterRecord = [];

var oApplicationAreaType = {
    Main: function(executionContext){
        var formContext = executionContext.getFormContext();
        if(formContext!= null){
            MasterRecord = formContext.getControl("cf_applicationtypes").getOptions();


    getDetails: function(executionContext){
        var formContext = executionContext.getFormContext();
        var ApplicationArea= formContext.getAttribute("cf_applicationarea").getValue();
        if (ApplicationArea != null){
            if (ApplicationArea == 979570000){
                ApplicationProductSelection.Beverages.BevProduct.forEach(element => formContext.getControl("cf_applicationtypes").addOption(element));
            if (ApplicationArea == 979570001){
                ApplicationProductSelection.Dairy.DairyProduct.forEach(element => formContext.getControl("cf_applicationtypes").addOption(element));
            MasterRecord.forEach(element => formContext.getControl("cf_applicationtypes").addOption(element));

For Table/Entity Main Form customization, select ‘Form Properties’ to include JavaScript function as below,

  1. On Load: oApplicationAreaType.Main
  2. On Change of field ‘Application Area’: oApplicationAreaType.getDetails

Note: Pass the execution context for calling the JS function.

That’s all, we have created a dynamic filtering of multi-select option set using JavaScript.

Hope this helps!!

Share Story :