пятница, 21 мая 2010 г.

SharePoint 2010 CSOM: Create field with well known Internal Name

Известно что SharePoint при работе через объектную модель (будь то серверная или клиентская) не позволяет указывать InternalName для создаваемых полей и не дает его менять для уже созданных.

Но можно "подсказать" ему, какое имя должно быть выбрано. Для этого при создании поля в качестве Title\DisplayName устанавливается то имя, которое мы хотим увидеть в InternalName ,а после создания Title изменяется.

Например вот так:
public static Field CreateFieldBySPField(FieldCollection fldColl, SPField fld, bool addToDefaultView)
{
 var xml = fld.SchemaXml;

 var doc = new XmlDocument();
 doc.LoadXml(xml);
 var attr = doc.DocumentElement.Attributes["DisplayName"];
 if (attr != null) attr.Value = fld.InternalName;
 var outxml = doc.OuterXml;

 Field newFld = fldColl.AddFieldAsXml(outxml, addToDefaultView, AddFieldOptions.AddToNoContentType);
 newFld.Title = fld.Title;
 newFld.Update();
 fldColl.Context.Load(newFld, f => f.InternalName, f => f.TypeAsString, f => f.Title);
 fldColl.Context.ExecuteQuery();
 return newFld;
}

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