任务“关于”字段不在CRM 2013中从子网格填充

时间:2014-01-17 00:26:49

标签: javascript dynamics-crm dynamics-crm-2013

我在安装了UR1的情况下使用CRM 2013内部部署

我有一个带有子网格的自定义实体,查看相关的“任务”,如下所示: subgrid on custom entity

每当我使用子网格右上角的“+”按钮从子网格创建任务时;新创建的任务的“关注”字段保持空白。当它应该通过查找来创建时,它是从。

创建的

Empty Regarding field on task created from custom entity

我在任务实体上有javascript,它检查“关注”字段以检查它是从哪个实体创建的(如果它是从一个创建的)并从调用实体获取某些字段值以填充任务上的字段

由于“关注”字段永远不会填充,因此Javascript永远不会触发 - 并且字段不会填充。

保存记录时,如果关联字段为空(我没有手动填写) - 如果刷新页面,最终将在10 - 15秒后填充正确的记录。然后将填充正确的字段,用户可以编辑选项集值并再次保存。这对用户来说并不理想,因为他们希望这是一个流畅的行动。

有没有解决这个问题的方法?

为此问题的未来浏览器编辑:

找到了部分工作。如果使用“活动”子网格而不是“任务”子网格,则将填充该字段。这有一个缺点,因为您无法编辑“活动”子网格的视图以显示“任务”特定字段。

2 个答案:

答案 0 :(得分:1)

进入同样的问题。我解决它的方法是在表单上添加对自定义实体的查找(我们将其放在隐藏的选项卡上)。从自定义实体创建任务时,将填充查找。然后,您可以使用该查找来获取填充所需的值,包括关注字段。不是最优雅,但它的工作原理。

答案 1 :(得分:1)

我也遇到了这个问题,并采用纯JS方法解决。在加载任务表单时,调用populateRegarding()。

这是有效的,因为即使默认情况下不填充关于查找,查询字符串参数也包括_CreateFromType和_CreateFromId值。

这适用于2015年,没有在早期版本上测试。请注意,它不受支持。

function populateRegarding() {
  var regarding = Xrm.Page.getAttribute("regardingobjectid"),
    createFromType = Xrm.Page.context.getQueryStringParameters()._CreateFromType,
    createFromId = Xrm.Page.context.getQueryStringParameters()._CreateFromId;

  if (!createFromId || !createFromType || 
      !regarding || regarding.getValue() !== null) {
    return;
  }

  var entityLogicalName = getEntityLogicalNameFromObjectTypeCode(createFromType);

  regarding.setValue([{
    id: createFromId,
    entityType: entityLogicalName,
    name: "Hardcoded Name" // TODO: retrieve name dynamically
  }]);
}

// This method uses an undocumented object and is therefore unsupported. 
// You could implement a supported version of this function by querying for
// metadata, but that would be very expensive.
function getEntityLogicalNameFromObjectTypeCode(otc) {
  var map = Mscrm.EntityPropUtil.EntityTypeName2CodeMap,
    logicalName;

  otc = Number(otc); // convert string to number

  for (logicalName in map) {
    if (!map.hasOwnProperty(logicalName)) { continue; }

    if (map[logicalName] === otc) {
      return logicalName;
    }
  }
}