在使用联系人创建活动时,我应该如何实现`OnLoad`事件处理程序?

时间:2012-10-08 22:14:56

标签: dynamics-crm-2011

我已经使用类型活动的自定义实体创建了自己的解决方案。我想在创建新实例使用现有联系人时显示消息但不允许用户创建一个消息,如果仅尝试在不通过联系人的情况下执行此操作< /强>

基本上,我的目标是创建该活动并不是不可能的(除了单向之外,表格将直接隐藏在任何尝试中)。用户必须转到联系人(或潜在客户等)并在那里添加和创建自定义活动实体的实例。这样,我可以保证“关于”字段已经填写完毕。

我猜我需要以某种方式检测表单的打开是否为创建尝试。我怎么能这样做?

此外,就像现在一样,用户无法创建自定义类型的非接触式活动,因为它不会出现在包含其他活动的菜单上。我必须以某种方式禁用它,但我不知道如何。有人吗?

3 个答案:

答案 0 :(得分:2)

你可以通过多种方式做到这一点,但最简单的可能是:

  • 将相关字段设为只读。
  • 强制使用相关字段。

这样,如果用户打开一个创建新表单,他们将无法设置相关,因为它的强制性,他们将无法保存记录。当他们通过现有联系人打开时,将自动映射关联字段。那说在这种情况下只是强制要求我就够了。

As a side JavaScript can be used to identify the current form state,但我不确定这里有多大用处。)

就自定义活动的显示位置而言,默认情况下,我会在多个位置展示,例如:

  • CRM&gt;工作场所&gt;活动&gt;功能区&gt;其他活动&gt; XXX。
  • CRM&gt;工作场所&gt;活动&gt;查看选择器&gt; XXX。

它们不会显示在工作场所的左侧导航下,因为它们分组在“活动”下。我很确定这些都是默认设置。

您可以通过编辑站点地图来进行更好的控制,您可以在任何地方放置任何内容。

答案 1 :(得分:0)

除了伍德先生,我还想向您展示一些代码。它按预期工作,但我不确定它是否是最佳的。

var foo = function () {

  var whatIsGoingOn = Xrm.Page.ui.getFormType();

  if (whatIsGoingOn === 1)
    alert("Let there be an entity!");
  else
    alert("Not a creation...");
}

其他状态'(删除,更新等)数值列于here

答案 2 :(得分:0)

回答你问题的第二部分:

创建自定义活动时,您可以选中是否将其显示在“正常”活动菜单中,方法是选中实体表单右上角的框。据我所知,这是一次性选择,以后不能更改。

对于您的设置,我建议不要选中此框,因此它不会显示在活动菜单中,以避免用户被诱惑这样做。

相反,将活动N:1添加到联系人的显式关系,将另一个N:1添加到Lead。使用此关系将您的活动添加到Contact和Lead表单的左侧导航栏中,或为它们添加网格(取决于您希望如何使用它以及是否需要将视图过滤为默认“Associated View”以外的其他内容) )。

当用户导航到此部分时,他们将查看是否存在此类型的任何先前活动,并且能够添加新活动。但这意味着子记录是通过这种关系的子记录,而不是使用“关于”,因此在表单上使用活动的脚本,这样如果填写了联系人,它将被复制到关注,如果填写了铅那就复制了。如果两者都没有,那么使用警报或其他方法警告使用错误(请参阅前面的评论)。如果你想要只读,但是用脚本填写,你需要确保使用强制保存的值:

Xrm.Page.getAttribute("regardingobjectid").setSubmitMode("always");

您必须在表单上找到Contact and Lead的查找才能在脚本中使用它们,但是您可以使它们“默认不可见”,因此它们在那里但用户看不到(并且占用没有空间)。