CRM 2013 中 Phone 呼叫表单或其他 activity 表单上的自定义按钮 "Mark as Complete and New"

Custom button "Mark as Complete and New" on Phone Call form or other activity form in CRM 2013

有时需要一个按钮自动完成并创建一个新的 phone 调用,将旧调用的一些数据传输到新调用,有一个解决方案。也可以在其他表单上实现此行为。

  1. http://crmvisualribbonedit.codeplex.com/

  2. 下载CRM 2011/2013可视化功能区编辑器
  3. 创建 Phone调用功能区脚本,将在后面的步骤中创建的按钮使用。

  1. 定义在上一步中创建的脚本的以下源。脚本将 phone 调用标记为已完成并打开一个新的 phone 调用 - 关于和描述字段通过 url 发送。因此,如果 url 超过 2000 个字符,则必须将其缩短,否则 link 将不起作用。
function SaveAsCompleteAndNew() {
    // Attempt to save Activity and Mark it as Complete
    SaveAsCompleted();

    // If the form is not valid
    if (!Xrm.Page.data.getIsValid())
        return;

    var url = "/main.aspx?etn=phonecall&pagetype=entityrecord&extraqs=";

    var regardingString = "";
    var regardingValue = Xrm.Page.getAttribute("regardingobjectid").getValue();
    if (regardingValue != null) {
        regardingString += "&regarding_id=" + regardingValue[0].id;
        regardingString += "&regarding_name=" + regardingValue[0].name;
        regardingString += "&regarding_type=" + regardingValue[0].entityType;
        regardingString = encodeURIComponent(regardingString);
    }
    var descriptionValue = Xrm.Page.data.entity.attributes.get("description").getValue();
    var descriptionString = ((descriptionValue != null) ? encodeURIComponent("description=" + descriptionValue) : "");

    // The url length is limited to about 2k chars, otherwise the link cannot be opened. Therefore the length has to be limited.
    var maxDescriptionLength = 1970 - (url.length + regardingString.length);

    if (descriptionString.length > maxDescriptionLength) {
        var shortenedText = descriptionString.substr(0, maxDescriptionLength - 25);

        // Patt1 checks if it ends with e.g. %1 and patt2 with %. These are not allowed because they have been reduced by 
        // substr. Correct format is three chars like %20 for white space. If there are not in correct format, url does not work
        var patt1 = new RegExp("%\d$");
        var patt2 = new RegExp("%$");

        if (patt1.test(shortenedText))
            shortenedText = shortenedText.substr(0, shortenedText.length - 3);
        else if (patt2.test(shortenedText))
            shortenedText = shortenedText.substr(0, shortenedText.length - 2);

        descriptionString = shortenedText + encodeURIComponent("\n...shortened...");
    }

    var extraqsEncoded = descriptionString + regardingString;

    window.open(url + extraqsEncoded);
}
  1. 运行 Visual Ribbon Editor for CRM 2011/2013,连接到 CRM 实例,select Phone 调用实体并添加一个新按钮 "Complete And New" 通过新按钮功能。在 详细信息 选项卡上定义以下设置:

注意:如您所见,还定义了图标。将这些图标作为 Web 资源加载到 CRM。

  1. Select Action 选项卡并定义应在单击 "Complete And New button" 命令时执行的操作。作为函数名称,使用与步骤 3 中定义的名称相同的名称。库应该是在步骤 3 中创建的脚本的路径。

  1. 您还可以定义 显示规则 - 在我们的例子中,我们只向有权写入当前 phone 呼叫条目的人显示按钮,如果phone 调用处于 Open 状态(状态代码 = 1)。

  1. 保存 Visual Ribbon Editor for CRM 2011/2013 中的所有更改并发布它们。也不要忘记在 CRM 自定义中发布更改,否则添加的网络资源不可用。