Здесь нам и пригодятся наши знания по консольным приложениям. Мы просто:
- Создадим файл определения древовидной структуры элементов (tree defintion), напр.: \App_Data\Composite\TreeDefinitions\ProductView.xml
- Укажем, что дерево элементов типа Demo.IProduct должно появиться в разделе "Данные": <NamedParent Name="Data"/>
- ... и автоматически: <ElementStructure.AutoAttachments/>
- Добавим корневой элемент дерева, напр., "Продукты": <Element Id="ProductsRoot" Label="Продукты">
- ... и укажем, что под ним нужно будет выводить элементы нашего типа Demo.IProduct: <DataElements Type="Samples.IProduct">
- Отсортируем элементы по полю Name: <OrderBy><Field FieldName="Name"/></OrderBy>
- Добавим действия для добавления, изменения и удаления элементов типа Demo.IProduct: <AddDataAction Label="Добавить продукт" Type="Samples.IProduct"/>, <EditDataAction Label="Изменить продукт"/>, и <DeleteDataAction/>
<?xml version="1.0" encoding="utf-8" ?>
<ElementStructure xmlns="http://www.composite.net/ns/management/trees/treemarkup/1.0">
<ElementStructure.AutoAttachments>
<NamedParent Name="Data" Position="Top"/>
</ElementStructure.AutoAttachments>
<ElementRoot>
<Children>
<Element Id="ProductsRoot" Label="Продукты">
<Actions>
<AddDataAction Label="Добавить продукт" Type="Samples.IProduct"/>
</Actions>
<Children>
<DataElements Type="Samples.IProduct" Label="${C1:Data:Samples.IProduct:Name}">
<Actions>
<EditDataAction Label="Изменить продукт"/>
<DeleteDataAction Label="Удалить продукт"/>
</Actions>
<OrderBy>
<Field FieldName="Name" Direction="ascending"/>
</OrderBy>
</DataElements>
</Children>
</Element>
</Children>
</ElementRoot>
</ElementStructure>
<ElementStructure xmlns="http://www.composite.net/ns/management/trees/treemarkup/1.0">
<ElementStructure.AutoAttachments>
<NamedParent Name="Data" Position="Top"/>
</ElementStructure.AutoAttachments>
<ElementRoot>
<Children>
<Element Id="ProductsRoot" Label="Продукты">
<Actions>
<AddDataAction Label="Добавить продукт" Type="Samples.IProduct"/>
</Actions>
<Children>
<DataElements Type="Samples.IProduct" Label="${C1:Data:Samples.IProduct:Name}">
<Actions>
<EditDataAction Label="Изменить продукт"/>
<DeleteDataAction Label="Удалить продукт"/>
</Actions>
<OrderBy>
<Field FieldName="Name" Direction="ascending"/>
</OrderBy>
</DataElements>
</Children>
</Element>
</Children>
</ElementRoot>
</ElementStructure>
В админке появится узел "Продукты" и кнопка "Добавить продукт".
Однако здесь есть одна загвоздка. Если вы нажмете "Добавить продукт" - откроется форма, но без полей.
И более того, если у нас уже будут присутствовать элементы этого типа (например, вы добавили их программно - пример на англ.), и если вы выберете элемент и нажмете кнопку "Изменить продукт" - тоже появится пустая форма без полей. (А вот удалить элемент вы сможете.)
Пустая форма - потому что нет формы, которая должна использоваться для добавления или редактирования элемента в админке. Поэтому последним шагом в создании и интеграции статического типа данных в админку будет создание и подключение определения формы (form definition) для элемента типа Demo.IProduct.
Об этом я расскажу в одном из следующих сообщений. Для самых нетерпеливых - две подсказки:
- Описание определения форм для элементов данных в C1: Form Markup (англ.)
- Необязательный атрибут (который в нашем случае фактически обязательный) CustomFormMarkupPath у XML-элементов AddDataAction и EditDataAction
(продолжение следует...)
Комментариев нет:
Отправить комментарий