最近接到一個開發任務,需要在主檔上篩選子網格,但是在寫的過程中有個有意思的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();
}