2012-06-21 99 views
3

我想使用後面的代碼創建一個項目到sitecore。Sitecore創建包含字段[]的項目

我發現這段代碼,它工作得很好。

public void CreateItem(String itmName) 
{ 
    //Again we need to handle security 
    //In this example we just disable it 
    using (new SecurityDisabler()) 
    { 
     //First get the parent item from the master database 
     Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master"); 
     Item parentItem = masterDb.Items["/sitecore/content/SOHO/Settings/Metadata/Project"]; 


     //Now we need to get the template from which the item is created 
     TemplateItem template = masterDb.GetTemplate("SOHO/Misc/Project"); 
     //Now we can add the new item as a child to the parent 
     parentItem.Add(itmName, template); 


     //We can now manipulate the fields and publish as in the previous example 
    } 
} 

但我想填寫的領域也。如..

Item.Fields["test"].Value="testing"; 

對於我發現瞭如何編輯項目

public void AlterItem() 
{ 
    //Use a security disabler to allow changes 
    using (new Sitecore.SecurityModel.SecurityDisabler()) 
    { 
    //You want to alter the item in the master database, so get the item from there 
    Database db = Sitecore.Configuration.Factory.GetDatabase("master"); 
    Item item = db.Items["/sitecore/content/home"]; 


    //Begin editing 
    item.Editing.BeginEdit(); 
    try 
    { 
     //perform the editing 
     item.Fields["Title"].Value = "This value will be stored"; 
    } 
    finally 
    { 
     //Close the editing state 
     item.Editing.EndEdit(); 
    } 
    } 
} 

但我不知道如何將這些兩件事情結合起來。

我想到了2種方法。

方法1

搶,我創建了ItemID

我可以抓住Name,但Name可能會被複制。

方法2

在字段中填寫創建Item

之前,但隨後再次..我不知道如何做那些2種方法。

如果我能得到一些提示,我將不勝感激。

在此先感謝。

+0

可能值得一提的是,良好的做法通常是使用項目ID而不是路徑。這樣你的代碼就不依賴於內容樹中的IA。我覺得一般的性能也更好地使用本機的ID – geedubb

回答

5

方法item.Add()返回創建的項目,以便您的代碼看起來應該是這樣:

Item newItem = parent.Add(itemName, template); 
    newItem.Editing.BeginEdit(); 
    newItem.Fields["fieldName"].Value = "fieldValue"; 
    newItem.Editing.EndEdit(); 
+3

您也可以使這更錯誤的證據,像這樣: '使用(新的編輯上下文(的newitem)){ // 變化領域這裏 }' –

+0

@KamFigy我覺得這個職位仍然適用。 http://sitecore.alexiasoft.nl/2006/04/03/new-way-of-editing-items/這可能是古老的,但我從來沒有見過EditContext從此時起就被正式推薦過。 –

1

下面是完整的代碼,你可以用它來Create items programmatically based on template in sitecore

using Sitecore.Data.Items;  
// The SecurityDisabler is required which will overrides the current security model, allowing the code 
// to access the item without any security. 
using (new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    // Get the master database 
    Sitecore.Data.Database master = Sitecore.Data.Database.GetDatabase("master"); 
    // Get the template for which you need to create item 
    Items.TemplateItem template = master.GetItem("/sitecore/templates/Sample/Sample Item"); 

    // Get the place in the site tree where the new item must be inserted 
    Item parentItem = master.GetItem("/sitecore/content/home"); 

    // Add the item to the site tree 
    Item newItem = parentItem.Add("NameOfNewItem", template); 

    // Set the new item in editing mode 
    // Fields can only be updated when in editing mode 
    // (It's like the begin transaction on a database) 
    newItem.Editing.BeginEdit(); 
    try 
    { 
    // Assign values to the fields of the new item 
    newItem.Fields["Title"].Value = "NewValue1"; 
    newItem.Fields["Text"].Value = "NewValue2"; 

    // End editing will write the new values back to the Sitecore 
    // database (It's like commit transaction of a database) 
    newItem.Editing.EndEdit(); 
    } 
    catch (System.Exception ex) 
    { 
    // Log the message on any failure to sitecore log 
    Sitecore.Diagnostics.Log.Error("Could not update item " + newItem.Paths.FullPath + ": " + ex.Message, this); 

    // Cancel the edit (not really needed, as Sitecore automatically aborts 
    // the transaction on exceptions, but it wont hurt your code) 
    newItem.Editing.CancelEdit(); 
    } 
} 
相關問題