前面介绍过如何克隆一条当前的记录: 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 实现多条记录复制(克隆)功能的更多相关文章

  1. Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

    本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...

  2. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  3. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

  4. Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较

    我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...

  5. Dynamic CRM 2013学习笔记(十四)复制/克隆记录

    经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的 ...

  6. Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用

    一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见   function setTabVisableByName( ...

  7. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  8. Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示

    CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...

  9. Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

随机推荐

  1. Spring day01笔记

    struts:web层,比较简单(ValueStack值栈,拦截器) hibernate:dao层,知识点杂 spring:service层,重要,讲多少用多少 --> [了解]   sprin ...

  2. SQLSERVER | 查询数据库中所有的表的名字 | 查询数据库中的所有数据库名

    SQLSERVER 1.查询某个数据库中所有的表名:  SELECT Name FROM SysObjects Where XType='U' ORDER BY Name 2.查询数据库中的所有数据库 ...

  3. 网络存储技术介绍(1) ( based on zt)

    最近由于某同学微信发了一些网络存储的文章,开始感兴趣,稍微收集了一些 一.  网络存储技术 http://ask.zol.com.cn/q/187044.html  (yxr:很老的技术介绍吧) 网络 ...

  4. scala.collection.immutable.HashSet$.empty()Lscala/collection/immutable/HashSet

    最近重新搭了spark环境.在Master上使用了IDEA来写代码.确实很方便.我用的是hadoop2.6.spark1.5.1forhadoop2.6. scala之前用的是2.11.0老是报这个错 ...

  5. 随笔—邀请赛前训— Codeforces Round #330 (Div. 2) Vitaly and Night

    题意:给你很多对数,要么是0要么是1.不全0则ans++. 思路即题意. #include<cstdio> #include<cstring> #include<iost ...

  6. VC++ 限制窗口的大小范围的方法

    响应WM_GETMAXMININFO  的消息 处理之 void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { // TODO: Add y ...

  7. WCF学习第一天

    WCF 设计目标 : 1:生产效率 : 统一了现有的各种分布式技术                          基于属性(Attribute)的开发                       ...

  8. PHP基本问题

    WampServer修改端口及菜单Localhost http://www.wuwenhui.cn/3047.html WAMPServer默认配置更改-web根目录 http://blog.csdn ...

  9. 使用IntelliJ IDEA建立java web项目

    一.“File”->"New Project"弹出对话框,选择“Java Enterprise” 二.选择web模板 三.输入项目名 四.项目结构

  10. ubuntu下安装迅雷

    ----------------------------------2016-03-28新增适用于ubuntu16.04系列的安装包---------------------------------- ...