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