【问题标题】:Call C# Code from Ribbon JScript CRM Online 2011从功能区 JScript CRM Online 2011 调用 C# 代码
【发布时间】:2011-02-23 13:30:55
【问题描述】:

我需要在单击实体上的功能区按钮时执行一些代码,该实体更新来自 CRM Online 2011 的一些相关数据。我不希望在 JScript 中编写所有这些逻辑。有没有办法从 JScript 调用 C# 代码?我从功能区查看了 Microsoft 正在使用的 JScript 文件,它看起来像这样:

Mscrm.Campaign.copyCampaign = function (campaignId, saveAsTemplate) {
    var $v_0 = new RemoteCommand("MarketingAutomation", "CopyCampaign", null);
    $v_0.SetParameter("campaignId", campaignId);
    $v_0.SetParameter("saveAsTemplate", saveAsTemplate.toString());
    var $v_1 = $v_0.Execute(),
        $v_2 = $v_1.ReturnValue;
    openObj(Mscrm.EntityTypeCode.Campaign, $v_2, null, null, Mscrm.NavigationMode.NavigationModeInline, null);
    Mscrm.Utilities.refreshParentGrid(Mscrm.EntityTypeCode.Campaign, campaignId)
};

我看到一个 RemoteCommand 调用被放置,我假设它正在返回到某个 Web 服务功能。我希望做这样的事情。我可以添加自己的网络服务功能吗?

我能够从 JScript 进行调用,为实体发送“分配”消息,就像测试一样。这可能与插件一起使用,但是为实际上并未发生的执行事件发送消息似乎很奇怪,只是为了运行一些 C# 代码(“分配”、“更新”等),而我没有看不到创建自己的消息的方法。

【问题讨论】:

    标签: c# javascript dynamics-crm dynamics-crm-2011 dynamics-crm-online


    【解决方案1】:

    您无法在 2011 年添加自己的网络服务或创建自己的自定义插件消息。我们发现这样做的最佳方法是:

    1. 设置一个专门存在的实体以在服务器上运行自定义代码。
    2. 为其指定名为消息名称的属性和另一个属性,以便以您选择的任何格式(XML、JSON 等)传递参数
    3. 从您的 JavaScript 中,创建一个传递正确参数的实体实例。
    4. 将插件附加到该实体的 Create 消息,然后它会读取参数并执行您想要的任何自定义代码。

    虽然只是随机传递一个 Assign 消息或某些东西可能会起作用,但它可能在 Microsoft 眼中不受支持,而且如果其他人不得不查看这个系统,那么调试将非常困难。

    【讨论】:

    • 听起来微软并没有考虑到这一点。我将尝试您的解决方法,因为这听起来是唯一可用的方法,而不是将其全部编写为 JavaScript。感谢您的帮助!
    • 嗨,有没有可用的例子?我是 CRM 新手,当用户点击功能区中的按钮时,我想运行一些 c# 代码。我希望有人还在读这篇文章。
    • 我已经成功使用了这个方法。在我的场景中,代理实体(实体 P)创建插件创建了另一个实体(实体 A)的实例,该实例随后触发了实体 A 的创建插件。我不希望这种情况发生在这个特定的场景中,其中实体 A 是由于在功能区中单击按钮而创建的。我必须确保实体 A 的 Create 插件正确处理了这两个场景。没什么大不了的,但要记住一些事情。
    【解决方案2】:

    还有另一种方法,在表单中插入两个选项,当您单击在功能区中创建的自定义按钮时,使两个选项值为 true,然后在您为实体检查两个选项值是否为真,然后运行您的代码,然后再次将两个选项值设置为假。也可以在表单中使这两个选项不可见。

    【讨论】:

    • +1,在大多数(如果不是全部)情况下,功能区按钮操作会触发实体的更新事件。
    【解决方案3】:

    【讨论】:

    • 所以推荐这个。请从该共享链接中添加一些引用,用您自己的话解释,而不是简单地粘贴链接作为答案。
    【解决方案4】:

    好吧,编写大量的 JavaScript 逻辑是一个混乱的想法,但是创建通过创建操作(或多或少是命令模式)触发“真实”逻辑的 js 代码也会导致复杂的解决方案。

    根据复杂程度和要求(例如,在 js 中无法对其他用户的行为执行操作),我总是更喜欢纯 js 方法。为了降低复杂性,请尝试为您提供核心功能的库:

    CrmRestKit

    XrmServiceToolkit

    玩得开心

    丹尼尔

    【讨论】:

      【解决方案5】:

      我在这里聚会迟到了,但只是为了让那些关注这个主题以获取最新版本 CRM 的人们简化一些事情(因为它被标记为 crm online): 目前有一种叫做“动作”的东西可以像工作流或业务流程一样创建。您可以为该操作指定输入和输出参数。主要优势:

      • 您可以为该操作注册一个插件,因此您可以运行一些 c# 逻辑而不是运行 jScript 逻辑

      • 您可以使用 webAPI 调用此操作

      至于 CRM 2011,尽管它已经过时了 - 比已接受操作中建议的更好的方法是在自定义实体的后 RetrieveMutliple 上运行您的逻辑,这样您就可以避免创建/删除一些魔术记录(并且用户会只需对其拥有读取权限,无需创建或更新)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多