如何以编程方式更新sitecore中的引用?

时间:2012-05-29 08:59:58

标签: sitecore sitecore6

我有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。

1 个答案:

答案 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);

我认为这会做名称所说的内容,更新此项目的引用。 希望这对你有用!