function returnValue(value) Hilfe

21. August 2013 07:57

Hallo

Ich möchte das Beispiel aus dem Buch Arbeiten mit MS Dynamics CRM 2011
für meine Lösung anpassen, scheitere aber am Verständnis.

Die Funktion wird auf Feld onChange aufgerufen, endet aber ohne Ergebnis.

Original
/*
function formatTopic() {
var firstName = Xrm.Page.data.entity.attributes.get("firstname");
var lastName = Xrm.Page.data.entity.attributes.get("lastname");
var subject = Xrm.Page.data.entity.attributes.get("subject");
var createdOn = new Date();

var fullName = returnValue(firstName.getValue()) + " " +
returnValue(lastName.getValue());
subject.setValue(fullName + " - " + createdOn.toLocaleString());
}

function returnValue(value) {
return (value == null) ? "" : value;
}
/*

Meine Variante (läuft nicht) /* meine Interpretation / Fragen

function formatTopic() {
var firstName = Xrm.Page.data.entity.attributes.get("firstname"); /*Vorname an var
var lastName = Xrm.Page.data.entity.attributes.get("lastname"); /*Nachname an var
// var subject = Xrm.Page.data.entity.attributes.get("subject"); /*subject auskommentiert
// var createdOn = new Date(); /* createdOn auskommentiert

var fullName = returnValue(firstName.getValue()) + " " +
returnValue(lastName.getValue()); /* Vor und Nachname an var fullname
// subject.setValue(fullName + " - " + createdOn.toLocaleString()); /* was geschieht hier? braucht es setValue & toLocalString ?
}

function returnValue(value) { /* welcher Value wird hier übernommen, aus setValue?
return (value == null) ? "" : value; /* was geschieht hier wenn value == null ?
}

Alle Beispiele die ich gefunden habe, arbeiten ohne function return.
Wenn ich das weglasse, erhalte ich Funktion erwartet.


Ich finde den Link zu Michaels Liste mit den Funktionen nicht mehr.
Wo finde ich CRM2011 spezifische Beispiele zu Funktionen im onChange?

Kann mir jemand helfen, ich habe ein Brett vor dem Kopf

Danke Peter

Re: function returnValue(value) Hilfe

21. August 2013 08:39

Hallo Peter,

var firstName = Xrm.Page.data.entity.attributes.get("firstname");
var lastName = Xrm.Page.data.entity.attributes.get("lastname");
var subject = Xrm.Page.data.entity.attributes.get("subject");
Damit wird in die Variablen (in diesem Fall Objekte) das jeweilige Feld aus der Form geholt, mit all seinen Attributen.

// subject.setValue(fullName + " - " + createdOn.toLocaleString()); /* was geschieht hier? braucht es setValue & toLocalString ?

Damit möchtest du das Feld subject (muss ein Textfeld sein!), mit den Werten fullName und dem aktuellem Datum füllen. toLocalString ist nur eine Sicherheit und formatiert das Datum in der Sprache des Clients.

function returnValue(value) { /* welcher Value wird hier übernommen, aus setValue?
return (value == null) ? "" : value; /* was geschieht hier wenn value == null ?
Hier wird der Value des übermittelten Feldes übernommen. Also bei firstName.getValue() der Inhalt des Feldes firstName und bei lastName.getValue() der Inhalt des Feldes lastName.

Wenn der Value null ist wird "", also ein leerer String (nicht null) zurückgegeben. Das kann man so machen, muss man aber nicht. Ich persönlich arbeite lieber mit null, warum Speicherplatz verbrauchen, prüfen sollte ich so oder so.

Link:
http://michaelsulz.wordpress.com/2012/0 ... version-3/

Re: function returnValue(value) Hilfe

21. August 2013 09:01

Vielen herzlichen Dank, Michael

Ist es normal dass im Beispiel 2mal mit "function" gearbeitet wird?
Alle Beispiele die sonst gesehen habe arbeiten mit "return".

Jetzt habe ich auch verstanden weshalb das Script bei mir nicht läuft,
ich muss auf die die letzte function "returnValue" bei onChange reagieren
lassen . . .

"returnValue" ist als offensichtlich die (unglückliche) Bezeichung für die
Funktion und "value" ist eine jscript Eigenschaft.

Danke nochmals, Peter

Re: function returnValue(value) Hilfe

21. August 2013 11:15

/* geändert 22.8.13 07:20

Ich komme in kleinen Schritten weiter . . .

function StrasseNr()
{
var strasse = Xrm.Page.data.entity.attributes.get("address1_line1");
var nr = Xrm.Page.data.entity.attributes.get("address1_line2");
var strassenr = returnValue(strasse.getValue()) + " " + returnValue(nr.getValue());
alert(strassenr);
}
function returnValue(value)
{
alert(value);
return (value == null) ? " " : value;
}

Mit alert(value) sehe ich, dass die Werte strasse & nr in (value)
geschrieben wurden (2 Anzeigen).

Wie bringe ich diese Werte nun auf das Feld "address1_line3" ?

Und wieso werden die zwei Werte alert(value) vor alert(strassenr)
angezeigt?

Bitte entschuldigt meine einfachen Fragen, ich muss das endlich
verstehen.

Peter

Re: function returnValue(value) Hilfe

22. August 2013 08:28

Hallo,

JavaScript ist eine Interpretersprache und wird Zeile für Zeile ausgeführt.
Der Ablauf deines Codes ist folgender:
Zeile var strasse ... wird ausgeführt
Zeile var nr... wird ausgeführt
Zeile var Strassennr... wird ausgeführt
- Hier wird jetzt der erste Teile deiner Zeile ausgeführt, also returnValue(strasse.getValue())
- Diese springt im Code zur Funktion returnValue und führt diese aus (In Basic war das früher goto)
- Zeile alert(value) wird ausgeführt, darum die Anzeige mit Value
- Jetzt wird der zweite Teil der Zeie var Strassennr ausgeführt
- Diese springt im Code zur Funktion returnValue und führt diese aus (In Basic war das früher goto)
- Zeile alert(value) wird ausgeführt, darum die Anzeige mit Value
Zeile alert(value) wird ausgeführt.

Wie du diesen Wert jetzt in ein Formularfeld schreibst, ist unter anderem hier beschrieben:
http://michaelsulz.wordpress.com/2012/0 ... version-3/

Re: function returnValue(value) Hilfe

22. August 2013 09:43

Herzlichen Dank, läuft!

function StrasseNr()
{
var strasse = Xrm.Page.data.entity.attributes.get("address1_line1");
var nr = Xrm.Page.data.entity.attributes.get("address1_line2");
var strassenr = returnValue(strasse.getValue()) + " " + returnValue(nr.getValue());
var bstrasse = Xrm.Page.data.entity.attributes.get("address1_line3").setValue(strassenr);
alert("nach setValue");
}
function returnValue(value)
{
alert(value);
return (value == null) ? " " : value;
}

Noch eine Frage, Du sagst Du verwendest null statt " ",
ist es dann so /* return (value == null) ? null : value; /* richtig?

Fehlermeldung mit Deinem Code bei "getAttribute"
/*
Den Wert eines Feldes setzen
Xrm.Page.getAttribute(‘Feldname’).setValue(‘NeuerWert’);
/*

Mit "attributes.get" läufts, ist das so weil ich oben diese
Syntax verwendet habe?

Herzlichen Dank, Peter