пятница, 15 июля 2011 г.

Статические типы данных (2): Подключение в админку

Итак, у нас есть статический тип данных Demo.IProduct. И нам нужно, чтобы он появился в админке, напр., в разделе "Данные". Мы хотим с ним работать как с любым другим (динамическим) типом данных.

Здесь нам и пригодятся наши знания по консольным приложениям. Мы просто:
  1. Создадим файл определения древовидной структуры элементов (tree defintion), напр.: \App_Data\Composite\TreeDefinitions\ProductView.xml
  2. Укажем, что дерево элементов типа Demo.IProduct должно появиться в разделе "Данные": <NamedParent Name="Data"/>
  3. ... и автоматически: <ElementStructure.AutoAttachments/>
  4. Добавим корневой элемент дерева, напр., "Продукты": <Element Id="ProductsRoot" Label="Продукты">
  5. ... и укажем, что под ним нужно будет выводить элементы нашего типа Demo.IProduct<DataElements Type="Samples.IProduct">
  6. Отсортируем элементы по полю Name<OrderBy><Field FieldName="Name"/></OrderBy>
  7. Добавим действия для добавления, изменения и удаления элементов типа 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>

В админке появится узел "Продукты" и кнопка "Добавить продукт".


Однако здесь есть одна загвоздка. Если вы нажмете "Добавить продукт" - откроется форма,  но без полей.

И более того, если у нас уже будут присутствовать элементы этого типа (например, вы добавили их программно - пример на англ.), и если вы выберете элемент и нажмете кнопку "Изменить продукт" - тоже появится пустая форма без полей. (А вот удалить элемент вы сможете.)

Пустая форма - потому что нет формы, которая должна использоваться для добавления или редактирования элемента в админке. Поэтому последним шагом в создании и интеграции статического типа данных в админку будет создание и подключение определения формы (form definition) для элемента типа Demo.IProduct.

Об этом я расскажу в одном из следующих сообщений. Для самых нетерпеливых - две подсказки:
  • Описание определения форм для элементов данных в C1: Form Markup (англ.)
  • Необязательный атрибут (который в нашем случае фактически обязательный) CustomFormMarkupPath у XML-элементов AddDataAction и EditDataAction
(продолжение следует...)

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

Отправить комментарий