[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 справочника.