Dynamische Picklist in MyCRM 2011

11. Mai 2011 15:48

Hallo zusammen,

ich versuche grade eine dynamische Picklist zwischen den Feld statuscode in der Entität Verkaufschance und einer weitern
Pickliste erstellen.

Im Blog: dynamiccrm, habe ich folgenden Code gefunden:


function firstPickListOnChange()
{
var firstPickListValue = Xrm.Page.getAttribute("statuscode").getValue();
var secondPickListControl = Xrm.Page.ui.controls.get("new_XXX");
var secondPickListOptions = secondPickListControl.getAttribute().getOptions();
secondPickListControl.clearOptions();

switch(firstPickListValue)
{
case 100000001:
secondPickListControl.addOption(secondPickListOptions [0], 0);
secondPickListControl.addOption(secondPickListOptions [1], 1);
secondPickListControl.addOption(secondPickListOptions [2], 2);
break;

case 100000002:
secondPickListControl.addOption(secondPickListOptions [3], 0);
secondPickListControl.addOption(secondPickListOptions [4], 1);
secondPickListControl.addOption(secondPickListOptions [5], 2);
break;

}
}

Dieser Code Funktioniert zwar aber leider löscht dieser nach der Auswahl des zweiten Picklistwert diesen wieder herraus bzw. zeigt diesen nicht mehr an.
Hat jemand eine Idee wie man diesen Code modifizieren kann so das der ausgewählte Wert weiterhin sichtbar ist bzw. ein anderes Codebeispiel für eine Dynamisches Picklist

Re: Dynamische Picklist in MyCRM 2011

11. Mai 2011 16:14

Hallo Patrick,

ich kann nicht erkennen, warum dieser Code die 2. Pickliste nach der Auswahl eines Eintrages wieder löschen sollte.

Kann es sein, das da noch ein anderes JavaScript auf diese Pickliste geht oder du den Code im OnChange und OnSave hinterlegt hast?

Re: Dynamische Picklist in MyCRM 2011

12. Mai 2011 09:54

Hallo Michael,

Nein, ich habe kein JavaScript noch auf dieser Picklist hinterlegt. Aber ich habe den Fehler gefunden so das das Script erst einmal funktioniert. Der Fehler war das ich bei der zweiten Picklist ebenfalls im Ereignishandler ebenfall auf das Script verwiesen hab.

Nun habe ich aber das Problem noch, das beim Erstellen einer VC nicht mehr der voreingestellte Standartwert in der zweiten Picklist angezeigt wird. In der Version 4.0 hatte ich für die abhänige Picklist den beigefügten Code benutzt den ich aber nicht für die Version 2011 aufgrund des Arrays umgewandelt bekomme. (auch nicht mit den JavaScript Converter ;-))


Code:
 

Array.prototype.Contains = function(o)
{
   var iLength = this.length;
   
   for (var i = 0; i < iLength; i++)
   {
      if (o == this[i])
      {
         return true;
      }
   }
   
   return false;
};

// This is the main function that will filter the picklists
crmForm.FilterPicklist = function x()
{
   var oVertriebsphase = crmForm.all.statuscode;
   var oWahrscheinlichkeit = crmForm.all.new_closeprobability;
   
   if (oVertriebsphase.DataValue == null)
   {
      oWahrscheinlichkeit.DataValue = null;
      oWahrscheinlichkeit.ForceSubmit = true;      
      oWahrscheinlichkeit.Disabled = true;   
      
      
      return;
   }
   
   
   var oTempArray = new Array();
   
   var iLength = oWahrscheinlichkeit.originalPicklistOptions.length;
   
   var aCurrentType = new Array();      
   
   
switch (oVertriebsphase.DataValue)
{
case "1":
aCurrentType = new Array(8,9,1,2,3,4,5);
break;
case "2":
aCurrentType = new Array(8,9,1,2,3,4,5);
break;
case "200000":
aCurrentType = new Array(8,9,1,2,3,4,5);
break;
case "200001":
aCurrentType = new Array(8,9,1,2,3,4,5);
break;
case "200002":
aCurrentType = new Array(8,9,1,2,3,4,5);
break;
case "200003":
aCurrentType.push(5);
break;
case "200005":
aCurrentType.push(6);
break;
case "3":
aCurrentType.push(7);
break;
case "5":
aCurrentType.push(8);
break;
case "4":
aCurrentType.push(8);
break;
}

   
   for (var i = 0; i < iLength; i++)
   {      
      if (aCurrentType.Contains(oWahrscheinlichkeit.originalPicklistOptions[i].DataValue))
      {
         oTempArray.push(oWahrscheinlichkeit.originalPicklistOptions[i]);
      }
   }
   
   oWahrscheinlichkeit.Options = oTempArray;
   
   if (oTempArray.length > 0)
   {      
      oWahrscheinlichkeit.Disabled = false;      
   }      
   else
   {
      oWahrscheinlichkeit.DataValue = null;
      oWahrscheinlichkeit.ForceSubmit = true;      
      oWahrscheinlichkeit.Disabled = true;
   }   
}

