【问题标题】:Prevent Dynamics CRM 2011 from using last used form防止 Dynamics CRM 2011 使用上次使用的表单
【发布时间】:2015-02-01 06:10:18
【问题描述】:

默认情况下,动态会保存用户为某个实体使用的最后一个表单。如果用户稍后打开相同类型的实体,则动态使用上次使用的表单。

有没有办法强制动态始终使用某种形式?

【问题讨论】:

  • 那个在用户设置里面,现在手头没有代码,去查一下

标签: dynamics-crm-2011 dynamics-crm microsoft-dynamics


【解决方案1】:

According to this MVP's blog 您可以在Post-Retrieve 插件中更新特定所有者和实体的UserEntityUISettings 记录以设置要显示的表单。

您必须获取并更新UserEntityUISettings,它遵守以下条件:

  • ownerid 等于插件上下文的 UserId
  • 'objecttypecode' 等于实体的类型代码(数字,而不是字符串)

您需要更新lastviewedformxml 属性以设置您希望用户看到的表单。该属性是一个string,它应该具有这种格式:

"<MRUForm><Form Type=\"Main\" Id=\"FORM_GUID_HERE\" /></MRUForm>"

可以从包含实体的任何导出解决方案的customization.xml 中获取表单 GUID。

有一些问题需要注意:

  • 这个插件是沙盒功能的(所以没关系),但它与一个未记录的属性交互,所以确保它在任何更新后都能正常工作(它应该,但你永远不知道......)
  • “特殊”用户(如 SYSTEM)在 UserEntityUISettings 中没有任何记录,因此如果查询返回 0 条记录,则不应使用 throw
  • 我怀疑用户将无法再手动切换表单...
  • 这是一个检索插件,它可能会减慢查找速度

【讨论】:

  • 自定义插件似乎是唯一的解决方案。希望有一个选项可以停用此行为。谢谢!
【解决方案2】:

您需要编写 JavaScript 以在加载时将表单切换为默认(或任何其他)表单。

function switchForm() {

// Get current form's Label
var item = Xrm.Page.ui.formSelector.getCurrentItem();
itemLabel = item.getLabel();

if (itemLabel != "Information")
{
  //load Information form
  var items = Xrm.Page.ui.formSelector.items.get();
  for (var i in items)
  {
    var form= items[i];
    var formId = form.getId();
    var formLabel = form.getLabel();

    //Check condition either on ID or Label from Form
    if (formLabel == "Information")
    {     
      form.navigate();
    } 
  }
} 

请检查这些:

Xrm.Page.ui.formSelector item (client-side reference)

【讨论】:

  • 这不会避免出现“错误”的表格(简单地说,是的,但是......)。另外,记录会加载两次。
  • @Alex 是的,您是对的,表单将加载两次。我不知道有任何其他方法可以检查/更新用户设置。
  • 正如亚历克斯所说,不幸的是没有选择,因为双重负载问题。
  • @Geaz 我也有兴趣看看如何在不加载表单两次的情况下完成。
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
相关资源
最近更新 更多