[英]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.