我需要在实体上点击功能区按钮执行一些代码,该实体可以从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#代码(“分配”,“更新”等)而且我不喜欢看到创建自己的消息的方法。
答案 0 :(得分:10)
您无法在2011年添加自己的网络服务或创建自己的自定义插件消息。我们发现这样做的最佳方式是:
虽然只是随机传递一个Assign消息或某些东西可能有效,但在微软的眼中它可能不受支持,如果其他人不得不看这个系统那么调试就好了。
答案 1 :(得分:4)
还有另外一种方法,在表单中插入两个选项,当您单击在功能区中创建的自定义按钮时,将两个选项值设为true,然后在为您创建的插件中运行表单的save方法实体检查两个选项值是否为true然后运行您的代码,之后再将两个选项值设为false。也可以在表单中使两个选项不可见。
答案 2 :(得分:1)
答案 3 :(得分:1)
根据复杂程度和要求(例如,在js中无法执行对另一个用户的行为的操作),我总是更喜欢纯粹的js方法。为了降低复杂性,请尝试使用能够为您提供核心功能的库:
玩得开心
丹尼尔
答案 4 :(得分:0)
我在这里参加聚会的时间比较晚,但只是为了简化那些为最新版本的CRM查看此主题的人(因为它被标记为crm online): 目前有一些被称为" Action"可以像工作流程或业务流程流程一样创建。您可以为该Action指定输入和输出参数。主要优点:
您可以为该操作注册一个插件,因此您可以运行一些c#logic
您可以使用webAPI
至于CRM 2011,虽然它已经过时了 - 比接受行动中建议的更好的方法是在自定义实体的post RetrieveMutliple上运行你的逻辑,这样你就可以避免创建/删除一些魔术记录(并且用户只需要具有读取权限,而不是创建或更新)。