- Свойства эти можно использовать только для Custom Field Type'ов, прописывая их названия и типы в схеме типа поля
- Вдобавок, нужно еще изменять схему экземпляра поля (SPField.Schema), добавляя туда атрибут Customization. Автоматически это почему-то не делается :(
Обычно, для того, чтобы их задействовать, используют private методы класса SPField: SetFieldAttributeValue и GetFieldAttributeValue. Но в этом случае, естественно, используется Reflection, который запрещен в Office365. И вообще, Reflection - это хак, а любые хаки желательно обходить стороной.
Поэтому, я написал собственное решение, которое парзит XML и меняет свойство FieldSchema самостоятельно. Решение получилось довольно простым, и я всё чаще и чаще использую этот самодельный PropertyBag для хранения разных дополнительных атрибутов полей.
Код (не забудьте подключить пространство имен System.Xml.Linq):
private const string nameSpace = "my"; /// <summary> /// Прикрепляем метаданные к колонке списка. Эти метаданные будут храниться /// в схеме поля. /// </summary> /// <param name="field">Колонка (SPField), к которой следует добавить метаданные</param> /// <param name="key">Название поля метаданных</param> /// <param name="value">Значение поля метаданных</param> public void SetFieldMetaData(SPField field, string key, string value) { var fieldSchema = XDocument.Parse(field.SchemaXml); var tabAttribute = fieldSchema.Element("Field").Attribute(XNamespace.Get(nameSpace) + key); if (tabAttribute == null) fieldSchema.Element("Field").Add(new XAttribute(XNamespace.Get(nameSpace) + key, value)); else tabAttribute.Value = value; field.SchemaXml = fieldSchema.ToString(); field.Update(); } /// <summary> /// Получаем метаданные из колонки. /// </summary> /// <param name="field">Колонка, из которой считываются метаданные</param> /// <param name="key">Название поля метаданных</param> /// <returns>Возвращает значение поля метаданных для колонки, или null, если поле метаданных с указанным именем не было ранее присоединено к этой колонке.</returns> public string GetFieldMetaData(SPField field, string key) { var fieldSchema = XDocument.Parse(field.SchemaXml); var tabAttribute = fieldSchema.Element("Field").Attribute(XNamespace.Get(nameSpace) + key); if (tabAttribute == null) return null; else return tabAttribute.Value; }