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

时间:2012-02-02 17:10:50

标签: c# sitecore sitecore6

我现在正在努力通过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中存在的键一致。

3 个答案:

答案 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();//

其他一切看起来都不错。