среда, 10 февраля 2010 г.

Create MOSS Site Columns Programmatically and adding Field to Content Type Programmatically

 

Проблема: добавить новую колонку в тип содержимого.

Описание: Прямой вызов 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;
}

Заключение, вот так иногда не вполне очевидно, но можно сделать практически все.

Комментариев нет: