Проблема: добавить новую колонку в тип содержимого.
Описание: Прямой вызов Fields.Add(“имя”,SPFieldType.Text,false) на типе содержимого выдает исключение, поэтому мы немного изменим код и таки добьемся своего результата.
Первоначально создадим столбец узла:
Будем использовать метод создания поля из XML определения, что необходимо заметить мы используем предопределенный идентификатор для задания поля. Второй момент, при создании поля в качестве параметра name указывайте InternalName в дальнейшем, DisplayName можно переопределить.
string siteUrl=http://testingportal.com;
string fieldXml = "";
string fieldGuid="{21C910B8-BA41-413a-A87E-D0D05AC4A5A8}";
string fieldInternName="customField";
fieldXml = String.Format("<field id="\" group="\" name="\" format="\" type="\">", fieldGuid, fieldInternalName);
using (SPSite site = new SPSite (siteUrl))
{
using (SPWeb web = site.rootWeb)
{
rootWeb.Fields.AddFieldAsXml(fieldXml);
}
}
Просто создать новый тип содержимого невозможно, поэтому мы выбираем из уже существующих типов содержимого. Для создания типа содержимого воспользуйтесь «Фичей»
SPSite site = new SPSite (_siteUrl)
PublishingSite pubSite = new PublishingSite(site);
SPContentType contentType = pubSite.ContentTypes[contentTypeName];
SPField field = pubSite.RootWeb.Fields[fieldGuid];
SPFieldLink fieldLink = new SPFieldLink(field);
contentType.FieldLinks.Add(fieldLink);
contentType.Update(true);
Позже можно натйти нужное вам поле с помощью следующего кода.
foreach (SPFieldLink fieldRef in contentType.FieldLinks)
{
if (fieldRef.Id == fieldGuid)
return fieldRef;
}
Заключение, вот так иногда не вполне очевидно, но можно сделать практически все.
Комментариев нет:
Отправить комментарий