Dynamics 365 可編輯子網格
- 提示
-
- 擷取子網格資料
- 擷取實體資料(循環出來)
- 執行個體
- 總結
提示
可編輯子網格的建立的詳細步驟可以去這個網址看看https://www.cnblogs.com/LanHai12/p/14074799.html
(注:foreach循環的操作無法在F12中直接進行,可以使用debugger調試的方法來檢視所擷取到的值)
擷取子網格資料
通過以下的操作,我們就可以将子網格中的資料通過foreach循環将每一條都顯示出來(注:stugrade為子網格的唯一名稱)
//擷取的為目前頁面所勾選的子網格資訊
//var rows = Xrm.Page.getControl("子網格名稱").getGrid().getSelectedRows();
//擷取所有行
//var rows = Xrm.Page.getControl("子網格名稱").getGrid().getRows();
var row2 = Xrm.Page.getControl("stugrade").getGrid().getRows();//學生
row2.forEach(function (row, i) {
//将子網格中字段名為以下操作中的名稱的值全部循環出來
var aa = row2.get(i).getData().getEntity().attributes.get("new_stuachievement").getValue();
var bb = row2.get(i).getData().getEntity().attributes.get("new_name").getValue();
var cc = row2.get(i).getData().getEntity().attributes.get("new_stuclass").getValue();
//驗證一下擷取到的值
alert("" + aa + "" + bb + "" + cc + "");
});
擷取實體資料(循環出來)
由于使用子網格拿取資料是隻能擷取到目前頁面的資料,在子網格中可能存在着多頁資料,這個時候就要用到實體擷取到全部資料了。(注:簡單的寫了下兩個表的(學生表與年級表))
function getxml() {
var xmlhttp;
if (window.ActiveXObject) {
var aVersions = ["Msxml2.XMLHttp", "Msxml2.XMLHttp.5.0", "Msxml2.XMLHttp.4.0", "Msxml2.XMLHttp.3.0", "Microsoft.XMLHttp"];
for (var i = 0; i < aVersions.length; i++) {
try {
xmlHttp = new ActiveXObject(aVersions[i]);
break;
} catch (e) { }
}
} else if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function cs() {
//目前頁面的id,擷取到的字元串中的英文字元為大寫字母.
var bbb = Xrm.Page.data.entity.getId().replace("{", "").replace("}", "");
var requestURL = Xrm.Page.context.getClientUrl() + "/api/data/v9.0/new_subgrid2s";
var xmlhttp = getxml();
xmlhttp.open("GET", requestURL, false);
xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
//xmlhttp.setRequestHeader("Content-Length", 0);
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.setRequestHeader("Prefer", "odata.include-annotations=*");//formatvalue
xmlhttp.send();
//data就是實體名為new_subgrid2s的實體的全部資料
var data = JSON.parse(xmlhttp.responseText);
console.log(data)
var c;//學生姓名
data.value.forEach(function (val, i) {
//toUpperCase為将所有的英文字元轉換為大寫字母
//toLowerCase為将所有的英文字元轉換為小寫字母
//實體中與目前頁面相關聯的lookup(查詢)字段的id,擷取到的字元串中的英文字元為小寫寫字母.
var aaa = val._new_grade_value;
var cc = val.new_name;//實體記錄中的學生姓名
//擷取到與目前頁面相關的實體記錄的資訊
if (bbb == aaa.toUpperCase()) {
c = cc;//為學生姓名指派
}
alert(c);//将循環出來的學生姓名一一彈出
});
}
執行個體
該執行個體是基于四個表來進行的(老師表、學生表、班級表、年級表(年級表最大)),根據老師(班主任)的姓名來查找到有關班級的學生的成績以及班級的評價(注:在執行表單中需要一個老師姓名的字段)
function getxml() {
var xmlhttp;
if (window.ActiveXObject) {
var aVersions = ["Msxml2.XMLHttp", "Msxml2.XMLHttp.5.0", "Msxml2.XMLHttp.4.0", "Msxml2.XMLHttp.3.0", "Microsoft.XMLHttp"];
for (var i = 0; i < aVersions.length; i++) {
try {
xmlHttp = new ActiveXObject(aVersions[i]);
break;
} catch (e) { }
}
} else if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function cs() {
var requestURL = Xrm.Page.context.getClientUrl() + "/api/data/v9.0/new_subgrid2s";
var xmlhttp = getxml();
xmlhttp.open("GET", requestURL, false);
xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
//xmlhttp.setRequestHeader("Content-Length", 0);
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.setRequestHeader("Prefer", "odata.include-annotations=*");//formatvalue
xmlhttp.send();
var data = JSON.parse(xmlhttp.responseText);
console.log(data)
var teaname = Xrm.Page.getAttribute("new_teacher").getValue();//老師姓名
if (teaname != "" && teaname != null && teaname != undefined) {
var row1 = Xrm.Page.getControl("teagrade").getGrid().getRows();//老師
var row3 = Xrm.Page.getControl("classgrade").getGrid().getRows();//班級
var a = 0;//班級最高分
var teaa = 0;//班級平均分
var tear = 0;//班級人數
var b;//學生姓名
var c;//班級名稱
var d;//老師所在班級
var e;//班級總評價
var yw;//國文
var sx;//數學
var yy;//英語
//首先需要将老師表循環出來
row1.forEach(function (row, i) {
debugger;
var ddd = row1.get(i).getData().getEntity().attributes.get("new_name").getValue();
//将老師所在的班級擷取到
var dd = row1.get(i).getData().getEntity().attributes.get("new_teaclass").getValue();
if (ddd == teaname) {
d = dd;
}
});
data.value.forEach(function (val, i) {
var aa = val.new_stuachievement;//學生成績
var bb = val.new_name;
var cc = val._new_stuclass_value;.//lookup字段(班級)的id
var yws = val.new_c;
var sxs = val.new_m;
var yys = val.new_e;
//d[0].id為老師所在的班級的id
if (cc == d[0].id) {
teaa += aa;
tear++;
//擷取班級中的最高成績
if (aa > a) {
a = aa;
b = bb;
c = cc;//此處的c為id
yw = yws;
sx = sxs;
yy = yys;
}
}
});
//将班級表循環出來
row3.forEach(function (row, i) {
var ee = row3.get(i).getData().getEntity().attributes.get("new_classgrade").getValue();
var eee = row3.get(i).getData().getEntity().getId();
var eeee = row3.get(i).getData().getEntity().attributes.get("new_name").getValue();
if (eee == d[0].id) {
e = ee;
c = eeee;//此處的c為學生姓名
}
});
//班級表中的班級評價字段為選項集類型,給它加一個簡單的判斷。
if (e == 100000000) {
e = "優秀";
} else if (e == 100000001) {
e = "良好";
} else if (e == 100000002) {
e = "有待提升";
} else {
e = "暫未擁有";
}
var zz =
"導員姓名:" + teaname +
" \n班級名稱:" + c +
" \n班級最高分:" + a +
" \n班級平均分:" + teaa / tear +
" \n班級人數:" + tear +
" \n學生姓名(最高分):" + b +
" \n國文:" + yw +
" \n數學:" + sx +
" \n英語:" + yy +
" \n班級總評價:" + e + "";
//這樣就可以在執行表單(年級表)中通過輸入老師的姓名擷取到其他三個實體中的資料了。
alert(zz);
}
}
總結
本人能力有限,有一些錯誤在所難免,望大佬進行指正。寫這個部落格首先呢也是想要幫到大家,其次也是想要給自己留一個記憶點,讓自己可以時刻的檢驗自身。
加油!!!
所學習的網址(上面提示中也有):https://www.cnblogs.com/LanHai12/p/14074799.html