DynamicContent

Представление контента документа

Свойства

Набор свойств вычисляется в runtime на основе UserDataXSD. Скачать файл UserDataXSD можно методами Box.SaveTitleDynamicContentXSD(), Box.GetBase64TitleDynamicContentXSD().

Принцип построения DynamicContent’а по UserDataXSD описан ниже.

Также набор полей и методов узнать, используя объект Reflector.

Представление контента документа имеет рекурсивную структуру:

Методы

Не имеет фиксированного набора методов. Наличие методов, их имена и интерфейс определяется наличием коллекций значений в текущем экземпляре объекта.

Общие правила формирования структуры DynamicContent’а

  • Элементы сложного типа будут представлены как DynamicContent

    • <xs:element name="ComplexElementName"> <xs:complexType>....

    • <xs:element name="ComplexElementName" type="ComlexElementType">

  • Элементы встроенного типа и унаследованные от них будут представлены как строки

    • <xs:attribute name="SimpleElementName" type="string50"> ( <xs:simpleType name="string50"> <xs:restriction base="xs:string"> )

    • <xs:attribute name="SimpleElementName"><xs:simpleType><xs:restriction base="xs:decimal">...

  • Повторяющиеся элементы (maxOccurs= "unbounded", maxOccurs > 1 или повторяющиеся по умолчанию для описанного типа элемента) будут добавлены как IValueCollection

  • Имя поля в DynamicContent, соответствующего элементу XSD будет совпадать с именем элемента в XSD

  • Если у повторяющегося элемента XSD не указано имя, то будет применено имя items

  • Если тип элемента наследуется от другого типа, то наследник будет иметь все свойства родителя

    • <xs:complexType name="ChildType"><xs:extension base="ParentType">...

  • Для заполнения/чтения значения в xs:simpleContent в DynamicContent добавляется поле с именем SimpleContentValue

Как работать с коллекциями

  1. Чтобы добавить элемент в коллекцию, необходимо вызвать метод объекта, в котором эта коллекция лежит. Назовём этот объект ВладелецКоллекции

  2. Имя метода для добавления элемента — "Add" + <Имя поля с коллекцией>

  3. Если коллекция хранит в себе повторяющиеся строки (а не DynamicContent), то метод нужно вызвать с одним параметром — добавляемой в коллекцию строкой. Возвращаемого значения у метода не будет

  4. Если коллекция хранит не строки, то метод нужно вызвать без параметров. Метод вернёт добавленный в коллекцию элемент