logo

[ELMA3] Добавление собственного события в календарь

В статье приведен пример добавления собственных событий в календаре для объекта типа Справочник IDelivery. Данный справочник служит для фиксирования заказов на доставку. Справочник IDelivery содержит следующие поля:

  1. Базовые поля (Наименование, Дата создания, Дата изменения, Автор создания, Автор изменения);
  2. Дата отправки (Дата/время);
  3. Планируемая дата доставки (Дата/время);
  4. Адрес доставки (Текст);
  5. Посылка доставлена (Да/нет);
  6. Исполнитель (Пользователь, тип связи – Одиночная);
  7. Информировать (Пользователь, тип связи – Многие-ко-многим).

В календаре существует возможность создания событий всех типов двумя способами:

  1. В разделе Календарь нажать кнопкой мыши по строке с тем временем/датой, на которое нужно назначить событие – появится popup-окно со списком всех возможных событий;
  2. В разделе Календарь нажать на кнопку Добавить – появится список всех возможных событий.

Пример отображения данных

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

Ссылки на элементы API

  • IEventAddAction (для версий 3.13, 3.15, 4.0);
  • ICalendarItem (для версий 3.13, 3.15, 4.0);
  • ICalendarItemProvider (для версий 3.13, 3.15, 4.0).