Hello everyone,
In my previous post on Multi-Select Option Sets , I mentioned about setting multi-select option set values using setValue() method overwrites existing selected values. In this post I would like to discuss more on that and how we can append or remove certain values using simple JScript methods.
getValue() / getText()- Returns Array
function SetMultiSelValues(executionContext) { //Get Form Context from Execution Context var formContext = executionContext.getFormContext(); //Get Array of Selected OptionSet Values //Returns: [100000005, 100000001] var selectedValues = formContext.getAttribute("new_multiselect").getValue(); //Get Array of Selected OptionSet Text //Returns: ["Six", "Two"] var selectedOptionText = formContext.getAttribute("new_multiselect").getText(); }
setValue() – To Overwrite existing Values
Args: Pass integer or Array of integers
function SetMultiSelValues(executionContext) { //Set Value a Single Value - Overwrites Existing Selected Values formContext.getAttribute("new_multiselect").setValue(100000005); //or formContext.getAttribute("new_multiselect").setValue([100000005]); //Set Multiple Values - Overwrites Existing Selected Values formContext.getAttribute("new_multiselect").setValue([100000003, 100000004]); }
setValue() – To Append to existing Values
Here I am using concat() JScript method to concatenate existing and new values
function SetMultiSelValues(executionContext) { //Get Form Context from Execution Context var formContext = executionContext.getFormContext(); //Get Array of Selected OptionSet Values //Returns: [100000005, 100000001] var existingValues = formContext.getAttribute("new_multiselect").getValue(); //Append a set of values var newValues = [100000003, 100000004]; var updatedValues = ConcatArrays(existingValues, newValues); //Appends to Existing Selected Values //New Values: [100000005, 100000001, 100000003, 100000004] formContext.getAttribute("new_multiselect").setValue(updatedValues); } function ConcatArrays(existingValues, newValues) { if (existingValues === null || Array.isArray(existingValues) === false) { return newValues; } if (newValues === null || Array.isArray(newValues) === false) { return existingValues; } return existingValues.concat(newValues); }
setValue() – To Remove List of Values
Here I am using JScript’s filter() method to remove values from selected option set values array
function SetMultiSelValues(executionContext) { //Get Form Context from Execution Context var formContext = executionContext.getFormContext(); //Get Array of Selected OptionSet Values //Returns: [100000005, 100000001, 100000003, 100000004] var existingValues = formContext.getAttribute("new_multiselect").getValue(); //Removes from Existing Selected Values //New Values: [100000005, 100000004] var removeValues = [100000001, 100000003]; updatedValues = RemoveFromArray(existingValues, removeValues); formContext.getAttribute("new_multiselect").setValue(updatedValues); } function RemoveFromArray(existingValues, removeValues) { if (existingValues === null || Array.isArray(existingValues) === false) { return removeValues; } if (removeValues === null || Array.isArray(removeValues) === false) { return existingValues; } return existingValues.filter(function (value, index) { return removeValues.indexOf(value) == -1; }) }
Hope it helps..!!
Pingback: Free Webinar Friday: Dynamics 365 v9: Working with Multi-Select OptionSets | xRM Coaches
Very useful
this do not work on Unified Interface as of now.
I thinks its product defect
i want to filter MultiSelect Option set values based on other field value.