Система сообщений: ТЗ
Для чего нужна система сообщений:
- простой обмен сообщений между пользователя СВА, с гарантированной доставкой и возможностью как просмотра времени прочтения получателем, так и получением автоматического уведомления о прочтении получателем
- обмен сообщениями с прикрепленным заказом, что позволит открывать заказ из сообщения, посылать сообщения из заказа и, самой главное, посмотреть историю обмена сообщениями по конкретному заказу (это будут мини-революция, какая была с появлением системы ссылающихся заказов)
- возможность массовой рассылки сообщения по пользователям, как общеинформационных, так и приказов по фирме с обязательным подтверждением (не путать с автоматическим уведомлением) получателем о прочтении и понимании приказа
- возможность назначения и получения системных уведомлений (о изменении остатка личного кошелька, изменении курса, об изменении какого-либо статуса, о появлении в наличии определенной позиции прайс-листа и т.п.)
- обмен системными сообщениями (например об изменении состава групп/подгрупп прайс-листа и обновлении этого списка на уже открытых формах, дистанционное закрытие СВА администратором и т.п.)
- возможность создания сообщения типа «Задача», которую адресат должен выполнить, иначе сообщение будет висеть в списке задач и периодически напоминать о себе, а при выполнении задачи отправителю (по желанию) будет отправляться сообщение о выполнении задачи получателем
Для системы сообщений вводятся права:
- Администратор системы сообщений
- Ответственный пользователь системы сообщений
Администратор автоматически является ответственным пользователем
Для системы сообщений предусмотрен правый верхний тулбар там будут располагаться кнопки вызова окна нового сообщения, просмотр журналов сообщений, поставленных кому-то и полученных от кого-то задач, а также кнопки-индикаторы полученных непрочитанных сообщений.
Все элементы системы сообщений имеют префикс SY_MG. Я сразу дам имена некоторым объектам, чтобы удобнее было создавать ТЗ.
Пока что я не прорабатываю в ТЗ системные сообщения, их будем пришивать уже после реализации. Но сразу ясно, что необходим программный интерфейс для создания сообщения. Скорее всего, это просто функция с перечнем всех параметров нового сообщения, она же будет обслуживать и форму нового сообщения SY_MGNew.
Структура таблицы SY_MGLog
Каждое сообщение (оно же – запись в таблице сообщений) обладает массой атрибутов, которые может задавать пользователь. Для облегчения его задачи атрибуты будут сгруппированы в несколько профилей, но, при желании, почти все атрибуты пользователь может задать самостоятельно для каждого конкретного сообщения.
Список ниже фактически перечень полей таблицы сообщений, часть из них является атрибутами, задаваемыми пользователем
Сообщение может быть адресовано конкретному пользователю, независимо от того, на каком компьютере он находится, либо конкретному экземпляру программы, независимо от того, какой пользователь в данный момент на нем работает.
При массовой рассылке создается столько сообщений, сколько получателей, поэтому каждое сообщение адресовано только одному получателю
Если код=0, сообщение отображается пользователю, все остальные коды подразумевают, что сообщение системное, и каждый код обрабатывается получателем специфическим образом.
Время задержки (в минутах) перед тем, как сообщение насильно выскочит в виде окна на передний план. Отсчет начинается в момент приема сообщения компьютером получателя, сообщение индицируется в тулбаре сообщений на протяжении указанного времени, затем, если пользователь его не прочитал, появляется перед глазами.
PopUpDelay=0 – сообщение появляется сразу без задержки, PopUpDelay=-1 сообщение будет только индицироваться в тулбаре.
Установить PopUp в интервале 0-9 минут может только ответственный пользователь
Определяет приоритет, в котором расставляются сообщения на тулбаре (если есть несколько непрочитанных сообщений), а также способ отображения на кнопке тулбара:
1 – синий
2 - синий мигающий (по умолчанию)
3 – красный
4 – красный мигающий
(предварительная трактовка, может список как-то изменится по ходу реализации)
Установить приоритет выше 2 может только ответственный пользователь
Пользователь может только ПРОЧИТАТЬ задачу (производится нотификация о чтении, запись даты прочтения в журнале), и задача будет помещена в список задач, а может ее ВЫПОЛНИТЬ (сразу или потом) (производится нотификация о выполнении, запись даты выполнения в журнале)
Установить этот флаг может только ответственный пользователь
Этот флаг не может быть установлен, если IsJob =1
ОТПРАВИТЕЛЬ «Задачи» имеет право снять выполнение «Задачи» (очистить два вышеуказанных поля), если считает, что задача не выполнена.
LiveTimeType=0 - время жизни сообщения не ограничено
LiveTimeType=1 – время жизни сообщения в минутах указано в поле LiveTime
LiveTimeType=2 – время жизни сообщения в сутках указано в поле LiveTime
LiveTimeType=3 – время жизни – активный сеанс (если пользователь не прочитал сообщение в данном сеансе или вообще не был в онлайне, он его не получит)
Инициализация. Прием сообщений. Тулбар.
Инициализация после логина пользователя:
- Удаляются сообщения с неактуальным временем жизни LiveTimeType=1 и 2 – для всех получателей и LiveTimeType=3 для конкретного получателя, который логинится в программу
- Запускается обновление тулбара
Кнопки тулбара:
1) Новое сообщение (открывается форма SY_MGNew)
2) Журнал сообщений (вызывается журнал сообщений SY_MGRegister)
3) Полученные задачи (вызывается журнал сообщений на закладке "Полученные задачи"), если нет невыполненных задач – иконка на кнопке серая неприметная.
4) Поставленные задачи (вызывается журнал сообщений на закладке "Поставленные задачи"), если нет невыполненных задач – иконка на кнопке серая неприметная.
5) Отложенные сообщения. Если нет отложенных сообщений, эта кнопка Disabled. Если есть одно или несколько сообщений – эта кнопка вызывает их в порядке откладывания. Подробнее об отложенных сообщениях см. описание SY_MGRead
6) Кнопки входящих сообщений (0-15шт). При появлении входящих сообщений появляются кнопки с соответствующими приоритету иконками. Причем сообщения расставляются слева направо в порядке убывания приоритета, т.е. если приходит сообщение с более высоким приоритетом, оно появляется левее сообщений с более низким приоритетом. Сообщения с одинаковым приоритетом расставляются слева направо в порядке увеличения времени создания.
Отложенные сообщения на этих кнопках не отображаются.
Необходимо обратить внимание, что признак прочитанности сообщения появляется не при показе его юзеру (как в аське), а после нажатия кнопки "ОК" в окне просмотра сообщения.
Скорее всего, логично сделать некую единую процедуру обновления всех кнопок на тулбаре и вызывать ее при запуске и изменениях в таблице сообщений, касающихся конкретного пользователя. Об изменениях оповещает, видимо, триггер, оповещает он всех подсоединенных клиентов, передавая данные для нового или измененного сообщения в таблице об отправителе и получателе сообщения, а уж клиент смотрит, если это относится к нему (к залогиненному на клиенте пользователю), то запускает процедуру обновления тулбара. Эта процедура должна начинать свою работу с просмотра массива отложенных сообщений (см. форма просмотра сообщения SY_MGRead)
Форма нового сообщения SY_MGNew
Форма фиксированного размера.
Контролы:
(конец фрейма)
Смысл контролов этого фрейма описан в разделе "Структура таблицы SY_MGLog"
На форме необходимо предусмотреть необязательные входные параметры: номер присоединенного заказа и получатель (для запуска из карточки заказа).
Форма просмотра сообщения SY_MGRead
Форма фиксированного размера.
Контролы:
- прописывается ReadDate и ReadComp
- если требуется – автоматически создается уведомление отправителю
- форма закрывается
Если ConfirmNeeded, то надпись на кнопке другая (см. описание структуры таблицы) и кнопка становится светло-красной
Если при запуске формы у этого сообщения уже стоит ReadDate, то на кнопке надпись "Закрыть" и, естественно, она не прописывает второй раз ReadDate и ReadComp и не создает уведомления.
Если ConfirmNeeded или IsJob – кнопка "Ответить" недоступна
- прописывается ReadDate и ReadComp (только если не прописано ранее)
- прописывается JobCompleteDate и JobCompleteComp
- если требуется (JobCompleteNotif=1 или (ReadDate=Null и ReadNotif=1)) – автоматически создается уведомление отправителю (т.е. если отправитель запросил уведомление и на прочтение и на выполнение, а получатель одновременно и прочитал и выполнил задачу, то отправляется только одно уведомление)
- форма закрывается
Если IsJob=0 или JobCompleteDate<>Null – кнопка "Задача выполнена" недоступна
- в БД не происходит никаких изменений, а ID сообщения и контрольное время (текущее дата/время +N минут) заносятся в динамический массив отложенных сообщений в памяти. Если массив не пустой, включается некий таймер, который запускает процедуру просмотра массива каждые 15 секунд. Если контрольное время прошло – элемент из массива удаляется и если массив опустевает – таймер останавливается (нехрен ресурсы жечь : )). Процедура просмотра массива также запускается перед обновлением тулбара, в то же время процедура обновления тулбара должна запускаться, если есть какие-то изменения в массиве. Соответственно, процедура обновления тулбара не отображает отложенные сообщения на отдельных кнопках, а только разрешает кнопку "Отложенные сообщения", если массив отложенных сообщений не пустой.
- форма закрывается
Если пользователь закроет эту форму крестиком или форма закрывается в результате закрытия СВА - считать, что выполняется действие "Отложить" на 1 минуту.
Журнал системы сообщений SY_MGRegister
Форма журнального типа с закладками:
- История
- Полученные задачи
- Поставленные задачи
- Неполученные
- Неподтвержденные
- По заказу
Выводится список всех сообщений в соответствии с фильтрами
Контролы:
- Два комбобокса с сортировкой (с обратным порядком). По умолчанию первая сортировка по времени в обратном порядке, вторая по получателю.
- Интервал дат
- Комбобокс - фильтр по конкретному пользователю (отбор одновременно в отправителе и получателе), по умолчанию "(все)"
- Второй аналогичный фильтр, по умолчанию установлен на текущего пользователя и виден только администратору сообщений. Таким образом, обычный пользователь может отобрать только свою переписку со всеми или с конкретным пользователем, а администратор может отобрать вообще все сообщения, либо переписку конкретного пользователя со всеми, либо переписку между двумя выбранными пользователями
- Чекбокс "Только задачи"
Поля списка:
- Дата/время
- Отправитель (по двойному щелчку включается фильтр (первый) по нему)
- Компьютер отправителя (столбец по умолчанию минимальной ширины)
- Получатель(по двойному щелчку включается фильтр (первый) по нему)
- Текст сообщения
- Заказ (номер или '---') (по двойному щелчку открывается карточка заказа)
- Уведомление (пустая клетка или "+")
- Дата/время прочтения
- Компьютер получателя (столбец по умолчанию минимальной ширины)
- Подтверждение (пустая клетка или "+")
- Задача (пустая клетка или "+")
- Уведомление выполнения задачи (пустая клетка или "+")
- Дата/время выполнения задачи (если нет – надпись '(не выполнено)')
- Компьютер выполнения задачи (столбец по умолчанию минимальной ширины)
- Приоритет
- Всплывет через
- Время жизни ('---','сеанс','20 мин','30 сут.')
- К сообщению (номер) (по двойному щелчку открывается SY_MGRead с этим сообщением)
По двойному щелчку на остальных полях открывается SY_MGRead с этим сообщением.
Выводит все сообщения, где текущий пользователь является получателем и IsJob=1
Контролы:
Сортировка (по умолчанию по дате создания в обратном порядке)
Две радиокнопки:
- Неотработанные – выводятся все полученные задачи, у которых JobCompleteDate=Null, независимо от даты создания (активна по умолчанию)
- Все – становится доступен интервал дат, по которому отбираются все полученные задачи
Поля списка:
- Дата/время создания
- Отправитель
- Дата/время выполнения задачи (если нет – надпись '(не выполнено)')
- Текст задачи
По двойному щелчку открывается SY_MGRead с этим сообщением.
Выводит все сообщения, где текущий пользователь является отправителем и IsJob=1
Контролы:
Сортировка (по умолчанию по дате создания в обратном порядке)
Две радиокнопки:
- Неотработанные – выводятся все поставленные задачи, у которых JobCompleteDate=Null, независимо от даты создания (активна по умолчанию)
- Все – становится доступен интервал дат, по которому отбираются все поставленные задачи
Кнопка "Снять признак "Выполнено""
Кнопка "Удалить задачу"
Поля списка:
- Дата/время создания
- Получатель
- Дата/время выполнения задачи (если нет – надпись '(не выполнено)')
- Текст задачи
По двойному щелчку открывается SY_MGRead с этим сообщением.
Выводятся все сообщения, где текущий пользователь является отправителем, у которых ReadDate=Null, независимо от даты
Контролы:
Сортировка (по умолчанию по дате создания в обратном порядке)
Кнопка "Удалить выбранные"
Поля списка:
- Чекбокс
- Дата/время
- Получатель
- Задача (пустая клетка или "+")
- С подтверждением (пустая клетка или "+")
- Текст сообщения
- Время жизни
По двойному щелчку открывается SY_MGRead с этим сообщением.
Выводятся все сообщения, где текущий пользователь является отправителем, у которых ReadDate=Null и ConfirmNeeded=1, независимо от даты
Контролы:
Сортировка (по умолчанию по дате создания в обратном порядке)
Кнопка "Удалить выбранные"
Поля списка:
- Чекбокс
- Дата/время создания
- Получатель
- Текст сообщения
По двойному щелчку открывается SY_MGRead с этим сообщением.
Выводит все сообщения по выбранному заказу, независимо от даты, отправителя и получателя
Контролы:
- Сортировка (по умолчанию по дате создания в обратном порядке)
- Поле с номером заказа. По умолчанию прописывается последний открывавшийся заказ (верхний элемент Recent -списка заказов). Соответственно, выводятся все сообщения, относящиеся к этому заказу, независимо от даты, отправителя и получателя
- Кнопка btRecent со списком номеров последних заказов
Поля списка:
- Дата/время создания
- Отправитель
- Получатель
- Текст сообщения
По двойному щелчку открывается SY_MGRead с этим сообщением.
(конец закладок)
Необходимо предусмотреть получение формой сообщений через FCE о смене закладки и задании номера заказа для последней закладки. Это нужно для вызова из заказа и соответствующими кнопками тулбара. Это нельзя делать входными параметрами запуска журнала, так как журнал уже может быть запущен, несколько экземпляров запускать бессмысленно.
Пример реализации можно посмотреть в ST_Register – при двойном щелчке на позиции склада – эта позиция активируется в прайс-листе.
Comments (
)
Link to this page:
//www.vb-net.com/wanted/message/T3.htm
|