簡體   English   中英

如何以編程方式填充Sitecore項目(添加項目和字段)?

[英]How to programmatically populate Sitecore items (Add item and fields)?

我現在正在努力通過C#向Sitecore數據庫添加項目。

下面的代碼正確執行,但是沒有創建項目。

另外,我注意到,項目[“FieldName”] =值; 語法實際上並不填充Fields集合。

項目上的字段集合似乎只讀,所以我不能只調用.Add(這種方法不存在)。

那么 - 創建子項並填充其字段的正確方法是什么?

我正在使用Master數據庫來獲取Sitecore后端和此代碼。

我在下面使用的代碼:

   using (new Sitecore.SecurityModel.SecurityDisabler())
   {

        Database db = Factory.GetDatabase(this.Database);

        foreach (var vacancy in Articles.Tables[0].Rows)
        {
            var rootItem = db.GetItem(this.RootItem);
            DataRow dr = (DataRow) vacancy;

            var newItem = rootItem.Add(string.Format("{0} {1}", dr["numericID"], dr["job_name"]),
                                       db.GetTemplate(new ID("{GUID}")));

            newItem.Editing.BeginEdit();
            newItem["Job Title"] = dr["job_name"].ToString();//
            newItem.Editing.EndEdit();
        } 
}

更多信息:newItem.Template.Fields返回一個包含100個字段的集合

newItem.Fields返回一個FieldCollection,其中只包含9個元素。

當我通過代碼newItem [“field”]。值=值; 它不會增加newItem.Fields集合計數。

當然,“field”鍵與newItem.Template.Fields [x] .Name中的鍵一致。

1)首先檢查一些事情f.ex:

將模板分配給變量並檢查您到達那里的內容。 最好不要通過ID而不是路徑來做:

var templateItem = db.GetTemplate("yourTemplatePath");

現在檢查那是否是你想要的模板? 確保它已發布(它總是會導致一些不一致)

2)對於不是“可見”的字段,您是否嘗試過: item.Fields.ReadAll()

3)“未創建的項目”是什么意思? 你會怎么檢查?

4)另外 - 你確定this.Database == "master"

我建議兩個改變:

(1)項目命名方法:

var newItem = rootItem.Add(ItemUtil.ProposeValidItemName(string.Format("{0} {1}", dr["numericID"], dr["job_name"])), db.GetTemplate(new ID("{GUID}")));

此更改將處理來自其他數據源的建議名稱中的無效字符。

(2)字段值設置方法:

newItem.Fields["Job Title"].Value = dr["job_name"].ToString();

這會將字段的原始值設置為提供的字符串。

我建議將字段值設置為

newItem.Fields["Job Title"].Value = dr["job_name"].ToString();//

其他一切看起來都不錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM