[ELMA3] Добавление собственного события в календарь
В статье приведен пример добавления собственных событий в календаре для объекта типа Справочник IDelivery. Данный справочник служит для фиксирования заказов на доставку. Справочник IDelivery содержит следующие поля:
- Базовые поля (Наименование, Дата создания, Дата изменения, Автор создания, Автор изменения);
- Дата отправки (Дата/время);
- Планируемая дата доставки (Дата/время);
- Адрес доставки (Текст);
- Посылка доставлена (Да/нет);
- Исполнитель (Пользователь, тип связи – Одиночная);
- Информировать (Пользователь, тип связи – Многие-ко-многим).
В календаре существует возможность создания событий всех типов двумя способами:
- В разделе Календарь нажать кнопкой мыши по строке с тем временем/датой, на которое нужно назначить событие – появится popup-окно со списком всех возможных событий;
- В разделе Календарь нажать на кнопку Добавить – появится список всех возможных событий.
Пример отображения данных
Рис. 1. Добавление события в календарь с помощью popup-окна
Рис. 2. Добавление события в календарь с помощью кнопки "Добавить"
Методы расширения (интерфейса)
Точка расширения (интерфейс) IEventAddAction имеет следующие методы:
/// <summary> /// Уникальный идентификатор для кнопки /// </summary> string Uid { get; } /// <summary> /// Имя /// </summary> string Name { get; } /// <summary> /// Ссылка на форму добавления /// Для подставления даты начала и окончания события в Url могут добавляться {0} - дата начала, {1} - дата окончания /// пример - /Event/Add?start={0}&end={1} /// return urlHelper.Action("Add", "NameController", new { area = RouteProvider.AreaName, start = "{0}", end = "{1}" }); /// </summary> string Url(RequestContext context); /// <summary> /// Параметры открытия в ссылки в модальном окне, если null ссылка открывается в родительском /// пример - new { id = "meetingWindow",title = "Создать встречу", width = 800, onOpenScript = "alert(’open’)"} /// </summary> dynamic WindowSettings { get; } /// <summary> /// Ссылка на иконку действия /// </summary> string Icon { get; } /// <summary> /// Порядок отображения /// </summary> int Order { get; } /// <summary> /// Можно ли использовать это действие для общих календарей /// </summary> bool AllowInShared { get; }
Пример класса точки расширения
[Component] public class EventAddAction : IEventAddAction { public string Uid { get { return "add-calendar-delivery-event"; } } public string Name { get { return SR.T("Создать событие доставки"); } } public string Url(RequestContext context) { var urlHelper = new UrlHelper(context); return urlHelper.Action("Add", "Catalogs", new { area = EleWise.ELMA.BPM.Web.Common.RouteProvider.AreaName, uid = InterfaceActivator.UID<IDelivery>() }); } public dynamic WindowSettings { get { return null; } } public string Icon { get { return "#x16/entity.png"; } } public int Order { get { return 30; } } public bool AllowInShared { get { return false; } } }
Примечание
Как можно заметить, в примере используемого кода генерируется ссылка на создание записи справочника IDelivery при помощи метода Add в контроллере Catalogs, также необходимо передать в данный метод uid справочника.