Почему я должен использовать fieldLinks при добавлении полей к типу контента? - PullRequest
8 голосов
/ 26 января 2012

Когда я ищу документацию о создании типов контента с использованием кода (C #), я всегда нахожу примеры использования SPFieldLink для ссылки на существующее поле сайта и добавления его через

contentType.FieldLinks.Add()

Но есть также метод для непосредственного добавления полей. Есть ли веская причина, почему я не должен просто добавлять поля, используя

contentType.Fields.Add(SpField())

?!

заранее спасибо

Ответы [ 2 ]

5 голосов
/ 28 января 2012

Может помочь поиск списка в XML.

Вот XML для типа содержимого объявления:

<FieldRefs>
    <FieldRef ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Name="Body" />
    <FieldRef ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Name="Expires" />
</FieldRefs>

Вот XML для списка объявлений:

<Fields>
  <Field ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Type="Note" RichText="TRUE" RichTextMode="FullHtml" IsolateStyles="TRUE" NumLines="15" Name="Body" DisplayName="$Resources:core,camlid2;" Sortable="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Body">
  </Field>
  <Field ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Type="DateTime" Name="Expires" DisplayName="$Resources:core,camlid3;" Format="DateOnly" FromBaseType="TRUE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Expires">
  </Field>
</Fields>

В списках есть поля. Типы контента имеют FieldRefs.

Я не уверен, правильно ли это, но я всегда описываю это как разницу между классами и интерфейсами или абстрактными классами. Тип контента - это определение списка, но, как и интерфейс, он не содержит никаких данных или функций. Поскольку поля содержат данные и функциональные возможности, типы контента (не связанные со списком) не имеют полей, они имеют FieldRefs. YMMV - но это всегда помогает мне держать их прямо.

5 голосов
/ 26 января 2012

Кажется, к настоящему моменту есть простая причина: она не работает с ContentTypes.При попытке добавить поле напрямую SP2010 отправляет мне исключение:

Эта функция недоступна для коллекций полей, не связанных со списком.

Я абсолютно не ожидал этого(ни испанской инквизиции), но это просто не представляется возможным.

...