我现在正在努力通过C#向Sitecore数据库添加项目。
以下代码正确执行,但未创建项目。
另外,我注意到,项目[“FieldName”] =值;语法实际上并不填充Fields集合。
项目上的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返回一个只包含9个元素的FieldCollection。
当我通过代码newItem [“field”]时。值=值;它不会增加newItem.Fields集合计数。
当然,“field”键与newItem.Template.Fields [x] .Name中存在的键一致。
答案 0 :(得分:5)
1)首先检查一些事情f.ex:
将模板分配给变量并检查您到达那里的内容。 最好不要用ID而不是路径来做:
var templateItem = db.GetTemplate("yourTemplatePath");
现在检查这是否是您想要的模板? 确保它已发布(它总是会导致一些不一致)
2)对于不“可见”的字段,您是否尝试过:item.Fields.ReadAll()
3)“未创建的项目”是什么意思?你会怎么检查?
4)另外 - 你确定this.Database == "master"
?
答案 1 :(得分:4)
我建议两个更改:
(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();
这会将字段的原始值设置为提供的字符串。
答案 2 :(得分:2)
我建议将字段值设置为
newItem.Fields["Job Title"].Value = dr["job_name"].ToString();//
其他一切看起来都不错。