Кроме обычных сообщений, вы можете также выводить сообщения, подтверждающие действия.
У нее есть параметр Filter, для которого мы сделаем вызов еще одной автоматически созданной для этого типа функции - фильтра по ссылке данных Demo.Movie.DataReferenceFilter.
А уже для параметра DataReference функции Demo.Movie.DataReferenceFilter мы укажем идентификатор элемента данных, который нужно удалить. В данном случае удобно воспользоваться динамическим полем ${C1:Data:Demo.Movie:Id}.
Теперь при нажатии кнопки "Удалить фильм" будет выводится подтверждающее сообщение. И элемент будет удаляться только, если будет нажата кнопка "ОК".
На этом пока что все про консольные приложения в C1. Но я думаю, что для примеров в других темах мы будем возвращаться к ним еще не раз.
Для демонстрации мы воспользуемся нашим примером из одного из предыдущих сообщений на тему консольных приложений, там, где мы создали дерево из фильмов сгруппированных по жанрам.
У ConfirmAction три обязательных атрибута:
Мы расширим пример. Мы добавим возможность удаления конкретного фильма, причем будем спрашивать пользователя, действительно ли он хочет удалить этот фильм.
- использовать XML-элемент для подтверждающего сообщения
- использовать функцию, которая будет выполнять действие при подтверждении
XML-элемент для подтверждающего сообщения - это ConfirmAction. Он добавляется - как и любое другое действие - внутри элемента Actions.
Внутри ConfirmAction нужно поместить вызов функции при помощи XML-элемента function.
Это нюанс, на который нужно обратить внимание. Внутри ConfirmAction нельзя поместить одно из действий, например, для удаления элемента - DeleteDataAction, а только вызов C1 функции.
Это нюанс, на который нужно обратить внимание. Внутри ConfirmAction нельзя поместить одно из действий, например, для удаления элемента - DeleteDataAction, а только вызов C1 функции.
К счастью, в C1 есть функции, которые позволяют создавать, изменять и удалять элемент данных определенного типа. При создании типа, эти функции создаются автоматически для этого типа. Одной из таких функций мы и воспользуемся для удаления элемента.
Но давайте по порядку.
Добавление сообщения
Добавление сообщения
Сначала добавим наш ConfirmAction в файл определения дерева (полный пример).
<DataElements Type="Demo.Movie" Icon="pagetype-pagetype" Label="${C1:Data:Demo.Movie:Title} (${C1:Data:Demo.Movie:Year})">
<Actions>
<ConfirmAction Label="Удалить фильм" ConfirmTitle="Удалить фильм?" ConfirmMessage="Удалить выбранный фильм?">
<!-- здесь будет функция удаления элемента -->
</ConfirmAction>
</Actions>
<!-- остальной XML -->
</DataElements>
<Actions>
<ConfirmAction Label="Удалить фильм" ConfirmTitle="Удалить фильм?" ConfirmMessage="Удалить выбранный фильм?">
<!-- здесь будет функция удаления элемента -->
</ConfirmAction>
</Actions>
<!-- остальной XML -->
</DataElements>
У ConfirmAction три обязательных атрибута:
- Label: надпись на кнопке на панели инструментов и пункте контекстного меню - для вызова сообщения
- ConfirmTitle: заголовок окна подтверждающего сообщения
- ConfirmMessage: текст подтверждающего сообщения
- RefreshTree: Обновляет дерево после выполнения действия, если значение "true". По умолчанию - "false".
- Icon: иконка для кнопки на панели инструментов и пункта контекстного меню. По умолчанию, используется системная иконка для этого действия. (Названия допустимых иконок можно посмотреть здесь /Composite/images/icons/StandardIcons.xml.)
- ToolTip: подсказка, всплывающая при наведении на кнопку или пункт меню. По умолчанию, используется значение атрибута Label.
- PermissionTypes: список разрешений для этого действия.
- Location: Расположение кнопки на панели инструментов. Так как это действие может быть оболочкой для стандартного действия - добавления, изменения или удаления элемента данных, - то имеет смысл разместить его в привычном на панели месте. Значения могут быть: Add, Edit, Delete, Other. Последнее значение используется по умолчанию.
Добавление функции
А теперь добавим функцию. Наш тип данных - из пример - называется Demo.Movie, поэтому нужная нам функция удаления данных будет называться Demo.Movie.DeleteDataInstance.
А теперь добавим функцию. Наш тип данных - из пример - называется Demo.Movie, поэтому нужная нам функция удаления данных будет называться Demo.Movie.DeleteDataInstance.
У нее есть параметр Filter, для которого мы сделаем вызов еще одной автоматически созданной для этого типа функции - фильтра по ссылке данных Demo.Movie.DataReferenceFilter.
А уже для параметра DataReference функции Demo.Movie.DataReferenceFilter мы укажем идентификатор элемента данных, который нужно удалить. В данном случае удобно воспользоваться динамическим полем ${C1:Data:Demo.Movie:Id}.
<ConfirmAction Label="Удалить фильм" ConfirmTitle="Удалить фильм?" ConfirmMessage="Удалить выбранный фильм?">
<function name="Demo.Movie.DeleteDataInstance" xmlns="http://www.composite.net/ns/function/1.0">
<param name="Filter">
<function name="Demo.Movie.DataReferenceFilter">
<param name="DataReference" value="${C1:Data:Demo.Movie:Id}" />
</function>
</param>
</function>
</ConfirmAction>
<function name="Demo.Movie.DeleteDataInstance" xmlns="http://www.composite.net/ns/function/1.0">
<param name="Filter">
<function name="Demo.Movie.DataReferenceFilter">
<param name="DataReference" value="${C1:Data:Demo.Movie:Id}" />
</function>
</param>
</function>
</ConfirmAction>
Теперь при нажатии кнопки "Удалить фильм" будет выводится подтверждающее сообщение. И элемент будет удаляться только, если будет нажата кнопка "ОК".
На этом пока что все про консольные приложения в C1. Но я думаю, что для примеров в других темах мы будем возвращаться к ним еще не раз.
Комментариев нет:
Отправить комментарий