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

2023-10-26

目标:

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中查看,确实更新过来,并将原始表中的相关字段值清空

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • MySQL 修改默认值

    alter TABLE tableName alter COLUMN columnName set default defaultValue
  • 电阻式湿度传感器原理

    电阻式湿度传感器是利用湿敏元件的电气特性 如电阻值 随湿度的变化而变化的原理进行湿度测量的传感器 湿敏元件一般是在绝缘物上浸渍吸湿性物质 或者通过蒸发 涂覆等工艺制各一层金属 半导体 高分子薄膜和粉末状颗粒而制作的 在湿敏元件的吸湿和脱湿过
  • 大模型应用落地实践:2大路径、3大痛点、5大革命、6大预判!

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 双端队列,以顺序表实现双端队列,在队头和队尾添加删除元素

    include
  • opencv之kmeans原理与分割实例

    opencv之K Means原理与实现方法 C 和python版本 KMeans原理 今天记录一下opencv中kmeans中的原理以及图像分割的一个实例 K Means是对数据进行分类的算法 属于无监督学习的一种 首先需要确定对图像进行类
  • 关于QT多界面切换

    1 新增一窗体文件 会自动生成ui1 cpp ui1 h ui1 ui这三个文件 可以进行设计 绑定ui中的控件与数据模型 比如ui gt lable setText string 2 再增加一个UI文件 ui2 也会生成相应的 同上 3
  • 原本是list类型,pandas读入后变成str、obejct等其他的类型,恢复成list,并进行数据炸裂explode操作

    文章目录 本文章拟解决问题 不是这些问题请绕路 一 需求 二 操作步骤 1 从数据库中读入数据 读入的原始数据如图 2 将数据炸裂 将JSON列表拆分 一个JSON对象一行 1 具体的代码过程 踩坑 因为pandas读入数据 将 JSON列
  • XTUOJ 1176 I Love Military Chess(模拟)

    I Love Military Chess Accepted 45 Submit 141 Time Limit 1000 MS Memory Limit 65536 KB 题目描述 陆军棋 又称陆战棋 简称军棋 是中国近代的一种两人棋类 设
  • Niantic CEO访谈:元宇宙、AR眼镜和公司发展史

    Meta宣布转型元宇宙社交平台后 人们一度觉得VR是元宇宙的未来 与此同时 一些AR公司表示不服 认为AR在元宇宙的布局更超前 尤其是Snap Niantic等较成熟的移动端AR公司 对于元宇宙有各自不同的看法和规划 比如 此前Nianti
  • 下载、安装IntelliJ IDEA

    文章目录 一 下载IntelliJ IDEA 二 安装IntelliJ IDEA 三 配置主题与插件 1 设置界面主题 2 配置缺省插件 3 配置特色插件 四 设置IntelliJ IDEA 1 设置编译器用鼠标滚鼠来缩放字号 2 设置编辑
  • uml交互图

    交互图用来描述系统中的对象是如何进行相互作用的 即一组对象是如何进行消息传递的 当交互图建模时 通常既包括对象 每个对象都扮演某一特定的角色 又包括消息 每个消息都代表对象之间的通信活动 并导致一定的动作发生 关键字 对象 顺序 消息 顺序
  • 7.13字节跳动模拟面试

    GDB调试常见命令 进入GDB 取消联系 插入端点 gdb help 查看命令帮助 具体命令查询在gdb中输入help 命令 简写h gdb run 重新开始运行文件 run text 加载文本文件 run bin 加载二进制文件 简写r
  • 【TODO】2023年秋招笔试未竞

    2023年秋招笔试没做完的题 腾讯20230326笔试三道 米哈游20230813笔试第三题 网易雷火0820第2 3 4题 第三题 深信服0912B卷3 4题 第三题 背包装满最小数量 第四题 腾讯0915重考最后一道 字节0917秋招第
  • 5.xaml RadioButton按钮

    1 运行图 2 运行源码 a Xaml源码
  • 基于面部视觉的疲劳检测-哈欠

    基于视觉的疲劳检测可以认为大致分为三个部分 点头 哈欠 眨眼 分别为姿态 嘴部特征 眼部特征 本文主要介绍哈欠的测定方法 首先研究了陈博士 基于可拓学与面部视觉 一文 他提出一种基于特征点曲线拟合的嘴唇内轮廓检测方法 先对嘴巴进行粗定位 然
  • Removable singularity

    In complex analysis a removable singularity of a holomorphic function is a point at which the function is undefined but
  • darknet 网络构建过程

    整个网络的构建从load network cfgfile weightfile clear 函数开始 从cfg文件中读取网络配置文件 分配好内存 加载预训练好的权重 network load network char cfg char we
  • Spring工作原理

    Spring工作原理 Spring框架是由于软件开发的复杂性而创建的 Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情 然而 Spring的用途不仅仅限于服务器端的开发 从简单性 可测试性和松耦合性角度而言 绝大
  • Sass -- 变量、计算、导入

    变量 在Sass中 支持使用变量 变量以 开头 变量使用 Sass不存在变量提升 变量必须先定义再使用 如果需要将变量在字符串中使用 需将变量写在 中 计算 在Sass中 允许数值运算 导入 Sass 类似 CSS 支持 import 指令

