[Gelöst] JS Pflichtfel setzen

5. November 2012 11:39

Hallo zusammen,

ich muss in unserem neuen CRM ein Pflichtfeld dynamisch setzen lassen.
Und zwar ist das Pflichtfeld eine Meilensteinangabe einer Verkaufschance. Wenn dieses auf einen bestimmten Auswahlwert gesetzt wird, muss das Feld "Entscheiderkontakt" zum Pflichtfeld werden.
Dazu habe ich folgenden banalen Code:

Code:
function setConsenseMakerRequired(){

var milestone = Xrm.Page.getAttribute("t4_milestone");
var consensemaker = Xrm.Page.getControl(“new_consensemaker”);

if(milestone == "C1" || milestone == "C2" || milestone == "B" || milestone == "A"){
consensemaker.setRequiredLevel(“required”);}}


An der Stelle ...Xrm.Page.getControl(“new_consensemaker”); scheint es allerdings ein Problem zu geben. Die Fehlermeldsung lautet "Der Wert der Eigenschaft "setConsenseMakerRequired" ist Null oder undefiniert, kein Function-Object."
Nehme ich den Part Xrm.Page.getControl(“new_consensemaker”); raus, gibt es keine Fehlermeldung.
Beide Felder sind der Entität Opportunity hinzugeüfgt worden. t4_milestone ist dabei in einer managed solution. new_consensemaker ist ein unmanaged Feld (daher der Fehler, aber warum?).

Für Ideen und Anregungen bin ich dankbar :)

Viele Grüße
Eddi89
Zuletzt geändert von Eddi89 am 6. November 2012 08:54, insgesamt 1-mal geändert.

Re: JS Pflichtfel setzen

5. November 2012 12:23

Hallo,

und erst einmal herzlich willkommen in unserem Forum :-)

Beide Zeilen, in denen du die Daten aus der Form ermitteln willst, entsprechen nicht den aktuellen Objektmodell.

Entsprechende Beispiele findest du im SDK oder auch hier: Hilfreiche JavaScript Codeschnippsel

Re: JS Pflichtfel setzen

5. November 2012 12:46

Hey :)
Danke für Deine Antwort!

Die Funktion, um das Feld zum Pflichtfeld zu machen, habe ich von dieser Seite :mrgreen:
Ich habe nur zu Testzwecken mal getAttribute durch getControl ersetzt. In beiden Fällen crashed es allerdings.... :(

Re: JS Pflichtfel setzen

5. November 2012 12:58

Hallo,

auf den Inhalt eines Feldes wird mit getValue() zugegriffen, das kann ich in deinem Script nicht sehen.

Re: JS Pflichtfel setzen

5. November 2012 13:09

Hallo,

OK (peinlich), aber ist abgeändert.
Code:
function setConsenseMakerRequired(){

var milestone = Xrm.Page.getAttribute("t4_milestone").getValue();
var consensemaker = Xrm.Page.getControl(“new_consensemaker”);

if(milestone == "C1" || milestone == "C2" || milestone == "B" || milestone == "A"){
consensemaker.setRequiredLevel(“required”);}}

Ändert nur leider nichts. Sobald ich alles rund um consensmaker auskommentiere, gibt es ja keine Fehlermeldung.
IE9 Debugger sagt, dass der Fehler hier liegt: var consensemaker = Xrm.Page.getControl(“new_consensemaker”);
Und zwar in Zeichen 43 (das ist das n von new_). Es muss ja irgendwie an dem Feld liegen.

Vielen Dank!
Eddi89

Re: JS Pflichtfel setzen

5. November 2012 13:32

Hi,

Dein Feld "t4_milestone" ist das eine Pickliste?

Teste mal das aus:

function setConsenseMakerRequired()
{
var milestone = Xrm.Page.getAttribute("t4_milestone").getValue();
//var consensemaker = Xrm.Page.getControl(“new_consensemaker”);

if(milestone == "C1" || milestone == "C2" || milestone == "B" || milestone == "A")
{
Xrm.Page.getAttribute(“new_consensemaker”).setRequiredLevel("required");
//consensemaker.setRequiredLevel(“required”);
}
}

Grüße
Karan

Re: JS Pflichtfel setzen

5. November 2012 14:00

Hi,
ja, dass Feld ist eine Pickliste.
Und nein, Dein Vorschlag hat leider auch nichts gebracht, der Fehler verschiebt sich dann nur auf die Zeile Xrm.Page.getAttribute(“new_consensemaker”).setRequiredLevel("required");
Also wieder die, mit dem Zugriff auf new_consensemaker.

Viele Grüße
Eddi89

Re: JS Pflichtfel setzen

5. November 2012 14:12

Hi,

function setConsenseMakerRequired()
{
Xrm.Page.getAttribute("t4_milestone").getSelectedOption().text;

//var milestone = Xrm.Page.getAttribute("t4_milestone").getValue();
//var consensemaker = Xrm.Page.getControl(“new_consensemaker”);

if(milestone == "C1" || milestone == "C2" || milestone == "B" || milestone == "A")
{
Xrm.Page.getAttribute(“new_consensemaker”).setRequiredLevel("required");
//consensemaker.setRequiredLevel(“required”);
}
}

So, nächste Runde ;)
Den Wert einer Pickliste auslesen geht über einen anderen Befehl, nur für Dich als Info.

Grüße Karan5959

Re: JS Pflichtfel setzen

5. November 2012 14:50

Hey,

danke für den Tipp mit der Picklist.
Das Problem besteht leider weiterhin. Auch im Errorreport, der an MS gesendet werden soll, steht etwas von einem ungültigen Zeichen.
Er wird wohl, wie der IE9 Debugger auch, das n in new meinen... :-x

Re: JS Pflichtfel setzen

5. November 2012 15:21

Also folgender Befehl sollte funktionieren, wenn es sich bei t4_milkestone um eine Pickliste handelt und der Inhalt der Pickliste C1 oder C", etc. lautet.

Code:
function setConsenseMakerRequired()
{
var milestone = Xrm.Page.getAttribute("t4_milestone").getSelectedOption().text;

if(milestone == "C1" || milestone == "C2" || milestone == "B" || milestone == "A")
{
     Xrm.Page.getAttribute(“new_consensemaker”).setRequiredLevel("required");
}
}

Re: JS Pflichtfel setzen

5. November 2012 16:03

Hallo zusammen,

nein, leider nicht.
Verstehe auch nicht mehr, warum das so ist.
Sobald ich den Teil, in dem er auf das consensemaker-Feld zugreift, auskommentiere, gibt es ja keinen Fehler mehr... ???

Danke und Gruß
Daniel

Re: JS Pflichtfel setzen

5. November 2012 19:54

Hallo Daniel,

bist du sicher, das du keinen Schreibfehler im Feldnamen hast?

Wenn du ein anderes Feld verwendest, funktioniert es dann?

Re: JS Pflichtfel setzen

6. November 2012 08:53

Guten Morgen,

Schreibfehler waren es nicht :-D
Gestern musste ich noch 2 weitere Felder einfügen, mit der Abhängigkeit "Meilenstein = L". Auch bei diesen Feldern kam der gleiche Fehler im IE Debugger.
Da kam mir der Geistesblitz dann:
Die Feldnamen waren bei mir von den sogenannten Gänsefüßchen umgeben. Richtig wären Hochkomma gewesen.

Was mich noch wundert, ist, dass das Feld t4_milestone mit Gänsefüßchen angesprochen werden konnte.

Aber wie dem auch sei, es funktioniert jetzt :-) :-) :-)

Vielen Dank an alle für die Geduld, bei einem so einfach Stück Code :)