【问题标题】:CRM 2013: New Ribbon Button to Cancel a TaskCRM 2013:用于取消任务的新功能区按钮
【发布时间】:2014-09-26 03:16:03
【问题描述】:

我们正在使用 CRM 2013。要求是从任务表单中完全删除“关闭”按钮,然后创建一个新按钮来取消任务。所以当点击这个按钮时,任务将是“另存为已取消”。

我尝试为Task实体修改customization.xml RibbonDiffXML如下:

</CustomAction>
      <CustomAction Id="nwp.task.Form.SaveAsCancelled.CustomAction" Location="Mscrm.Form.task.MainTab.Save.Controls._children" Sequence="55">
        <CommandUIDefinition>
          <Button Command="Mscrm.SaveAsCancelled" Id="nwp.task.Form.SaveAsCancelled" Image32by32="$webresource:nwp_/img/btn_CaseCloseDialog32.png" Image16by16="$webresource:nwp_/img/btn_CaseCloseDialog16.png" LabelText="$LocLabels:nwp.task.Form.SaveAsCancelled.LabelText" Sequence="55" TemplateAlias="o1" ToolTipTitle="$LocLabels:nwp.task.Form.SaveAsCancelled.ToolTipTitle" ToolTipDescription="$LocLabels:nwp.task.Form.SaveAsCancelled.ToolTipDescription" />
        </CommandUIDefinition>
      </CustomAction>

这里是 Mscrm.SaveAsCancelled 的命令定义。我在 /_static/_common/scripts/RibbonActions.js 下的 CRM 服务器中找到了一个内置函数

<CommandDefinition Id="Mscrm.SaveAsCancelled">
        <EnableRules>
      <EnableRule Id="Mscrm.VisualizationPaneNotMaximized" />
    </EnableRules>
    <DisplayRules>
      <DisplayRule Id="Mscrm.CanWriteSelected" />
      <DisplayRule Id="Mscrm.SelectedEntityHasStatecode" />
    </DisplayRules>
    <Actions>
      <JavaScriptFunction FunctionName="Mscrm.GridRibbonActions.deactivate" Library="/_static/_common/scripts/RibbonActions.js">
        <CrmParameter Value="SelectedControl" />
        <CrmParameter Value="SelectedControlSelectedItemReferences" />
        <CrmParameter Value="SelectedEntityTypeCode" />
        <IntParameter Value="2" />
      </JavaScriptFunction>
    </Actions>
      </CommandDefinition>

但是RibbonActions.js中deactivate函数的定义需要我选择一些记录项如下:

Mscrm.GridRibbonActions.deactivate=function(gridControl,records,entityTypeCode,defaultCloseState,callback)

{Mscrm.GridCommandActions.deactivate(gridControl,records,entityTypeCode,defaultCloseState,callback)}

所以当我单击“取消”按钮时,它会要求我先选择一条记录,因为它是一个网格控件。但是如果我删除参数来选择某些记录,那么按钮将不会做任何事情。

你知道是否已经有一个不需要先选择记录的内置取消或 SaveAsCancelled 或 deactivate 功能?

感谢您的意见!

【问题讨论】:

  • 我不明白你怎么能期望在不先选择记录的情况下使用取消记录的方法,或者通过在网格中选择并使用网格按钮,或者打开记录以便它是仅“选择”一个,然后使用表单功能区上的按钮。出于兴趣,这是否意味着您打算让所有任务一直处于打开状态,并且只关闭那些被取消的任务,而不是那些已完成的任务?
  • 感谢亚当的回复。我不知道没有内置函数可以取消任务,所以我们改为按照此处的建议编写了一个 SOAP 请求,感谢 Guru Prasad guruprasadcrm.blogspot.com/2013/02/…

标签: javascript crm dynamics-crm-2013


【解决方案1】:

我可以想到两种不依赖重用平台代码的简单方法:

  1. Task 中添加一个新的“两个值”字段(我们称之为new_cancelled,默认值:否)并将其放在表单上并使其隐藏。
  2. 创建实时工作流,在记录更改时自动运行
  3. WF 会这样运行(伪代码)
如果 new_cancelled 不包含数据 设置 new_cancelled = 否 如果 new_cancelled = 是 将状态更改为已取消
  1. 让您的功能区按钮调用自定义 javascript 函数,该函数通过 OData 将 new_cancelled 更新为 Yes

另一种方法:

  1. 见上文
  2. 创建一个Action,我们称它为SaveTaskAsCancelled,并在传入new_cancelled 的记录更改后运行它。
  3. SAveTaskAsCancelled上注册一个插件,检查new_cancelled(同样的逻辑:如果它为null,则设置为No,如果为Yes则取消任务)
  4. 见上文

【讨论】:

  • 感谢 Alex 的好建议。相反,现在使用 SOAP 请求编写了一个自定义函数来取消任务。我们还在按钮上设置了一条规则,以便在表单不是只读时显示。但是我注意到,当没有填写所有必填字段时,用户仍然可以取消任务。我仍在查找阻止这种情况的显示规则。您知道是否有一条显示规则可以防止用户在未填写所有必填字段时取消任务?非常感谢。
  • 那将是&lt;ValueRule Field="your_field_name" InvertResult="true" Value="" /&gt; aka true if field is not empty(每个字段一个值规则,包含在DisplayRule 中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多