Расширение серверных вызовов

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

Ссылка на пример на GitHub: ExtendServerQueryData.

extensionManager.registerExtension({ (1)
    name: "ExtendServerQueryData",
    version: "6.1",
    globalEventHandlers: [ExtendServerQueryData]
});
1 Регистрация расширения позволяет корректно установить все обработчики событий, сервисы и прочие сущности web-приложения.

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

export function extendServerQueryData(sender: Layout) {
    const services = cloneServices(sender.params.services);
    replaceService(services, { tasksTreeController: new TasksTreeControllerCustom(sender.params.services)});
    sender.params.services = services;
}

Затем на основе метода базовой реализации стандартного класса сформировать новые данные:

export class TasksTreeControllerCustom extends GenControllers.TasksTreeController {
    constructor(services) {
        super(services);
    }
    async getTasksTable(request: GenModels.TasksTableLoadOptions, options?: RequestOptions) {
        var data = await super.getTasksTable(request, options);
        if (data && data.rows) {
            data.rows.forEach(row => {
                if (row.indicators.includes(GenModels.TasksIndicators.Overdue)) {
                    row.indicators.push(GenModels.TasksIndicators.HighPriority)
                }
            })
        };
        return data;
    }
}

Проверка примера

  1. Запустите конструктор разметок.

  2. Импортируйте решение из файла ExtendServerQueryData.xml.

  3. Сделайте решение ExtendServerQueryData активным для карточки типа Документ вида ДокументУД/Исходящий.

  4. В примере используется стандартная разметка просмотра исходящего документа. На событие Перед открытием карточки ЭУ Layout разметки назначается обработчик extendServerQueryData.

  5. Перезапустите dvwebclient.

  6. Откройте исходящий документ, создайте подчиненное задание с просроченной датой исполнения.

  7. Убедитесь, что в таблице исполнения просроченные задания автоматически помечаются индикатором высокого приоритета.