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

本文关键字:添加 字段 Sitecore 编程 方式 填充 | 更新日期: 2023-09-27 18:22:11

我现在正在努力通过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返回一个FieldCollection,其中只有9个元素。

当我通过代码newItem["field"].Value=Value;它不会增加newItem.Fields集合计数。

当然,"field"键与newItem.Template.Fields[x].Name.

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

中的键一致

1)先检查一些东西。例如:

将模板附加到一个变量中,然后检查得到了什么。最好不要通过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();//

其他一切看起来都很好。