2012-05-29 52 views
1

我有2個模板:ArticleItem和ArticlePageItem的ArticlePageItem有ReferenceField「Content.Reference」鏈接到一個ArticleItem。下面是創建一個文章的代碼:如何以編程方式更新sitecore中的引用?

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,與.NET 4不兼容,所以我只複製了一部分配置。我認爲這可能會導致不完整的web.config。

+0

你叫'UpdateReferences'&'GetReferences'後您的代碼來創建和鏈接的項目? (因爲這應該工作)你想在同一個數據庫中更新/獲取引用(假設'master')還是在'master'中創建項目並嘗試'web'中的'GetReferences'?任何配置或代碼對Sitecore系統(管道等)的更改? –

+0

謝謝你的回覆。是的,我在同一個數據庫(主)中執行了Create&Get操作。 –

+0

@SeanKearney您好,是否有相關的鏈路數據庫除了'<處理器類型=「Sitecore.Pipelines.Loader.SetGlobals,Sitecore.Kernel」 />'任何其它配置? –

回答

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 發佈引用應自動設置,並應通過檢索後獲取Fields的正常方法。

它看起來像您使用的是ReferenceField,因此你的代碼應該是這個樣子:

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

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

答案評論:

我想你可能最好使用下面的代碼片段 - >

Sitecore.Globals.LinkDatabase.UpdateReferences(articlePageItem); 

我認爲這將做名稱所述,更新此項目的參考。 希望這會對你有用!

+0

感謝您的回答。我可以在沒有任何發佈操作的情況下在master數據庫中更新這兩個項目之間的鏈接數據庫中的引用和引用?期待您的進一步答覆。 –

+0

我已經更新了我的答案,請檢查這是否適合你:)。 – Younes

+0

我曾嘗試過UpdateReferences方法,但它也無法更新鏈接數據庫。我發現如果按Sitecore CMS中的ArticlePageItem中的保存按鈕,ArticleItem和ArticlePageItem之間的關係可以修復,我猜它與sitecore項目的保存事件有關。 –

相關問題