gpt4 book ai didi

tridion - 在 GetItems(filter) 调用之后在方法之间传递它们时访问 TOM.NET 对象的属性

转载 作者:行者123 更新时间:2023-12-04 20:15:37 26 4
gpt4 key购买 nike

在使用 GetItems 方法并将返回集合中的每个项目传递给另一个方法时,我们遇到了一个奇怪的问题。

我们在 Tridion 2011 GA 上。

以下代码正在破坏:

private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels)
{
OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session);
filtersg.Recursive = false;
IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup};
filtersg.ItemTypes = itemtype;

foreach (StructureGroup sg in structureGroup.GetItems(filtersg))
{
GetSiteMap(sg, counterTemp, levels);
}
}

private void GetSiteMap(StructureGroup sg, int counter, int levels)
{
logger.Info(sg.Id); //ok
logger.Info(sg.Title); //ok
logger.Info(sg.Directory); // null !?
}

但是,如果在将 sg 传递给下一个方法之前访问 sg.Directory,则一切正常:
private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels)
OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session);
filtersg.Recursive = false;
IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup};
filtersg.ItemTypes = itemtype;

foreach (StructureGroup sg in structureGroup.GetItems(filtersg))
{
logger.Info(sg.Directory); //if printed here, all works fine down the line.
GetSiteMap(sg, counterTemp, levels);
}
}

private void GetSiteMap(StructureGroup sg, int counter, int levels)
{
logger.Info(sg.Id); //ok
logger.Info(sg.Title); //ok
logger.Info(sg.Directory); // ok }
}

感觉 GetItems() 方法发生了一些事情,它没有返回完整的对象,并且一旦将部分加载的对象传递给 next 方法,它就无法加载属性,就好像丢失了原始引用一样.

有人可以解释一下这里发生了什么吗?另外,在方法之间传递 TOM.NET 对象是不是很糟糕?

谢谢

最佳答案

这看起来很奇怪——事实上我无法在 2011 GA 上重现——我将你的函数粘贴到 .NET TBB 中并从模板生成器中执行——这两种方法都可以很好地输出目录。这可能不会作为纯粹的猜测工作,但有几件事可以尝试:

  • filter.BaseColumns = ListBaseColumns.Extended - 我认为这仅适用于 GetListItems,但你永远不知道...
  • 尝试输出 sg.LoadState看看它是否以某种方式没有完全加载

  • 如果一切都失败了,请使用 GetListItems ,然后为您要处理的每个项目创建一个 StructureGroup 对象(假设您将根据 sg.Title 从站点地图中跳过一些 SG)。从 GetListItems 返回的数据没有 url 属性有点遗憾,否则您可以使用 Publication.GetListItems() 一次性完成所有操作, 具有仅用于 SG(或 SG 和页面)的递归过滤器。

    关于tridion - 在 GetItems(filter) 调用之后在方法之间传递它们时访问 TOM.NET 对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071526/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com