Convert TextBox to DropDown in CRM 2011 Form
Today, we got a requirement where we don’t know the options to be populated in the dropdown as they are supposed to get from external data source. So we thought of converting TextBox to DrowDown with the values from data source in JavaScript and worked on it.
Here is the code for it…
// Conver TextBox to DropDown in CRM 2011
function CreateDropDownList() {
//synchronous AJAX function to get Xml content from a custom webservice
$.ajax({
type: “POST”,
async: false,
contentType: “application/json; charset=utf-8”,
datatype: “json”,
url: url + “/**********.asmx/*************”,
data: “{‘status’:’true’}”,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader(“Accept”, “application/json”);
//XMLHttpRequest.setRequestHeader(“Content-Type”, “text/xml; charset=utf-8”);
},
success: function (XmlHttpRequest) {
//alert(XmlHttpRequest);
msg = XmlHttpRequest.d; //window.JSON.parse(XmlHttpRequest.responseText);
//alert(‘Response ‘ + msg);
},
error: function (XmlHttpRequest) {
var error = window.JSON.parse(XmlHttpRequest.responseText);
//alert(“Error : ” + XmlHttpRequest.responseText);
}
});
// Check for the browser
try {
if (window.ActiveXObject) {
//Code for IE
var Details = msg;
var NDetails = Details.replace(/\\”/g, ‘\”‘)
xmlDoc = new ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async = false;
xmlDoc.loadXML(NDetails);
}
else {
// code for Mozilla, firefox, Opera, etc.
var Details = msg;
var NDetails = Details;
xmlDoc = document.implementation.createDocument(“”, “”, null);
parser = new DOMParser();
xmlDoc = parser.parseFromString(NDetails, “text/xml”);
}
}
catch (e) {
alert(e.message);
}
var lsElements = xmlDoc.getElementsByTagName(“Description”);
////Erase the pick list
var pick = document.getElementById(“new_source”);
var ctName = pick.name;
var ctId = pick.id + ‘_lst’;
var ctClass = “ms-crm-SelectBox”;
// Get the existing, we can use for populating it on the dropdown.
var pVal = Xrm.Page.getAttribute(“new_source”).getValue();
var parent = document.getElementById(‘new_source_d’);
pick.style.display = “none”;
var picklistControl = document.createElement(“SELECT”);
////Copy the Text field properties to the picklist
picklistControl.id = ctId;
//// picklistControl.req = textControl.req;
picklistControl.name = ctName;
//// Set Required Style
picklistControl.className = ctClass;
var usedNames = {};
////Create a new Option
var option = document.createElement(“OPTION”);
option.value = 0;
option.innerText = “”;
option.text = “”;
////Add the option to the picklist
picklistControl.appendChild(option);
for (vCount = 0; vCount < lsElements.length; vCount++) {
var Source = lsElements.item(vCount).childNodes.item(0).nodeValue;
//// Do not add duplicate options
var isExist = false;
if (usedNames[Source.toUpperCase()]) {
continue;
}
else {
usedNames[Source.toUpperCase()] = Source.toUpperCase();
}
////Create a new Option
option = document.createElement(“OPTION”);
option.value = vCount + 1;
option.innerText = Source;
option.text = Source;
if (pVal != null && Source != null) {
// Check if Source and Existing Value is same, just select option set selected property to True.
option.selected = (trim(Source) == trim(pVal));
}
////Add the option to the picklist
picklistControl.appendChild(option);
}
////append the picklist to the document
parent.appendChild(picklistControl);
}
//
—
Happy CRM’ing,
Gopinath
is this supported?and is it supported in crm 2016/5?
LikeLike
It is not the Supported way, I have used in CRM 2011.
LikeLike