Sredus
Sredus

Reputation: 29

Entity Type not defined when Customer Field Code is run

I've been working on this code. When I run it and some fields don't exist, the error of Entity Type not defined pops up. I tried If statements but it still isn't working. I've read it may have something to do with the currency but I can't seem to figure out what. I'm a beginner and most of this isn't my code. Help! Thanks.

function customerSelected() {
    var customerID = Xrm.Page.getAttribute("customerid").getValue();
    var custID = customerID[0].id.substr(1, 36);

    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/accounts?$select=_defaultpricelevelid_value,paymenttermscode,shippingmethodcode&$filter=accountid eq " + custID + "&$orderby=name asc", true);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200) {
                var results = JSON.parse(this.response);
                for (var i = 0; i < results.value.length; i++) {
                    var _defaultpricelevelid_value = results.value[i]["_defaultpricelevelid_value"];
                    var _defaultpricelevelid_value_formatted = results.value[i]["_defaultpricelevelid_value@OData.Community.Display.V1.FormattedValue"];
                    var _defaultpricelevelid_value_lookuplogicalname = results.value[i]["_defaultpricelevelid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
                    var paymenttermscode = results.value[i]["paymenttermscode"];
                    var paymenttermscode_formatted = results.value[i]["[email protected]"];
                    var shippingmethodcode = results.value[i]["shippingmethodcode"];
                    var shippingmethodcode_formatted = results.value[i]["[email protected]"];

                    var _defaultpricelevelid_lookupVal = new Array();                    
                    _defaultpricelevelid_lookupVal[0] = new Object();
                    _defaultpricelevelid_lookupVal[0].id = _defaultpricelevelid_value;
                    _defaultpricelevelid_lookupVal[0].name = _defaultpricelevelid_value_formatted;
                    _defaultpricelevelid_lookupVal[0].entityType = _defaultpricelevelid_value_lookuplogicalname;


                    if ("pricelevelid" != null)
                    {
                        Xrm.Page.getAttribute("pricelevelid").setValue(_defaultpricelevelid_lookupVal);
                    } 


                    if ("paymenttermscode" != null)
                    {
                        Xrm.Page.getAttribute("paymenttermscode").setValue(_defaultpricelevelid_lookupVal);
                    }

                    if ("shippingmethodcode" != null)
                    {
                        Xrm.Page.getAttribute("shippingmethodcode").setValue(_defaultpricelevelid_lookupVal);
                    }
                }
            } else {
                Xrm.Utility.alertDialog(this.statusText);
            }
        }
    };
    req.send();
};

Upvotes: 1

Views: 1347

Answers (1)

Henk van Boeijen
Henk van Boeijen

Reputation: 7928

Your query will always return exactly one record, so it does not make sense to use a loop to iterate the results.

Condition ("pricelevelid" != null) will always be true. It probably should be (_defaultpricelevelid_value != null). The same goes for the lines below it.

Your code is assigning _defaultpricelevelid_lookupVal to three separate attributes, which cannot be correct. Apparently this object is supposed to represent a lookup ID value referencing entity pricelevel. Therefore it only makes sense to assign it to attribute pricelevelid. paymenttermscode and shippingmethodcode are option set attributes and apparently need to be filled with the values of the equally named variables.

Replace the for loop with this code:

if (results.value[0]._defaultpricelevelid_value != null) {
    var priceLevelId = [{
        id = results.value[0]._defaultpricelevelid_value,
        name = results.value[0]["_defaultpricelevelid_value@OData.Community.Display.V1.FormattedValue"],
        entityType = "pricelevel"
    }];

    Xrm.Page.getAttribute("pricelevelid").setValue(priceLevelId);
}

if (results.value[0].paymenttermscode != null) {
    Xrm.Page.getAttribute("paymenttermscode").setValue(results.value[0].paymenttermscode);
}

if (results.value[0].shippingmethodcode != null) {
    Xrm.Page.getAttribute("shippingmethodcode").setValue(results.value[0].shippingmethodcode);
}

Upvotes: 1

Related Questions