четверг, 19 мая 2011 г.

Консольные приложения (6): Стандартные действия

В предыдущем сообщении мы научились выводить элементы типа данных, так сказать, в режиме “только для чтения”.

Давайте теперь рассмотрим, как с помощью консольного приложения можно выполнять стандартные операции добавления, редактирования и удаления таких элементов.

За основу возьмем наш последний пример приложения, который выводил элементы типа данных Demo.Country с полями EnglishName и NativeName:

<?xml version="1.0" encoding="utf-8" ?>
<ElementStructure xmlns="http://www.composite.net/ns/management/trees/treemarkup/1.0" xmlns:f="http://www.composite.net/ns/function/1.0">
<ElementStructure.AutoAttachments>
<NamedParent Name="Content" Position="Top"/>
</ElementStructure.AutoAttachments>
<ElementRoot>
<Children>
<Element Id="CountriesRoot" Label="Страны">
<Children>
<DataElements Type="Demo.Country" Label="${C1:Data:Demo.Country:EnglishName} (${C1:Data:Demo.Country:NativeName})">
</DataElements>
</Children>
</Element>
</Children>
</ElementRoot>
</ElementStructure>

Для действий “добавить”, “удалить” и “редактировать” существуют соответствующие XML-элементы:
  • <AddDataAction/>
  • <EditDataAction/>
  • <DeleteDataAction/>
Если вы помните, элементы действий следует всегда помещать в <Actions></Actions> и под тем элементом данных, к которому действие относится.

Действие “добавить” (Add)

Действие “добавить” относится к родительскому элементу для элемента данных <DataElements/>. В нашем примере - это <Element Id="CountriesRoot" Label="Страны">:

<Element Id="CountriesRoot" Label="Страны">
<Actions>
<AddDataAction Type="Demo.Country"/>
</Actions>
<!-- остальная разметка -->
</Element>

У этого действия всегда должен быть указан тип данных, элемент которого нужно добавить.

Если мы не укажем надпись (Label), всплывающую подсказку (ToolTip) и иконку (Icon) для действия, то будут использоваться надписи (“Add”) и иконки по умолчанию. Давайте все-таки укажем надпись: по-русски и более конкретно :)

<AddDataAction Type="Demo.Country" Label="Добавить страну"/>

Теперь при выборе узла “Страны” в админке на панели кнопок появится кнопка “Добавить страну”, а в контекстном меню - соответствующий пункт.


У элемента <AddDataAction/> есть еще один необязательный атрибут CustomFormMarkupPath, в котором указывается относительный путь к динамической форме (собственного изготовления, в виде XML файла), которая представляет поля элемента данных так как вам нужно (напр., с группировкой и вкладками), вместо формы используемой по умолчанию (все поля друг под другом).

(Динамические формы для добавления и редактирования элементов данных - это своя обширная тема. О них я рассажу в других сообщениях. Интересующиеся могут почитать на англ.: Editing Form Markup.)

Действия “редактировать” (Edit) и “удалить” (Delete)

Действия “редактировать” и “удалить” обычно добавляют к <DataElements/>. Тип для них указывать не нужно, так как они привязаны к типу, указанному в <DataElements/>.

Их добавление проще, так как у всех их атрибутов есть значения по умолчанию. Мы же для нашего примера укажем надпись (Label) для кнопок и пунктов меню:

<DataElements Type="Demo.Country" Label="${C1:Data:Demo.Country:EnglishName} (${C1:Data:Demo.Country:NativeName})">
<Actions>
<EditDataAction Label="Изменить страну"/>
<DeleteDataAction Label="Удалить страну"/>
</Actions>
</DataElements>

Действие “редактировать” имеет те же атрибуты, что и “добавить”, кроме типа (Type). А действие “удалить” - такие же как и у “редактировать”, кроме пути к динамической форме (CustomFormPath).

Теперь при выборе любой страны (элемента данных в “дереве”) на панели кнопок появятся соответствующие кнопки и в контекстном меню - соответствующие пункты.


А полностью наше приложение выглядит теперь так:

<?xml version="1.0" encoding="utf-8" ?>
<ElementStructure xmlns="http://www.composite.net/ns/management/trees/treemarkup/1.0" xmlns:f="http://www.composite.net/ns/function/1.0">
<ElementStructure.AutoAttachments>
<NamedParent Name="Content" Position="Top"/>
</ElementStructure.AutoAttachments>
<ElementRoot>
<Children>
<Element Id="CountriesRoot" Label="Страны">
<Actions>
<AddDataAction Type="Demo.Country" Label="Добавить страну"/>
</Actions>
<Children>
<DataElements Type="Demo.Country" Label="${C1:Data:Demo.Country:EnglishName} (${C1:Data:Demo.Country:NativeName})">
<Actions>
<EditDataAction Label="Изменить страну"/>
<DeleteDataAction Label="Удалить страну"/>
</Actions>
</DataElements>
</Children>
</Element>
</Children>
</ElementRoot>
</ElementStructure>

Предыдущее и это сообщения - были минимумом, который вам необходим знать, чтобы разобраться с примером из следующего сообщения.

(продолжение следует...)

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

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