Dynamics 365 CRM Online 使用Ribbon Workbench 2016在view或form上添加按钮并实现CURD

目标:

Dynamics 365 CRM Online 使用Ribbon Workbench 2016在view或form上方添加按钮并根据View中所选中的记录实现CURD


内容步骤:

1、 安装Ribbon workbench 2016, 可参照官网如何下载与安装

  • 2、 创建供Ribbon workbench 2016所需的solution
  • 3、 使用Ribbon workbench 2016加载并打开solution
    4、 在Ribbon workbench 2016界面中添加button
    5、 在Ribbon workbench 2016界面的button事件中指定command
    6、在Ribbon workbench 2016界面为command指定javascript action
    7、编写实现业务逻辑的javascript脚本及其相关的方法

过程:

1、 创建soultion后,使用Ribbon workbench 2016打开soultion,此处我不介绍在dynamics 365 online如何创建soultion ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201208105143897.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDEzNjgyMw==,size_16,color_FFFFFF,t_70)

在这里插入图片描述

2、 在Ribbon workbench 2016界面中,首先是有三个level, 一个Home view, Sub grid和Form, 我这里选在Home view上添加一个button,选项如下设置,添加button,为button指定所调用的代码库,我这里使用javascript脚本,这里需要指定View所选的记录集,所以要启用参数Crm parameters
在这里插入图片描述
在这里插入图片描述

3、设置显示规则所调用的代码库与方法,方法在javascript代码库中有定义
在这里插入图片描述

4、 指定button所以调用的command
在这里插入图片描述

5、编写的javascript代码库中的方法

//获取用户组,如果是retail用户,则菜单按钮不可见,此处的harcode可以用参数设置
function Fei_EnableAnonyMousButton() {
    var roleEnable = false;
    var currentUserName = Xrm.Page.context.getUserName();
   // var currentuserRole = Xrm.Page.context.getUserRoleName();
   // alert(currentuserRole);    
    if (currentUserName == "# Retail") {

        roleEnable = false;
    }
    else {

        roleEnable = true;
    }
    return roleEnable;
}


//获取view中已选中的记录集
function Fei_getViewSelectedItems(Items,SelectedControl) {

    var currentUser = Xrm.Page.context.getUserName();//获取当前操作的用户
    //此处理写了hardcode测试,如果是为retail用户则没权限
    if (currentUser == "# Retail") {
        return;
    }
    var con = confirm("Are you sure to anonymous these contacts ?");
    if (con == true) {
        var contactItems = JSON.stringify(Items);
        var obj = eval('(' + contactItems + ')');
        for (var i = 0; i < obj.length; i++) {
            var contact_guid = obj[i].Id;
            contact_guid = contact_guid.replace('{', '').replace('}', '');

            Fei_GetContactInfo(contact_guid);
        }
    }
    SelectedControl.refresh();
}
//获取CRM的Url
function Fei_GetClientUrl() {
    var ClientURL = Xrm.Page.context.getClientUrl();
    var serviceurl = encodeURI(ClientURL + "/api/data/v8.1/");
    return serviceurl;
}
//根contactid查找contacts的部分字段信息
function Fei_GetContactInfo(contact_guid) {

    var querystring = "contacts?$select=emailaddress1,mobilephone,fullname,firstname,thk_contact_no&$filter=contactid eq '" + contact_guid + "'";
    var WebAPIUrl = Fei_GetClientUrl() + querystring;
    var data = ExecuteCrmCommand(WebAPIUrl, "GET");
   // alert(data);
    var obj = eval('(' + data + ')');
    var contact = Object.create(ContactInfo);
    for (var j = 0; j < obj.value.length; j++) {
        contact._contactid = contact_guid;
        contact._email = obj.value[j].emailaddress1;
        contact._mobilephone = obj.value[j].mobilephone
        contact._contact_no = obj.value[j].thk_contact_no;
        contact._fullname = obj.value[j].fullname;
       // alert(contact._contact_no + " " + contact._contactid);

        Fei_CreateAnonyMousContact(contact); //备份需要清空内容的字段信息,把信息添加到另一个entity
        Fei_CleanContactMainMsg(contact);//清空当前contact表的部分字段信息
    }
}

//把选择的记录集信息Post到另一个表中,
function Fei_CreateAnonyMousContact(ContactInfo) {
    var entityname = "Fei_anonymouses";
    var anonymous_json = {};
    anonymous_json["Fei_email"] = ContactInfo._email;
    anonymous_json["Fei_member_card_id"] = ContactInfo._contact_no;
    anonymous_json["Fei_phone"] = ContactInfo._mobilephone;
    anonymous_json["Fei_name"] = ContactInfo._fullname;
    anonymous_json["Fei_contactId@odata.bind"] = "/contacts(" + ContactInfo._contactid + ")";

    var jsonEntity = JSON.stringify(anonymous_json);
    //alert(jsonEntity);
    var WebAPI = Fei_GetClientUrl() + entityname;
   // alert(WebAPI);
   // alert(ContactInfo._contact_no);
    ExecuteCrmCommand(WebAPI, "POST", jsonEntity);
    alert("Create is OK");

}

//对当前已做备份的记录做部分字段值清空处理
function Fei_CleanContactMainMsg(ContactInfo) {
    var _contactid = ContactInfo._contactid;
    var entityname = "contacts(" + _contactid+")";
    var contactJson = {};
    contactJson["emailaddress1"] = "";
    contactJson["mobilephone"] = "";
   // contactJson["address1"] = "";
    contactJson["new_Fei_phoneareacode"] = "";
  //  contactJson["new_emailaddressstatus"] = -1;
    var jsonEntity = JSON.stringify(contactJson);    
    var WebAPI = Fei_GetClientUrl() + entityname;
    ExecuteCrmCommand(WebAPI, "PATCH", jsonEntity);
    alert("PATCH is OK");

}
function ContactInfo() {

    var _contactid;
    var _email;
    var _mobilephone;
    var _contact_no;
    var _fullname;
    var _firstname;

}
//CRM command执行方法
function ExecuteCrmCommand(WebApiUrl, action, data) {
    var req = new XMLHttpRequest()
    if (action == "GET")
        req.open(action, WebApiUrl, false);
    if (action == "POST")
        req.open(action, encodeURI(WebApiUrl), true);
    if (action == "PATCH")
        req.open(action, encodeURI(WebApiUrl), true);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {

            switch (this.status) {
                case 200: // Success with content returned in response body.   
                    req.onreadystatechange = null;
                //data = JSON.parse(this.responseBody);
                case 204: // Success with no content returned in response body.
                    var accountUri = this.getResponseHeader("OData-EntityId");
                    console.log("Created account with URI: " + accountUri)
                    //  data = JSON.parse(this.responseText);
                    break;
                default: // All other statuses are unexpected so are treated like errors.
                    var error;
                    try {
                        error = JSON.parse(request.response).error;
                    }
                    catch (e) {
                        error = new Error("Unexpected Error");
                    }
                    reject(error);
                    break;
            }
        }
    };
    req.send(data);
    return req.responseText;
}

测试结果:

1、Contact view中选中二行记录可见Contact anonymous按钮,选中二行记录点击该按钮产生预期的功能效果 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201208140318202.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDEzNjgyMw==,size_16,color_FFFFFF,t_70#pic_center)

在contact view中选中几行记录点击按钮测试一下再转到anonymous view中查看,确实更新过来,并将原始表中的相关字段值清空

在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fei-AX&CRM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值