9

我需要在单击实体上的功能区按钮时执行一些代码,该实体更新来自 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 服务功能。我希望做这样的事情。我可以添加自己的 Web 服务功能吗?

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

4

5 回答 5

10

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

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

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

于 2011-02-23T16:36:58.183 回答
4

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

于 2011-06-01T06:59:25.580 回答
1

我想这就是你正在寻找的http://geekswithblogs.net/Nilesh/archive/2011/08/25/call-c-code-inside-silverlight-application-on-click-of-custom.aspx

于 2011-08-29T05:40:14.010 回答
1

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

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

CrmRestKit

XrmService 工具包

玩得开心

丹尼尔

于 2012-05-21T16:19:43.987 回答
0

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

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

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

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

于 2017-04-10T07:58:11.660 回答