我有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();
}
但是在执行上面的代码之后,即使我使用Globals.LinkDatabase.GetReferences(articlePageItem)
,也无法通过Globals.LinkDatabase.UpdateReference(articlePageItem)
获取ArticleItem引用。
有谁知道如何实现这个?
[更新] 以下是我们的环境: 我们有一个基于Sitecore的网站,我们正在开发另一个旨在简化文章管理的系统。我们使用.NET 4& ASP.NET MVC 3实现了这个系统,并引用了Sitecore.Kernal.dll& Sitecore.Client.dll到我们的项目。但我们的sitecore版本是6.2,它与.NET 4无法比拟,所以我只是复制了部分配置。我认为这可能是由于不完整的web.config。
答案 0 :(得分: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);
我认为这会做名称所说的内容,更新此项目的引用。 希望这对你有用!