使用javascript获取属性名称是动态CRM中实体的主要形式

时间:2016-10-19 09:23:12

标签: javascript dynamics-crm dynamics-crm-2013 dynamics-crm-online

我想使用javascript从systemform实体获取属性的主要形式的属性的逻辑名称。还要将这些名称保存在数组或列表中。

请建议我正确的查询以及如何从响应中获取每个属性的名称。

代码:

        var serverUrl;
        serverUrl = location.protocol + "//" + location.host;
        function getformfields() {
            debugger;
            var oDataUri = "systemforms?$select=formxml&$filter=name eq 'account'";
            var data = getODataRecords(oDataUri);
            if(data!=null&&data!="")
            {
               //how to get field name from response
            }

        }
        function getODataRecords(ODataUrl) {
            debugger;
            var data;
            var Query = ODataUrl;
            var req = new XMLHttpRequest();

            req.open("GET", serverUrl + "/api/data/v8.0/" + Query, 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.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue");
            req.onreadystatechange = function () {
                if (this.readyState == 4 /* complete */) {
                    req.onreadystatechange = null;
                    if (this.status == 200) {
                        data = JSON.parse(this.response);
                    }
                    else {
                        var error = JSON.parse(this.response).error;
                        alert(error.message);
                    }
                }
            };
            req.send();
            return data;

        }

1 个答案:

答案 0 :(得分:1)

只需解析结果formxml属性即可。

唯一要注意的是,如果多次添加属性,则控件的id附加有数字后缀,例如name1name2等。datafieldname属性指向控件引用的属性。

var data = getODataRecords(oDataUri);
if (data && data.value && data.value[0] && data.value[0].formxml) {
 var xml = jQuery(data.value[0].formxml);
 var controls = xml.find('control');
 jQuery.each(controls, function(index, control) {
     console.log(jQuery(control).attr('datafieldname'));
 });
}