1

我有 2 个模板:ArticleItem 和 ArticlePageItem,ArticlePageItem 有一个链接到 ArticleItem 的 ReferenceField 'Content.Reference'。下面是创建文章的代码:

Item articlePageItem = articlePageParentItem.Add(articleItem.Name, new TemplateItem(master.GetItem(ConstantString.ArticlePageTemplateID)));
using (new UserSwitcher(Sitecore.Context.User))
{
    articlePageItem.Editing.BeginEdit();
    articlePageItem.Fields["Content.Reference"].Value = articleItem.ID.ToString();
    articlePageItem.Editing.EndEdit();
}

但是在我执行上面的代码之后,我无法通过 获取 ArticleItem 引用Globals.LinkDatabase.GetReferences(articlePageItem),即使我使用Globals.LinkDatabase.UpdateReference(articlePageItem).

有谁知道如何实现这个?

[更新] 下面是我们的环境:我们有一个基于 Sitecore 的网站,我们正在开发另一个系统,旨在简化文章管理。我们使用 .NET 4 和 ASP.NET MVC 3 来实现这个系统,并将 Sitecore.Kernal.dll 和 Sitecore.Client.dll 引用到我们的项目中。但是我们的 sitecore 版本是 6.2,与 .NET 4 不兼容,所以我只是复制了部分配置。我认为这可能是由于 web.config 不完整造成的。

4

1 回答 1

1

如果您正在执行上述代码,您还应该考虑发布项目更改。

这可以通过使用以下代码片段来完成:

// publish all changed content
Database webDatabase = Sitecore.Configuration.Factory.GetDatabase("web");
PublishOptions publishOptions = new PublishOptions(masterDatabase, webDatabase, PublishMode.Smart, Sitecore.Context.Language, DateTime.Now);

publishOptions.RootItem = vacatureRoot;

publishOptions.Deep = true;
Publisher publisher = new Publisher(publishOptions);
publisher.Publish();

其中 'vacatureRoot' 是根 -> 在您的情况下为 articlePageParentItem 发布后,引用应该自动设置,并且应该可以通过使用获取字段的正常方式来检索。

看起来您正在使用 ReferenceField,因此您的代码应如下所示:

ReferenceField rfRef = Sitecore.Context.Item.Fields["Content.Reference"];

if(rfRef != null && rfRef.TargetItem != null) 
{
 //Your logic here
}

回复评论:

我认为您最好使用以下代码片段->

Sitecore.Globals.LinkDatabase.UpdateReferences(articlePageItem);

我认为这会像名字所说的那样,更新这个项目的引用。希望这对你有用!

于 2012-05-29T13:06:21.000 回答