var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;

switch (crmForm.FormType)
{   
   case CRM_FORM_TYPE_CREATE://CREATE_FORM - try these and blow away the vars above
   case CRM_FORM_TYPE_UPDATE://UPDATE_FORM
      
      var oWahrscheinlichkeit = crmForm.all.new_closeprobability;
      
      oWahrscheinlichkeit.originalPicklistOptions = oWahrscheinlichkeit.Options;      

      if (crmForm.all.statuscode.DataValue == null)
      {
         oWahrscheinlichkeit.Disabled = true;
      }
      else
      {               
         var iPicklistValue = oWahrscheinlichkeit.DataValue;
         crmForm.FilterPicklist();
         oWahrscheinlichkeit.DataValue = iPicklistValue;               
      }

   break;
}

Re: Dynamische Picklist in MyCRM 2011

12. Mai 2011 10:23

Hallo Patrick,

Nein, ich habe kein JavaScript noch auf dieser Picklist hinterlegt. Aber ich habe den Fehler gefunden so das das Script erst einmal funktioniert. Der Fehler war das ich bei der zweiten Picklist ebenfalls im Ereignishandler ebenfall auf das Script verwiesen hab.

Das meinte ich :-)

Nun habe ich aber das Problem noch, das beim Erstellen einer VC nicht mehr der voreingestellte Standartwert in der zweiten Picklist angezeigt wird. In der Version 4.0 hatte ich für die abhänige Picklist den beigefügten Code benutzt den ich aber nicht für die Version 2011 aufgrund des Arrays umgewandelt bekomme.

Ich habe mir den Code jetzt nicht im Detail angesehen, aber ist denn dein Defaultwert auch noch in den Einträgen, die nach dem Filtern in der Pickliste verbleiben?
Wenn selbst der JavaScript Converter das Sript nicht umwandeln kann, würde ich vermuten, das diese Funktion nicht mehr zur Verfügung steht.

Re: Dynamische Picklist in MyCRM 2011

13. Mai 2011 09:46

Danke,

Ich bin weg von meine ersten Lösung da man mit dieser keinen Wert der zweiten Picklist doppelt vergeben kann.

Diese Lösung finde ich besser aber leider wir hier ebenfalls immer in der zweiten Liste keine default-Wert der zweiten Picklist gesetzt sondern eine lehres Auswahlfeld immer zuerst angezeigt.

http://www.madronasg.com/blog/dependent-option-sets-crm-2011



Danke Gruß

Re: Dynamische Picklist in MyCRM 2011

13. Mai 2011 10:19

Hallo Patrick,

Ich bin weg von meine ersten Lösung da man mit dieser keinen Wert der zweiten Picklist doppelt vergeben kann.

Warum soll das nicht gehen? Folgendes Beispiel sollte funktionieren.

switch(firstPickListValue)
{
case 100000001:
secondPickListControl.addOption(secondPickListOptions [0], 0);
secondPickListControl.addOption(secondPickListOptions [1], 1);
secondPickListControl.addOption(secondPickListOptions [2], 2);
secondPickListControl.addOption(secondPickListOptions [4], 3);
break;

case 100000002:
secondPickListControl.addOption(secondPickListOptions [3], 0);
secondPickListControl.addOption(secondPickListOptions [4], 1);
secondPickListControl.addOption(secondPickListOptions [5], 2);
break;

Diese Lösung finde ich besser aber leider wir hier ebenfalls immer in der zweiten Liste keine default-Wert der zweiten Picklist gesetzt sondern eine lehres Auswahlfeld immer zuerst angezeigt.

Da es sich um einen Blog-Artikel handelt würde ich einfach den Verfasser des Blogartikels fragen.

Re: Dynamische Picklist in MyCRM 2011

16. Mai 2011 13:03

Ja, dies geht aber dann ist bei der Auswahl in der zweiten Picklist dann kein Standartwerte gesetzt sondern das Feld wir leer angezeigt.

Gruß Patrick

Re: Dynamische Picklist in MyCRM 2011

16. Mai 2011 13:18

Hallo Patrick,

warum setzt du den Value des OptionSets nicht einfach so?

secondPickListControl.setValue(parseInt(2));