CRM 2011 – Javascript – Attribute setzen (für alle Datentypen)

Hallo Leute,

nach längerer Zeit mal wieder ein feiner Alltags-Helper.
Um in CRM via Javascript einen Wert in ein Attribut schreiben zu können, bedarf es eigentlich je nach Typ (Lookup, Text, Integer, etc.) eine eigene Methode.
Ich habe mir jetzt einen Helper geschrieben, der selbst prüft um was für einen Typ es sich handelt und entsprechend handelt.

[sourcecode language=“javascript“]
this.SetAttributeValue = function (id, value, valueId, logicalName) {

var control = Xrm.Page.getControl(id);
var isDisabledField = Xrm.Page.getControl(id).getDisabled();

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(false);
}

try {
if (control != null) {

if (value == null) {
FormUtils.SetStandardAttributeValue(id, value);
}
else {
var name = id;
var type = control.getAttribute().getAttributeType();

switch (type) {

case "string":
FormUtils.SetStandardAttributeValue(id, value);
break;

case "integer":
var intValue = parseInt(value);
FormUtils.SetStandardAttributeValue(id, intValue);
break;

case "optionset":
FormUtils.SetStandardAttributeValue(id, value);
break;

case "memo":
FormUtils.SetStandardAttributeValue(id, value);
break;

case "boolean":
FormUtils.SetStandardAttributeValue(id, (value == "true"));
break;

case "money":
var intValue = parseFloat(value);
FormUtils.SetStandardAttributeValue(id, intValue);
break;

case "datetime":
// not implemented yet
break;

case "lookup":
FormUtils.SetLookupAttributeValue(id, valueId, value, logicalName);
break;

case "decimal":
var intValue = parseFloat(value);
FormUtils.SetStandardAttributeValue(id, intValue);
break;
}
}

}
}
catch (ex) {

}

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(true);
}

}

// Setzt den Wert eines "normalen" Attributes auf einer Entity-Page.
this.SetStandardAttributeValue = function (id, value) {

var isDisabledField = Xrm.Page.getControl(id).getDisabled();

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(false);
}

try {
Xrm.Page.getAttribute(id).setValue(value);
Xrm.Page.getAttribute(id).setSubmitMode(‚always‘);
}
catch (err) {
alert(err);
}

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(true);
}
}

// Setzt den Wert eines "normalen" Attributes auf einer Entity-Page.
this.SetLookupAttributeValue = function SetLookupAttributeValue(id, valueId, value, entityLogicalName) {

var isDisabledField = Xrm.Page.getControl(id).getDisabled();

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(false);
}

try {
if (value == null) {
Xrm.Page.getAttribute(id).setValue(value);
}
else {
Xrm.Page.getAttribute(id).setValue([{ id: valueId, name: value, entityType: entityLogicalName}]);
}
Xrm.Page.getAttribute(id).setSubmitMode(‚always‘);
}
catch (err) {

}

if (isDisabledField) {
Xrm.Page.getControl(id).setDisabled(true);
}
}
[/sourcecode]

Beim setzen eines Optionsets muss der Integer-Wert gesetzt werden, nicht der Label. Zudem werden für das Setzen des Lookup-Attributes mehrere Parameter benötigt, die bei anderen Datentypen NULL sein können.

Am Error-Handling sollte man noch arbeiten, das ist dann aber euch selbst überlassen 😉

Have Fun!

Cheers,
Christian

Leave a reply