Программно созданный элемент набора документов всегда является папкой

У меня проблема с программным созданием элемента списка. Сценарий:

  • 2 списка (Changes-CustomDocSet Lib, Risks-Custom Task List) с пользовательскими типами контента и полями

  • Новая/редактируемая форма списка изменений включает в себя DataGrid, в котором отображаются элементы списка рисков.

Показаны все элементы, которые я создал вручную в списке рисков. Теперь я могу добавлять дополнительные элементы из формы создания/редактирования списка изменений с помощью кнопки «Добавить». Я могу вставить, но элемент не отображается в сетке.

Элементы риска в новой форме списка изменений:

введите здесь описание изображения

Почему? Если я загляну в свой список рисков, я увижу вставленный элемент, но это не элемент, он отображается как тип папки.

Добавить новый элемент риска:

введите здесь описание изображения

Это моя реализация для добавления элемента:

SPListItem item = list.Items.Add();
item["ChangeReference"] = "1";
item[SPBuiltInFieldId.Title] = title.Text;
item["Title"] = title.Text;
item["Risk"] = risk.Text;
item["Probability"] = probability.Text;
item.Update();

Определение списка имеет только мой пользовательский тип контента:

<List xmlns:ows="Microsoft SharePoint" Title="Risks" FolderCreation="FALSE" Direction="$Resources:Direction;" EnableContentTypes="TRUE" Url="Lists\Risks" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
  <MetaData>
    <ContentTypes>
      <ContentTypeRef ID="0x0108009007F1B9465C48F2AE80B77CC58A4AA7" />
    </ContentTypes>
...

Созданный вручную элемент можно найти в list.Items, программно созданный элемент всегда создается в list.folders, но я не знаю, почему и как это изменить? Мне нужны обычные предметы, а не папки.

Вручную против прог предметов:

введите здесь описание изображения

Есть идеи?

ОБНОВИТЬ:

Я уже пытаюсь поставить КТ, безуспешно. Теперь я использую стандартный список задач без пользовательского типа контента, но он всегда создавал папку вместо элемента.

При отладке все выглядит нормально:

Отладка создания элемента


person A. Bernhagen    schedule 14.11.2017    source источник


Ответы (3)


Я не могу найти решение этой проблемы, поэтому использую обходной путь с помощью CSOM.

var clientContext = new ClientContext(SPContext.Current.Web.Url);
var oList = clientContext.Web.Lists.GetByTitle("Risks");
var itemCreateInfo = new ListItemCreationInformation();
var oListItem = oList.AddItem(itemCreateInfo);
oListItem["Title"] = title.Text;
oListItem["Risk"] = risk.Text;
oListItem["Probability"] = probability.Text;
oListItem["Severity"] = severity.Text;
oListItem["ChangeReference"] = int.Parse(this.Page.Request.QueryString["ItemId"]);
oListItem.Update();
clientContext.Load(oListItem);
clientContext.ExecuteQuery();
person A. Bernhagen    schedule 01.12.2017

Похоже, ваш тип контента не устанавливается всякий раз, когда вы добавляете элемент списка.

Предполагая, что имя вашего типа контента — Example Content Type, вы можете попробовать приведенный ниже код. Измените его в соответствии с именем вашего типа контента:

SPContentType spctExampleContentType = list.ContentTypes["Example Content Type"];

SPListItem item = list.Items.Add();
item["ChangeReference"] = "1";
item[SPBuiltInFieldId.Title] = title.Text;
item["Title"] = title.Text;
item["Risk"] = risk.Text;
item["Probability"] = probability.Text;
spliNewItem["ContentTypeId"] = spctExampleContentType.Id;
item.Update();
person Gautam Sheth    schedule 15.11.2017
comment
Я уже пытаюсь это сделать, но безуспешно. Теперь я использую стандартный список задач без пользовательского типа контента, но он всегда создавал папку вместо элемента. - person A. Bernhagen; 15.11.2017

Вместо этого попробуйте добавить элемент в RootFolder.Items:

SPListItem item = list.RootFolder.Items.Add();
person Sergey Borisenko    schedule 02.12.2017