最近接到一个开发任务,需要在主档上筛选子网格,但是在写的过程中有个有意思的bug,特意记录一下:
1、使用常规方法获取子网格
使用微软官方代码获取子网格会报错Cannot read property ‘SetParameter’ of undefined,不清楚是不是当前版本的CRM不支持的原因
//获取子网格
var subgrid = Xrm.Page.getControl("new_purchase_order_id").getGrid();
2、使用非常规方法获取子网格
当使用非常规方法获取子网格时,不会报错
//获取子网格
var subgrid = window.parent.document.getElementById("new_purchase_order_id");
以下是完整代码:
//显示关联本记录的LC付款方式的且【业务审批表】.{审核状态}==“审核中”或“已审核”的业务审批单,即显示占用LC额度的订单
function filter_new_purchase_order() {
//获取子网格
var subgrid = window.parent.document.getElementById("new_purchase_order_id");
//var subgrid = Xrm.Page.getControl("new_purchase_order_id").getGrid();
if (subgrid == null) {
setTimeout(function () {
filterSubGrid();
}, 2000); //如果为空再加载
return;
}
//获取所对应的信用证号
var new_name = rtcrm("#new_name").val();
var new_letter_credit = rtcrm.retrieve("new_letter_credits?$filter=new_name eq " + "'" + new_name + "'", false);
var new_letter_credit_id = new_letter_credit.value[0].new_letter_creditid.replace("{", "").replace("}", "");
//构造fetch查询
var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>\
<entity name='new_purchase_order'>\
<attribute name='new_purchase_orderid' />\
<attribute name='new_name' />\
<attribute name='createdon' />\
<order attribute='new_name' descending='false' />\
<filter type='and'>\
<condition attribute='new_approvalstatus' operator='in'>\
<value>2</value>\
<value>3</value>\
</condition>\
</filter>\
<link-entity name='new_lc_for_order' from='new_purchase_order_id' to='new_purchase_orderid' alias='aa'>\
<filter type = 'and'>\
<condition attribute='new_letter_credit_id' operator='eq' value='"+ new_letter_credit_id + "' />\
</filter>\
</link-entity>\
</entity>\
</fetch>";
//执行筛选逻辑
subgrid.control.SetParameter("fetchXml", fetchXml);
subgrid.control.refresh();
}