Переопределение сервиса отрисовки элемента "Ход согласования"
Элемент управления Ход согласования
представляет собой таблицу, в которой отображаются события заданий согласования (выполнение, делегирование и др.).
Программист может переопределить функцию отрисовки всей таблицы и отдельных элементов: заголовков и ячеек определённых столбцов. Для этого нужно передать в поле stageRenderer
класса элемента управления Ход согласования
(тип AgreementHistory
) сервис с интерфейсом IAgreementHistoryStageRenderer
:
interface IAgreementHistoryStageRenderer {
renderStageTable?(props: IApprovalCycleInfoProps): React.ReactNode;
renderStageHeaderCells?(): React.ReactNode;
renderApproverCell?(stageItemProps: IApprovalStageItemRowProps): React.ReactNode;
renderDecisionCell?(stageItemProps: IApprovalStageItemRowProps): React.ReactNode;
renderDateCell?(stageItemProps: IApprovalStageItemRowProps): React.ReactNode;
renderCommentCell?(stageItemProps: IApprovalStageItemRowProps): React.ReactNode;
renderCorrectionsCell?(stageItemProps: IApprovalStageItemRowProps): React.ReactNode;
}
Интерфейс IAgreementHistoryStageRenderer
определяет функции, обеспечивающие отрисовку определённых элементов таблицы Ход согласования
:
-
renderStageTable
— отрисовка всей таблицы. -
renderStageHeaderCells
— отрисовка заголовков таблицы. -
renderApproverCell
— отрисовка ячеек столбца Согласующий. -
renderDecisionCell
— отрисовка ячеек столбца Решение. -
renderDateCell
— отрисовка ячеек столбца Дата. -
renderCommentCell
— отрисовка ячеек столбца Комментарий. -
renderCorrectionsCell
— отрисовка ячеек столбца Правки.
При реализации объекта IAgreementHistoryStageRenderer
могут быть переопределены все или только требуемые функции интерфейса.
Ниже приведён пример реализации компонента, который переопределяет функцию отрисовки ячеек столбца Комментарий
: ставит -
, если комментария не было, и текст комментария — если был. Компонент реализуется в виде стандартного клиентского расширения.
-
Сервис, который будет передан в
stageRenderer
. -
Метод, который будет вызываться при открытии вкладки
Ход согласования
карточки ДокументУД/Исходящий, и передавать сервис вstageRenderer
.
Ниже приведено содержимое файла EventHandlers.tsx
(стандартное название основного файла клиентского расширения, создаваемого из шаблона).
import { IAgreementHistoryStageRenderer } from "@Docsvision/webclient/Approval/$AgreementHistoryStageRenderer";
import { serviceName } from "@Docsvision/webclient/System/ServiceUtils";
import { IApprovalStageItemRowProps } from "@Docsvision/webclient/Approval/IApprovalStageItemRowProps";
import { IEventArgs } from "@{Docsvision/webclient/System/IEventArgs";
import { AgreementHistory } from "@Docsvision/webclient/Approval/AgreementHistory";
import { Tab } from "@Docsvision/webclient/Platform/Tab";
import { $RequestManager } from "@Docsvision/webclient/System/$RequestManager";
import * as React from 'react' (1)
export function loadRender(sender: Tab, e: IEventArgs) { (2)
if(sender.params.activeTabPage.key == "agreementHistoryTabPage"){ (3)
let agreementHistory = sender.layout.controls.get<AgreementHistory>("agreementHistory"); (4)
agreementHistory.params.stageRenderer = sender.layout.getService($AgreementHistoryRenderService); (5)
}
}
export class AgreementHistoryRenderService implements IAgreementHistoryStageRenderer { (6)
constructor(private services: $RequestManager) {
}
renderCommentCell(stageItemProps: IApprovalStageItemRowProps): React.ReactNode{ (7)
if (!stageItemProps.stageItem.hasComment){
return (
<td key="comment"> - </td> (8)
)
}
return (
<td key="comment">{stageItemProps.stageItem.comment}</td> (9)
)
}
}
export type $AgreementHistoryRenderService = { renderService: AgreementHistoryRenderService };
export const $AgreementHistoryRenderService = serviceName((s: $AgreementHistoryRenderService) => s.renderService); (10)
1 | Импорт зависимостей. |
2 | Определяется функция, которая будет вызываться при открытии страниц элемента "Вкладки". |
3 | Следующий код применяется только для страницы с названием agreementHistoryTabPage . |
4 | Получение элемента управления Ход согласования . |
5 | Передача сервиса отрисовки. |
6 | Реализация сервиса отрисовки, наследуемого от IAgreementHistoryStageRenderer . |
7 | Переопределяется метод отрисовки ячеек столбца "Комментарий". |
8 | Если комментария нет, пишется - . |
9 | Если комментарий есть, пишется его текст. |
10 | Экспорт сервиса AgreementHistoryRenderService. |
Инструкция по разработке и регистрации клиентских сервисов приведена в пункте Разработка расширения с клиентским сервисом. |
Index.ts
нужно добавить регистрацию сервиса $AgreementHistoryRenderService
.import * as EventHandlers from "./EventHandlers";
import { $AgreementHistoryRenderService, AgreementHistoryRenderService } from "./EventHandlers";
import { Service } from "@Docsvision/webclient/System/Service";
import { $RequestManager } from "@Docsvision/webclient/System/$RequestManager";
import { extensionManager } from "@Docsvision/webclient/System/ExtensionManager";
extensionManager.registerExtension({
name: "Template web extension",
version: "5.5.15",
globalEventHandlers: [ EventHandlers ],
layoutServices: [
Service.fromFactory($AgreementHistoryRenderService, (services: $RequestManager) => new AgreementHistoryRenderService(services))
]
})
После загрузки клиентского расширения на сервер Web-клиента нужно указать обработчик для переключения страниц элемента Вкладки
карточки Документ:
-
Откройте программу Конструктор Web-разметок и перейдите к разметке просмотра карточки ДокументУД/Исходящий.
-
Перейдите к свойствам элемента
contentTab
. -
В событии
После переключения активной вкладки
укажите обработчик loadRender. -
Сохраните изменения и перезапустите IIS (для загрузки скриптов).
Чтобы проверить пример, откройте исходящий документ с согласованием и перейдите на страницу Ход согласования
. В столбце Комментарий у событий согласования с комментарием будет указан комментарий, у событий без комментария — знак -
.
Чтобы получить другие примеры, включая пример получения списка файлов для отображения столбца Правки, обратитесь к исходному коду элемента управления Ход согласования в каталоге установки Web-клиента: C:\Program Files (x86)Docsvision\WebClient\5.5\Site\Content\App\Approval\Controls\AgreementHistory .
|