返回

子发布项中获取列表视图自定义数据扩展列信息的故障排除指南

javascript

在子发布项中使用 getListItemXmlAttributes 方法的故障排除

简介

当在 SDL Tridion 的子发布项中使用 getListItemXmlAttributes 方法获取列表视图中的自定义数据扩展列信息时,你可能会遇到一个故障。本文将探讨此问题的根源并提供一种解决方法。

问题

尝试在子发布项中获取列表视图中的自定义数据扩展列信息时,你会收到以下错误:

Error: uncaught exception: [Exception... "Component returned failure code: 0x80004002    (NS\_NOINTERFACE) [nsIWebProgress.DOMWindow]"  nsresult: "0x80004002 (NS\_NOINTERFACE)"     location: "JS frame :: chrome://browser/content/tabbrowser.xml ::  :: line 545"     data: no]

故障原因

此错误是由以下情况引起的:当你在子发布项中调用 getListItemXmlAttributes 方法时,代码尝试加载父项中的数据,而不是子项中的数据。

解决方法

要解决此问题,需要对以下两个文件中的代码进行修改:

1. PageEx.js

MyCompany.Tridion.RTFExtensions.PageEx.prototype.setDataFromList = function (node, parentId, timeStamp) {
    $extUtils.setDataFromList(node, parentId, timeStamp, this);
    if (parentId !== this.getParentId()) {
        this.callBase("Tridion.ContentManager.Page", "setDataFromList", [node, parentId, timeStamp]);
    }
};

2. utils.js

MyCompany.Tridion.RTFExtensions.Utilities.setDataFromList = function (node, parentId, timeStamp, itemClicked) {
    var p = itemClicked.properties;

    if (!timeStamp || timeStamp > itemClicked.getTimeStamp()) {
        var tmp;
        if (tmp = node.getAttribute('Version')) {
            p.versionNumberString = tmp;
            p.previousVersion = tmp;
        }
        if (tmp = node.getAttribute('ModifiedBy')) {
            p.modifiedBy = tmp;
            p.initialModifierUserName = tmp;
        }
        if (tmp = node.getAttribute('LockedBy')) {
            p.lockedBy = tmp;
        }
        if (tmp = node.getAttribute('ApprovalStatus')) {
            p.approvalStatus = tmp;
            p.previousApprovalStatus = tmp;
        }
        if (tmp = node.getAttribute('PublishDate')) {
            p.publishDate = tmp;
        }
        if (p.customModifiedDate === undefined) {
            if (tmp = node.getAttribute('Modified')) {
                p.customModifiedDate = tmp;
            }
        }
    }
    if (p.versionNumberString && parentId !== itemClicked.getParentId()) {
        itemClicked.callBase("Tridion.ContentManager.Page", "setDataFromList", [node, parentId, timeStamp]);
    }
};

注意事项

  • 这些更改仅适用于使用 Data Extender 获取自定义数据扩展列信息的情况。
  • 确保已更新 AI 螺旋创作器中的代码以反映这些更改。
  • 始终在测试环境中进行这些更改,并在进行任何更改之前备份你的数据。

常见问题解答

1. 我为什么需要进行这些更改?

这些更改可以解决在子发布项中使用 getListItemXmlAttributes 方法获取自定义数据扩展列信息时出现的错误。

2. 这些更改是如何工作的?

这些更改修改了代码,使它在子发布项中调用 getListItemXmlAttributes 方法时加载子项中的数据,而不是父项中的数据。

3. 我如何知道这些更改是否有效?

进行更改并重新加载列表视图后,你应该能够在子发布项中获取自定义数据扩展列信息,而不会出现错误。

4. 这些更改是否会影响其他功能?

这些更改不会影响其他功能。它们只修改了 getListItemXmlAttributes 方法在子发布项中的行为。

5. 我可以向谁寻求帮助以进行这些更改?

如果你在进行这些更改时遇到问题,你可以向 SDL Tridion 支持团队寻求帮助。