Dynamic filtering of picklist values CRM 3.0

Hi,

I would like to create dynamic filtering of picklist values in CRM 3.0.

But I have a problem for to delete dynamically my picklist option.it is really random.

// It's here my problem
var count = oSepcialisation.Options.length;
for(var i=0; i < count; i++)
{
try
{
oSepcialisation.DeleteOption(parseInt(i)); // sometime this function deletes option, sometime doesn't.
}
catch(ex){ alert(ex);}
}

-------------------------------------------------------------------------------------------------------------------------

For to reproduce the same condition, you must create 3 attributs of type picklist
- new_dev_competency (parent picklist)
- new_dev_specialisation (child picklist)
- new_dev_orginalspecialisation (must be empty)

new_dev_competency value :
value="1" text = "competency 1"
value="2" text = "competency 2"

new_dev_specialisation value :
value="1" text = "1-specialisation 1"
value="2" text = "2-specialisation 2"
value="3" text = "2-specialisation 3"
value="4" text = "1-specialisation 4"

prefixes 1- et 2- .correspond to the ID of the competence to which this specialization is linked

//Code in OnLoad() Form
var oSepcialisation = crmForm.all.new_dev_specialisation;
var oOriginal = crmForm.all.new_dev_orginalspecialisation;

//I delete all elements from my picklist
for(var i=1; i < oOriginal.Options.length; i++)
{
oOriginal.DeleteOption(i);
}
//I add all original elements
for(var i=1; i < oSepcialisation.Options.length; i++)
{
oOriginal.AddOption(oSepcialisation.OptionsIdea.Text,oSepcialisation.OptionsIdea.DataValue);
}

//Code in OnChange() of my Competency picklist

var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;

switch (crmForm.FormType)
{

case CRM_FORM_TYPE_CREATE:
case CRM_FORM_TYPE_UPDATE:

var oSubIndustry = crmForm.all.new_dev_specialisation;
oSubIndustry.originalPicklistOptions = oSubIndustry.Options;

if (crmForm.all.new_dev_competency.DataValue == null)
{
oSubIndustry.Disabled =
true;
}
else
{
oSubIndustry.Disabled =
false;
if(oSubIndustry.DataValue == null)
{
new_dev_specialisation_onchange0();
}
}
break;
}

//Code in OnChange() of my Specialisation picklist

var oCompetency = crmForm.all.new_dev_competency;
var oSepcialisation = crmForm.all.new_dev_specialisation;
var oOriginal = crmForm.all.new_dev_orginalspecialisation;
var myFilter = oCompetency.DataValue;

//I delete all elements from my picklist
// It's here my problem
var count = oSepcialisation.Options.length;
for(var i=0; i < count; i++)
{
try
{
oSepcialisation.DeleteOption(parseInt(i)); // sometime this function deletes option, sometime doesn't.
}
catch(ex){ alert(ex);}
}

//I add all original elements
var count2 = oOriginal.Options.length;
for(var i=0; i < count2; i++)
{
if(oOriginal.OptionsIdea.Text.indexOf(myFilter + '-') != -1)
{
oSepcialisation.AddOption(oOriginal.OptionsIdea.Text,oOriginal.OptionsIdea.DataValue);
}
}

Link referer :
http://blogs.msdn.com/midatlanticcrm/archive/2005/12/04/499868.aspx CommentPosted=true#commentmessage




Answer this question

Dynamic filtering of picklist values CRM 3.0

  • Jess Chan

    I would like to know what the small o in front of different variables means. var oSubindustry
  • zille

    Thanks, Its works now.



  • tritontr21

    It means object.

    Smile


  • dwitt

    Hello Degremont,

    Indeed your problem is the deleteOptions.

    When you delete one Option in your picklist, the length is recalculated. So you can't use the index of your loop.

    A solution :

    var count = oSepcialisation.Options.length;
    for(var i=1; i < count; i++)
    {
    oSepcialisation.DeleteOption(oSepcialisation
    .Options[oSepcialisation.Options.length-1].DataValue);
    }

    Regards,

    Pierre-Adrien


  • Dynamic filtering of picklist values CRM 3.0