天天看点

Dynamics 365 可编辑子网格(获取子网格数据与获取实体数据)提示

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

继续阅读