Bekanntlicherweise können bei den Attributen einer Entität Beschreibungen hinterlegt werden. Schön wäre es, wenn diese Beschreibung auch für Benutzer sichtbar wären, wenn sie beispielsweise mit der Maus über das entsprechende Feld im Formular gehen. Im Standard ist das leider nicht so, stattdessen wird in einer Quickinfo der Name des Feldes wiederholt.
Mit dem nachfolgenden Skript ist das jedoch ohne weiteres möglich. Es muss hierzu nur in das OnLoad-Ereignis der entsprechenden Entität eingetragen werden:
var serviceUrl = "/mscrmservices/2006/metadataservice.asmx";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", serviceUrl, false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=iso-8859-1")
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2006/WebServices/RetrieveEntityMetadata")
xmlhttp.send("<?xml version='1.0' encoding='utf-8'?>"+"\n\n"+"<soap:Envelope"+
' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'+
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
' xmlns:xsd="http://www.w3.org/2001/XMLSchema">'+
' <soap:Body>' +
' <RetrieveEntityMetadata xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">' +
' <entityName>' + crmForm.ObjectTypeName + '</entityName>' +
' <flags>IncludeAttributes</flags>' +
' </RetrieveEntityMetadata>' +
' </soap:Body>' +
' </soap:Envelope>');
var result = xmlhttp.responseXML;
var attributes = result.selectNodes("//Attribute");
for (i=0; i<attributes.length; i++) {
var attribute = attributes[i];
var attributename = attribute.selectSingleNode("Name");
var attributedescription = attribute.selectSingleNode("Description");
if (attributedescription != null) {
if (attributedescription.text != "") {
var element = document.getElementById(attributename.text);
if (element != null) {
element.title = attributedescription.text;
}
element = document.getElementById(attributename.text + "_c");
if (element != null) {
element.title = attributedescription.text;
}
}
}
}
In diesem Skript wird das (undokumentierte und unsupportete) Attributfeld "title" verwendet, das Microsoft CRM intern nutzt, jedoch nicht überschreibt, wenn es bereits verwendet wird. Der Rest ist ein klassischer Webdienstaufruf auf die Microsoft CRM Metadaten.
Viel Spaß beim Austesten!!!