使用JScript检索crm2011子网格中的行

时间:2010-12-03 15:36:46

标签: dynamics-crm javascript dynamics-crm-2011

作为一名JScript新手,我在MS CRM 2011中遇到子网格问题。

我有一个带有子网格的表单,在该表单的OnSave中,我想遍历子网格中的所有行。

如何使用JScript执行此操作?或者可能是另一种方式,ex插件?

THX

4 个答案:

答案 0 :(得分:1)

以下是保存表单时可以执行的示例代码

var gridControl = document.getElementById('grdrelatedcontacts').control;
for (var intRowNumber = 0; intRowNumber < gridControl.getRecordsFromInnerGrid().length; intRowNumber++)
    for (var intCellNumber = 0; intCellNumber < gridControl.getRecordsFromInnerGrid()[intRowNumber][3].cells.length; intCellNumber++)
        alert(gridControl.getRecordsFromInnerGrid()[intRowNumber][3].cells[intCellNumber].outerText);

答案 1 :(得分:0)

您可以通过执行以下操作来检查保存中的子网格值:

var gridControl = document.getElementById('subgrid_id').control;
var ids = gridControl.get_allRecordIds();
for(i = 0; i < ids.length; i++) {
    var cellValue = gridControl.getCellValue('column_name', ids[i]);
    // logic
}

在加载时执行此操作更具挑战性,因为子格式是异步加载的,并且在表单onload事件触发时不可能加载。您可以定期检查网格,通过调用表单onload中的以下函数来查看它何时完成加载:

function subGridOnload() {
    var grid = document.getElementById('subgrid_id');
    if (grid.readyState!="complete") {
        // delay one second and try again.  
        setTimeout(subGridOnload, 1000);
        return;
    }

    // logic
}

答案 2 :(得分:0)

使用Rest调用并检索相应的记录:S

答案 3 :(得分:0)

您可以执行以下操作:

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/pws_streedandhousenodatas?$filter=_pws_streetandhousenumberid_value eq " + Xrm.Page.data.entity.getId(), 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 pws_streedandhousenodataid = results.value[i]["pws_streedandhousenodataid"];
            }
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();

在这种情况下,Xrm.Page.data.entity.getId()为您获取当前的记录ID,并且您正在查找所有查找(位于子网格中),还可以添加一些字段以选择更多他们的信息。