阻止Dynamics CRM 2011使用上次使用的表单

时间:2014-12-03 15:43:48

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

默认情况下,动态会保存用户对特定实体使用的最后一种形式。如果用户稍后打开相同类型的实体,则使用上次使用的表单。

有没有办法迫使动态总是使用某种形式?

2 个答案:

答案 0 :(得分:6)

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

您必须获取并更新符合以下条件的UserEntityUISettings

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

您需要更新lastviewedformxml属性以设置您希望用户看到的表单。该属性为string,其格式应为:

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

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

有一些问题需要注意:

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

答案 1 :(得分:3)

您需要在加载时将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)