随机推荐

  • linux开放端口命令

    linux系统中控制端口的开启与关闭可以由命令来执行 下面由学习啦小编为大家整理了linux下开放端口命令的相关知识 希望对大家有所帮助 linux开放端口命令1 打开指定端口 sbin iptables I INPUT p tcp dpo
  • PyQt5 主窗口操作多个子窗口实现

    实现思路 1 pyqt5 designer 生成ui py 修改文件 2 ui py 主py 直接操作 3 main py 操作 ui 继承类py ui py 优选方案3 示例 from main win import Ui MainWin
  • 客户端session与服务端session

    转自 https www cnblogs com qhyhao p 3565681 html 会话 Session 跟踪是Web程序中常用的技术 用来跟踪用户的整个会话 常用的会话跟踪技术是Cookie与Session Cookie通过在客
  • 移动互联网应用程序必要个人信息范围

    常见类型App的必要个人信息范围 必要个人信息 是指保障APP基本功能服务正常运行所必需的个人信息 缺少该信息APP即无法实现基本功能服务 具体是指消费侧用户个人信息 不包括服务供给侧用户个人信息 地图导航类 基本功能服务为 定位和导航 必
  • Unity3D Linear01Depth & LinearEyeDepth d3d

    Unity3D Linear01Depth LinearEyeDepth 函数深度解析 原创 2015年07月11日 20 25 42 5609 UnityCG cginc中原函数如下 Z buffer to linear 0 1 dept
  • Java学习(110)Java输入输出流——文件输入流FileInputStream

    Java输入输出流 文件输入流FileInputStream FileInputStream概述 1 FileInputStream作用 2 FileInputStream的常用方法简介 FileInputStream案例 前置条件 rea
  • matlab程序打包成软件(exe可执行文件)

    文章目录 下载matlab runtime 打包 分享安装 下载matlab runtime 略 打包 分享安装 打包生成的文件夹如下 包含runtime的exe文件 安装后即可在没有matlab环境下运行
  • 使用免费的Spire.Pdf.dll打印无水印的PDF文件

    文章目录 前言 一 如何获取免费的无水印的Spire Pdf dll 二 使用步骤 1 引入库 2 打印 总结 前言 最近想利用c 打印PDF文件 在网上找了各种办法 发现最简单的就是使用第三方的动态链接库Spire Pdf dll了 但是
  • Spring的第一个入门程序(学习总结)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 提示 以下是本篇文章正文内容 下面案例可供参考 一 Spring框架的概述 1 1 1 Spring是什么 Spring是分层的 Java SE EE应用full stack
  • CHIP-2020 中文医学文本实体关系抽取

    来源 这里 这个项目的本质是 医学文本的实体关系联合抽取问题 既要解决命名实体识别 又要解决关系分类问题 使用RoFormerV2模型作为预训练模型 GPLinker作为下游模型 在Embedding层添加FGM对抗训练增加模型性能 一 数
  • 【Go Module系列教程】手把手教你,如何使用Go Module

    Go Module系列教程 手把手教你如何使用Go Module 请先看我 看了网上的好多中文博客 一直都没有看懂 这个Go Module 到底如何使用 无奈 只能去看看官方的教程是怎么样的了 本文结合 官方文档 和 我自己的实践 根据官方
  • 【MySQL】什么事MySQL的回表?

    1 概述 在MySQL数据库中 当使用非聚簇索引 如B树索引 进行查询时 如果需要获取查询结果行的其他列数据时 就可能发生回表 Look up 操作 回表是指当使用索引进行查询时 首先根据索引定位到对应的行 然后需要再次通过行的物理位置进行
  • OSQL 命令行工具

    1 什么是 Osql osql 工具是一个 Microsoft Windows 32 命令提示符工具 您可以使用它运行 Transact SQL 语句和脚本文件 osql 工具使用 ODBC 数据库应用程序编程接口 API 与服务器通讯 在
  • EulerOS常用命令参考

    最近在使用华为云的欧拉系统 发现命令手册比较难找 找了一下官方文档 有一份比较详细的在eSignt手册下 如下地址 需要请自行跳转 参考如下文档 EulerOS常用命令参考 eSight 20 1 维护指南 12 华为
  • 软件工程—白盒测试习题答案

    一 问题描述 为以下程序设计满足指定覆盖准则的测试用例 测试用例数量应尽可能少 其中 判定1 x gt 3 z lt 10 的真分支为b 假分支为c 判定2 x 4 y gt 5 的真分支为d 假分支为e 条件1 x gt 3 的两种取值由
  • 最近邻插值、双线性插值

    1 最近邻插值 越是简单的模型越适合用来举例子 我们就举个简单的图像 3X3 的256级灰度图 也就是高为3个象素 宽也是3个象素的图像 每个象素的取值可以是 0 255 代表该像素的亮度 255代表最亮 也就是白色 0代表最暗 即黑色 假
  • html input ng model,AngularJS ng-model用法及代码示例

    ngModel是绑定输入 选择和文本区域 并将所需的用户值存储在变量中的指令 我们可以在需要该值时使用该变量 在验证过程中也以某种形式使用它 我们可以将ngModel用于 输入文本 复选框 无线电 数 电子邮件 网址 日期 datetime
  • 人工智能研究的新前线:生成式对抗网络

    林懿伦 戴星原 李力 王晓 王飞跃 来源 科学网 摘要 生成式对抗网络 Generative adversarial networks GAN 是当前人工智能学界最为重要的研究热点之一 其突出的生成能力不仅可用于生成各类图像和自然语言数据
  • iptables 实现域名过滤

    1 需求 过滤指定的域名 网站 如www baidu com www bilibili com 2 实现方案 方案1 字符串过滤 iptables A FOWARD m string algo kmp string bilibili com
  • 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 可参