Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otchet_po_praktike_2.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
400 Кб
Скачать
☆
  1. Создание всплывающего меню выбора опций отправки автоматической электронной почты

3.1. Пояснение задачи

Одним из важных преимуществ и особенностей и системы Task Base является автоматическая рассылка оповещений об всевозможных изменениях.

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

У пользователя должен появиться новый пункт меню, при наведении мышкой на который всплывает список task email options, позволяющий выбрать вид изменений, при которых будет отсылаться автоматические письма-отчёты (изменение темы, добавление комментариев, добавление файлов, изменения даты завершения, изменения процента выполнения и прочие).

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

3.2. Детали и особенности выполнения

Начнём с изменений в базе данных. Изначально, необходимо добавить новую колонку в таблицу Task. Это колонка будет называться ChangeID, куда будут вноситься номера изменений задачи (каждый вид изменения имеет свой ID номер). Также добавим колонку EmailOptions, где будут храниться выбранные пользователям виды изменений в задаче, приводящие к отправке автоматического отчёта.

Рисунок 3.1 – Поле EmailOptions

Рисунок 3.2 – Поле ChangeID

Для изменений такого рода необходимо использовать скрипты, и помещать их в специальный файл changes.sql. Это необходимо для того, чтобы заказчик мог одним нажатием мышки внести все изменения в свою базу данных:

Рисунок 3.3 – Код добавление новых полей

Перейдём к коду. Первым делом необходим контейнер, в который мы смогли бы добавлять нужные опции. Такой контейнер уже имеется. Это класс liquidMenu.cs. Остаётся лишь создать его экземпляр:

LiquidMenu liquidEmailOptions = new LiquidMenu();

Для такого контейнера нужны специальные элементы. Воспользуемся готовым решением и создадим 8 экземпляров класса liquidMenuItem.cs с параметрами id элемента и текстом отображаемой надписи. Наиболее важным свойством liquidMenuItem является булевское IsChecked. Если данная опция выбрана, то свойство принимает значение true:

LiquidMenuItem item1 = new LiquidMenuItem(0,”new subject”);

Item1.IsChecked = false; //значение по умолчанию

LiquidMenuItem item2 = new LiquidMenuItem(1,”new documents”);

Item2.IsChecked = false;

………………………………………………………………………..

liquidEmailOptions.AddNewItem(item1);

liquidEmailOptions.AddNewItem(item2);

………………………………………………………………………..

Контейнер liquidMenu принимает объекты типа object, а значит сюда без проблем можно добавить и стандартный элемент, такой как button. Добавим во всплывающее меню кнопку Save, которая будет использоваться для сохранения и применения выбранных параметров отправки автоматической электронной почты.

liquidEmailOptions.AddNewItem(new Button(){

xName = “SaveButton”, //имя, для обращения к кнопке

Content = “Оk” }); //надпись на кнопке

Наполнив контейнер меню элементами, можно добавить его в родительский контейнер mainToolbar, который представляет собой строку с элементами быстрого доступа вверху главного control’a:

MainToolbar.AddNewToolbarItem(liquidEmailOptions);

Осталось обработать нажатие на кнопку Save. Необходимо сохранить предпочтения пользователя в базу данных. Для этого используется класс EmailOptionsController. В нём имеется метод saveChange, в котором при помощи WCF Service отправляется асинхронный запрос на сохранение результатов на сервер. Для того чтобы собрать информацию о выбранных опциях пользователем используется простой цикл foreach, перебирающий все элементы типа liquidMenuItem в liquidMenu.Items. У каждого элемента проверяется свойство IsChecked, и в зависимости от результата добавляет значение в результирующую строку.

StringBuilder sb = new StringBuilder();

foreach( var item in liquidEmailOptions.Items)

{

sb.Append(item.ID);

sb.Append(“,”);

sb.Append(“item.TranslationID);

sb.Append(“,”);

sb.Append(item.isChecked);

sb.Append(“;”);

}

string result = sb.ToString();

Результирующая строка будет примерно следующего формата: “1,515,false;2,516,false;3,517,false;4,518,true;….”. Точкой с запятой отделены друг от друга значения для разных элементов. Первая цифра в них (1,2,3,4) – ID опции всплывающего меню, вторая цифра (515,516,517,518) – translationID (используются для того, чтобы легко изменять язык для пользователя. Каждое слово на каждом языке, встречающееся в программе заноситься в специальную таблицу базы данных. Слова разных языков, имеющих одинаковое значение, имеют одинаковый translationID, но разный typeID), третье слово обозначает выбрал ли пользователь данную опцию.

С кнопкой Save и самим меню покончено. Однако нужно ещё и применить полученные результаты. Теперь, когда пользователь открывает задачу, вносит какие-либо изменения и нажимает кнопку сохранения внесённых изменений, происходит проверка, есть ли какие-либо изменения, о которых бы пользователь хотел сообщить автоматическим извещением. Если такие изменения найдены, то с помощью WCF Service отправляется асинхронный запрос на сервер и происходит добавление в базу данных таблицы Tasks в колонку ChangeID номера изменений, о которых необходимо известить других пользователей. С некоторой периодичностью специальный скрипт проходиться по таблице Tasks, считывая поле ChangeID. Если это поле не пустое, то отправляется автоматическое извещение в зависимости от id изменений. После отправки писем, данное поле очищается и вновь содержит пустую строку.

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

Рисунок 3.4 – Всплывающее меню выбора опций отправки

Рисунок 3.5 – Окно редактирования задачи

Особенностью является использование скрипта для отправки автоматических сообщений сотрудникам. Это влечёт довольно большую нагрузку на сервер, поэтому сервер должен быть достаточно мощным. Если заказчик не обладает сервером достаточной мощности, то данную функциональную возможность рекомендуется отключить. Внесение новых полей в базу данных увеличивает её размер, однако данное изменение незначительно и не может негативно повлиять на конечного пользователя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]