DynamicContent
Представление контента документа
Свойства
Набор свойств вычисляется в runtime на основе UserDataXSD. Скачать файл UserDataXSD можно методами Box.SaveTitleDynamicContentXSD()
, Box.GetBase64TitleDynamicContentXSD()
.
Принцип построения DynamicContent’а по UserDataXSD описан ниже.
Также набор полей и методов узнать, используя объект Reflector.
Представление контента документа имеет рекурсивную структуру:
полями DynamicContent’а могут являться:
строки
объекты интерфейса IValueCollection
объекты DynamicContent
объекты IValueCollection могут содержать:
строки
объекты DynamicContent
Методы
Не имеет фиксированного набора методов. Наличие методов, их имена и интерфейс определяется наличием коллекций значений в текущем экземпляре объекта.
Общие правила формирования структуры 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
Как работать с коллекциями
Чтобы добавить элемент в коллекцию, необходимо вызвать метод объекта, в котором эта коллекция лежит. Назовём этот объект
ВладелецКоллекции
Имя метода для добавления элемента —
"Add" + <Имя поля с коллекцией>
Если коллекция хранит в себе повторяющиеся строки (а не DynamicContent), то метод нужно вызвать с одним параметром — добавляемой в коллекцию строкой. Возвращаемого значения у метода не будет
Если коллекция хранит не строки, то метод нужно вызвать без параметров. Метод вернёт добавленный в коллекцию элемент
Пример работы с динамическим контентом
// Добавление нового элемента в коллекцию строк
SendTask = Organization.CreatePackageSendTask2();
DocumentToSend = SendTask.AddDocument("UniversalTransferDocument", "СЧФДОП", "utd820_05_01_01");
DynamicContent = DocumentToSend.Content;
Utd820_SellerContent = DynamicContent.UniversalTransferDocument;
Signers = Utd820_SellerContent.Signers;
NewSigner = Signers.AddItems();
// Signers - Владелец коллекции с именем items. Имя будет items потому, что у узла choice нет имени и он повторяющийся
// Описание в XSD:
// <xs:element name="Signers">
// <xs:complexType>
// <xs:choice maxOccurs="unbounded">
// <xs:element name="SignerReference" type="SignerReference" />
// <xs:element name="SignerDetails" type="ExtendedSignerDetails_SellerTitle" />
// </xs:choice>
// </xs:complexType>
// </xs:element>
InvoiceTable = Utd820_SellerContent.Table;
NewInvoiceTableItem = InvoiceTable.AddItem();
// InvoiceTable - Владелец коллекции с именем Item
// Описание в XSD:
// <xs:complexType name="InvoiceTable">
// <xs:sequence>
// <xs:element maxOccurs="unbounded" name="Item">
ItemIdentificationNumbers = NewInvoiceTableItem.ItemIdentificationNumbers;
NewItemIdentificationNumber = ItemIdentificationNumbers.AddItemIdentificationNumber();
NewItemIdentificationNumber.AddUnit("Unit1")
NewItemIdentificationNumber.TransPackageId = "SomeTransPackageId";
// ItemIdentificationNumbers - Владелец коллекции с именем ItemIdentificationNumber
// NewItemIdentificationNumber - владелец коллекции строк с именем Unit. В отличие от Signers, узел choice не повторяющийся
// Описание в XSD:
// <xs:element minOccurs="0" name="ItemIdentificationNumbers">
// <xs:complexType>
// <xs:sequence>
// <xs:element maxOccurs="**unbounded**" name="ItemIdentificationNumber">
// <xs:complexType>
// <xs:choice>
// <xs:element minOccurs="0" maxOccurs="unbounded" name="Unit" type="string255">
// </xs:element>
// <xs:element minOccurs="0" maxOccurs="unbounded" name="PackageId" type="string255">
// </xs:element>
// </xs:choice>
// <xs:attribute name="TransPackageId" type="string255" use="optional">
// </xs:attribute>
// </xs:complexType>
// </xs:element>
// </xs:sequence>
// </xs:complexType>
// </xs:element>
См.также