2

我正在使用安装了 UR1 的 CRM 2013 内部部署

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

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

空关于从自定义实体创建的任务的字段

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

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

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

有没有办法解决这个问题?

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

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

4

2 回答 2

1

遇到同样的问题。我解决它的方法是在表单上添加一个自定义实体的查找(我们把它放在一个隐藏的选项卡上)。当从自定义实体创建任务时,将填充查找。然后,您可以使用该查找来获取您需要填充的值,包括相关字段。不是最优雅的,但它有效。

于 2014-01-17T21:47:38.417 回答
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;
    }
  }
}

于 2015-11-23T13:38:11.170 回答