Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

时间:2023-03-09 04:17:12
Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现的。

那么,如果要在list (homepage)界面实现多条记录的克隆,这时就不方便加字段以触发插件了。这时我们可以用js调用web service的方式来实现。下面介绍详细的步骤:

 

1. List界面添加按钮

  • 要注意不是form界面:

Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

 

  • 添加按钮:

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

Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

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

 

Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

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

 

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学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

里面的实现可以参考 Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 这里就不详谈。

接着就可以service 的dll 放到 Program Files\Microsoft Dynamics CRM\CRMWeb\bin 目录下,asmx文件放到 ISV 目录下 即可。

 

Dynamic CRM 2013学习笔记 系列汇总 -- 持续更新中