Dynamic Picklist - Problem mit Subindustry

18/03/2009 - 15:29 von Harald Battran | Report spam
Hallo,

nach langer Zeit muss ich wieder auf die Routinen zur Erzeugung einer
dynamischen Pickliste aus dem SDK zurückgreifen.

Wir verwenden noch CRM 3.0

Jetzt musste ich aber feststellen, dass die Routine nicht sauber làuft
oder sich irgendwo ein Fehler eingeschlichen hat.

Wie im SDK beschrieben werden die Werte aus für die Subindustry
abhàngig von der Auswahl in Industry dargestellt.

Allerdings setzt er mir jedesmal beim Öffnen des Formulars das
Subindustryfeld auf den 1. der Industry zugehörigen Wert. Wenn dann
das Formular gespeichert wird, dann wird dieser 1. aber meist falsche
Wert natürlich in die Datenbank geschrieben.

Ich habe mir den Quellcode jetzt mehrere Stunden angesehen, komme aber
nicht darauf warum das passiert. Wie gesagt: er entspricht in Struktur
und Umfang exakt dem SDK (2xgeprüft!) Aber es scheint so, dass im
onchange-Event des Industry-Feldes nicht auf den beim Form-Load
bereits ausgewàhlten Wert zurückgesellt wird, sondern grundsàtzlich
auf den 1. Wert der subindustry optionen.

Hat jemand einen Tipp was hier falsch làuft?

Danke im voraus
Harald
 

Lesen sie die antworten

#1 Michael Sulz
18/03/2009 - 15:40 | Warnen spam
Hallo Harald,

ich setzte dieses JavaScript erfolgreich bei mehreren Kunden ein, und dort
funktioniert es einwandfrei.

Ich kann mich dunkel daran erinnern, das irgend etwas an dem SCript im SDK
falsch war, bin aber nicht mehr ganz sicher, ob es dieses Script war, und
was daran nicht stimmte.

Ich sende dir hier mal das Script ein, das ich immer verwende, das funktioniert.


OnLoad-Ereigniss des Formulars

var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;

// Die dynamischen ComboBoxen müssen nur beim Erstellen oder aktualisieren
aktiviert werden.
// Auf gesperrten und read-only Formularen wird keine dynamic benötigt
switch (crmForm.FormType)
{
case CRM_FORM_TYPE_CREATE:
case CRM_FORM_TYPE_UPDATE:

// Die Referenz zur 2. ComboBox für die spàtere Verwendung holen
var oSubIndustry = crmForm.all.new_subindustry;

oSubIndustry.originalPicklistOptions = oSubIndustry.Options;

// Ist in der ersten ComboBox kein Eintrag ausgewàhlt, muss die abhàngige
// ComboBox gesperrt werden. In dem Moment, wo der Benutzer einen Eintrag
selektiert
// muss die abhàngige ComboBox wieder aktiviert werden.
if (crmForm.all.new_industry.DataValue == null)
{
oSubIndustry.Disabled = true;
}
else
{
new_industry_onchange0();
}

break;
}



OnChange Ereignis der ersten ComboBox

var oIndustry = crmForm.all.new_industry;

//Initialisieren der Indexes der abhàngigen ComboBox
var iStartIndex = -1;
var iEndIndex = -1;

switch (oIndustry.SelectedText)
{
case "Accounting":
iStartIndex = 1;
iEndIndex = 5;
break;

case "Consulting":
iStartIndex = 6;
iEndIndex = 10;
break;
}

var oSubIndustry = crmForm.all.new_subindustry;

if (iStartIndex > -1 && iEndIndex > -1)
{
// Create a new array, which will hold the new picklist options
var oTempArray = new Array();

// Initialize the index for the temp array
var iIndex = 0;

// Now loop through the original Sub-Industry options, pull out the
// requested options a copy them into the temporary array.
for (var i = iStartIndex; i <= iEndIndex; i++)
{
oTempArray[iIndex] = oSubIndustry.originalPicklistOptions[i];
iIndex++;
}

// Reset the Sub-Industry picklist with the new options
oSubIndustry.Options = oTempArray;

// Enable the Sub-Industry picklist for the user
oSubIndustry.Disabled = false;
}
else
{
// The user has selected an unsupported Industry or no Industry
oSubIndustry.DataValue = null;
oSubIndustry.Disabled = true;
}


mit freundlichen Grüßen

Michael Sulz

Ähnliche fragen