从Ribbon JScript CRM Online 2011调用C#代码

我需要在实体上单击function区按钮执行一些代码,该实体从CRM Online 2011更新一些相关数据。我宁愿不必在JScript中编写所有这些逻辑。 有没有办法从JScript调用C#代码? 我查看了Microsoft在function区中使用的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服务function。 我希望能做到这样的事情。 我可以添加自己的Web服务function吗?

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

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

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

虽然只是随机传递一个Assign消息或某些东西可能有效,但在微软的眼中它可能不受支持,如果其他人不得不看这个系统就很难调试。

还有另一种方法,在表单中插入两个选项,当您单击在function区中创建的自定义按钮时,将两个选项值设为true,然后在为实体检查创建的插件中运行表单的save方法两个选项值为true然后运行您的代码,之后再将两个选项值设为false。 同样在表单中,您可以使两个选项不可见。

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

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

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

CrmRestKit

XrmServiceToolkit

玩得开心

丹尼尔

我在这里参加派对的时间比较晚,但只是为了简化那些为最新版本的CRM查看此主题的人(因为它被标记为crm online):现在有一些叫做“Action”的东西可以创建与工作流程或业务流程流程相同。 您可以为该Action指定输入和输出参数。 主要优点:

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

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

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