Как программно заполнить элементы Sitecore (добавить элемент и поля)? - PullRequest
5 голосов
/ 02 февраля 2012

Сейчас я борюсь с добавлением элементов через C # в базу данных Sitecore.

Код ниже выполняется правильно, однако элементы не создаются.

Также я заметил, что item ["FieldName"] = value; синтаксис фактически не заполняет коллекцию Fields.

И коллекция Fields для элемента кажется доступной только для чтения, поэтому я не могу просто вызвать .Добавить к нему (такого метода не существует).

Итак, как правильно создать дочерний элемент и заполнить его поля?

Я использую базу данных 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.

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

1) Сначала проверьте некоторые вещи, например:

присваивает шаблон переменной и проверяет, что у вас там. и лучше не делать это по ID, а по пути:

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

Теперь проверьте, хотите ли вы этот шаблон? убедитесь, что оно опубликовано (оно всегда может вызвать некоторые несоответствия)

2) По поводу того, что поля не «видны», вы пробовали: item.Fields.ReadAll()

3) Что вы подразумеваете под "не создаваемыми предметами"? как бы ты это проверил?

4) Также - вы уверены, что this.Database == "master"?

4 голосов
/ 03 февраля 2012

Я бы порекомендовал два изменения:

(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 голосов
/ 02 февраля 2012

Я бы предложил установить значение поля как

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

Все остальное выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...