Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现的。
那么,如果要在list (homepage)界面实现多条记录的克隆,这时就不方便加字段以触发插件了。这时我们可以用js调用web service的方式来实现。下面介绍详细的步骤:
1. List界面添加按钮
- 要注意不是form界面:

- 添加按钮:
跟普通添加按钮一样,注明function,js文件,然后要加上参数 - 选中了哪些记录

这个参数只记录了所有选中的记录的id

这个参数记录了所有选中的记录
2. JS方法
// clone to credit note
function homePageCloneCreditNote(selectedItems) {
debugger;
if (selectedItems.length < 1) {
return;
}
var txt = "";
for (var i = 0; i < selectedItems.length; i++) {
txt += '"' + selectedItems[i] + '"';
if (i != selectedItems.length - 1) {
txt += ',';
}
}
var ids = "[" + txt + "]";
var data = '{ userId: "' + Xrm.Page.context.getUserId() + '", ids: ' + ids + '}';
var url = "/ISV/InternalWebServices/CreditNoteService.asmx/CloneCreditNote";
$.ajax({
url: url,
type: "POST",
contentType: "application/json; charset=utf-8",
data: data,
success: function (json) {
var result = json.d;
if (result.indexOf("success") >= 0) {
Xrm.Utility.openEntityForm("new_credit_note", result.replace("success", ""));
}
else {
alert(result);
}
},
error: function (x, e) {
alert("error" + e.responseText);
}
});
}
这里可以看到service的path: /ISV/InternalWebServices/CreditNoteService.asmx/CloneCreditNote, 也就是说我们把service放到了ISV下。
克隆完成后自动跳转到新的记录。
3. web service
- 初始化
public void InitService()
{
Uri orgServiceUri = new Uri(CRMServiceUrl + "/XRMServices/2011/Organization.svc");
ClientCredentials credentials = new ClientCredentials();
if (CRMAuthenticationType == "AD")
{
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(CRMUserName, CRMUserPassword, CRMUserDomainName);
}
else if (CRMAuthenticationType == "ADFS")
{
credentials.UserName.UserName = CRMUserDomainName + "\\" + CRMUserName;
credentials.UserName.Password = CRMUserPassword;
}
OrganizationServiceProxy crmServiceProxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
crmServiceProxy.EnableProxyTypes();
m_CrmService = (IOrganizationService)crmServiceProxy;
m_SvcContext = new ServiceContext(m_CrmService);
}
- 写web service方法:

里面的实现可以参考 Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 这里就不详谈。
接着就可以service 的dll 放到 Program Files\Microsoft Dynamics CRM\CRMWeb\bin 目录下,asmx文件放到 ISV 目录下 即可。
Dynamic CRM 2013学习笔记 系列汇总 -- 持续更新中
Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能的更多相关文章
- Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项
本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...
- Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较
我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...
- Dynamic CRM 2013学习笔记(十四)复制/克隆记录
经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的 ...
- Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见 function setTabVisableByName( ...
- Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮
有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...
- Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示
CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...
- Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...
随机推荐
- .NET 扩展方法
.NET 的扩展方法是在.NET 3.0引入的,MSDN给出的定义是:扩展方法使你能够向现有类型“添加”方法(包括你自定义的类型和对象噢),而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩 ...
- cin判断读取结束 C++语言
cin是C++的输入流,可以通过>>进行读取. 判断读取结束,一般有两种方法,具体取决于与输入的约定. 1 以特殊值结尾. 如输入整数,以-1结束,那么当读到-1的时候,就确定读取结束了. ...
- 继续努力刷题--BE STRONGER AND STRONGER
Come on,baby~ (1)Contains Duplicate 有自己的思路:两个for双重循环直接一个个比较,但肯定不是最优解.所以,使用Set中的HashSet(一种没有重复元素的无序集合 ...
- [转载] 4. JebAPI 之 jeb.api.ui
本文转载自: https://www.zybuluo.com/oro-oro/note/145250 JebInstance可以通过getUI()方法来获得jeb.api.ui.JebUI. JebU ...
- js window.open() 父窗口与子窗口的互相调用(未必有用)
javascript 父窗口与子窗口的互相调用 <html> <head></head> <body> 主要实现父子关系的页面 window.opene ...
- (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- DIV半透明,内层不受影响的代码
<div style=" background:rgba(0, 0, 0, 0.1)"><br /> <img src="http://im ...
- setAttribute()和getAttibute(),getParameter()
request.setAttribute("key",value)方法给主键设置一个值, request.getAttribute("key")方法从上述设置的 ...
- emacs windows 下配置
一般windows的emacs是一个压缩包,解压一下,即可.主程序在bin文件夹下.需要设置一下emacs的home路径, 打开注册表,创建HKEY_LOCAL_MACHINE/SOFTWARE/GN ...
- PoEdu - C++阶段班- Lesson07 To Lesson10_C to C++
07 重载导致的二义性 问题:为什么一定要重载呢?重载能方便我们注重函数的功能,当参数类型不确定时,我们能很便捷的利用重载的机制达到目的. 重载注意点:二义性 看代码: #include <c ...