Friday, October 28, 2016

Dynamics CRM API Javascript - Get global option set by name

// returns a JSON object with display and value properties.
// accepts the name of the option set up in CRM
function getGlobalOptSet(name) {
    var globalOptionSetMetaDataId = null;

    var webapiQuery = baseUrl() + "GlobalOptionSetDefinitions?$select=Name";

    var req = new XMLHttpRequest();
    req.open("GET", webapiQuery, false);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");

    req.send();

    if (req.readyState == 4 /* complete */) {
        if (req.status == 201 || req.status == 200) {
            var RetrieveService = eval('(' + req.responseText + ')');
            if (RetrieveService.value.length > 0) {
                for (var i = 0; i < RetrieveService.value.length; i++) {
                    if (RetrieveService.value[i].Name == name) {

                        globalOptionSetMetaDataId = RetrieveService.value[i].MetadataId;

                        break;
                    }
                }
            }
        }
    }

    var output = [];

    if (globalOptionSetMetaDataId !== null)
    {
        webapiQuery = baseUrl() + "GlobalOptionSetDefinitions(" + globalOptionSetMetaDataId + ")";
        req = new XMLHttpRequest();
        req.open("GET", webapiQuery, false);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");

        req.send();

        if (req.readyState == 4 /* complete */) {
            if (req.status == 201 || req.status == 200) {
                var RetrieveService = eval('(' + req.responseText + ')');
                if (RetrieveService.Options.length > 0) {
                    var json = JSON.parse(req.responseText);
                 
                    // add to the output array
                    for (var i in json.Options) {
                        output.push({
                            display: json.Options[i].Label.UserLocalizedLabel.Label,
                            value: json.Options[i].Value
                        });
                    }
                }
            }
        }
    }

    return JSON.parse(JSON.stringify(output));
}