Переопределение сервиса отрисовки элемента "Ход согласования"
Элемент управления Ход согласования представляет собой таблицу, в которой отображаются события заданий согласования (выполнение, делегирование и др.).
Программист может переопределить функцию отрисовки всей таблицы и отдельных элементов: заголовков и ячеек определённых столбцов. Для этого нужно передать в поле 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.
|