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

如何以编程方式更新sitecore中的引用?,sitecore,sitecore6,Sitecore,Sitecore6,我有两个模板:ArticleItem和ArticlePageItem,ArticlePageItem有一个链接到ArticleItem的ReferenceField“Content.Reference”。下面是创建文章的代码: Item articlePageItem = articlePageParentItem.Add(articleItem.Name, new TemplateItem(master.GetItem(ConstantString.ArticlePageTemplateID)

我有两个模板: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)
获取ArticleItem引用,即使我使用
Globals.LinkDatabase.UpdateReference(articlePageItem)

有人知道如何实现这一点吗

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

< P>如果你正在执行上面的代码,你也应该考虑发布项目更改。 这可以通过使用以下代码段来完成:

// 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();
其中“VacationRoot”是根->在您的案例中是articlePageParentItem 发布后,应自动设置引用,并应使用获取字段的正常方式检索引用

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

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

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

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

Sitecore.Globals.LinkDatabase.UpdateReferences(articlePageItem);
我想这会像名字说的那样,更新这个项目的参考资料。
希望这对你有用

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

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

// 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();
其中“VacationRoot”是根->在您的案例中是articlePageParentItem 发布后,应自动设置引用,并应使用获取字段的正常方式检索引用

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

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

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

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

Sitecore.Globals.LinkDatabase.UpdateReferences(articlePageItem);
我想这会像名字说的那样,更新这个项目的参考资料。
希望这对你有用

您是否在代码之后立即调用
UpdateReferences
GetReferences
来创建和链接项目?(因为这应该可以工作)您是在尝试更新/获取同一数据库中的引用(假设
master
),还是在
master
中创建项目,并尝试在
web
GetReferences
?Sitecore系统(管道等)有任何配置或代码更改吗?谢谢您的回复。是的,我在同一个数据库(master)中执行了创建和获取操作。Hi@SeanKearney,除了
,还有其他与链接数据库相关的配置吗?如果手动创建和链接项目(在内容编辑器中),您能验证吗
GetReferences
方法是否有效?Content.Reference是否是有效的字段名?我不认为可以在字段名中使用“.”字符?是否在代码之后立即调用
UpdateReferences
&
GetReferences
来创建和链接项目?(因为这应该可以工作)您是在尝试更新/获取同一数据库中的引用(假设
master
),还是在
master
中创建项目,并尝试在
web
GetReferences
?Sitecore系统(管道等)有任何配置或代码更改吗?谢谢您的回复。是的,我在同一个数据库(master)中执行了创建和获取操作。Hi@SeanKearney,除了
,还有其他与链接数据库相关的配置吗?如果手动创建和链接项目(在内容编辑器中),您能验证吗
GetReferences
方法是否有效?Content.Reference是否是有效的字段名?我认为您不能在字段名中使用“.”字符?谢谢您的回答。我是否可以只在主数据库中更新链接数据库中这两个项目之间的引用和引用,而不进行任何发布操作?期待您的进一步答复。我已更新了我的答案,请检查这是否适用于您:)。我尝试了UpdateReferences方法,但它也无法更新链接数据库。我发现如果我在Sitecore CMS中按ArticlePageItem中的Save按钮,ArticleItem和ArticlePageItem之间的关系可以修复,我猜这与Sitecore项目的Save事件有关。谢谢你的回答。我是否可以只在主数据库中更新链接数据库中这两个项目之间的引用和引用,而不进行任何发布操作?期待您的进一步答复。我已更新了我的答案,请检查这是否适用于您:)。我尝试了UpdateReferences方法,但它也无法更新链接数据库。我发现如果我在Sitecore CMS中按ArticlePageItem中的Save按钮,ArticleItem和ArticlePageItem之间的关系可以修复,我猜这与Sitecore项目的Save事件有关。