Бизнес-процессы¶
Добавление кнопки в заголовке карточки процесса¶
Точка расширения ProcessWorkflowCardAction используется для дополнительного контрола в заголовке модального окна карточки процесса.
Описание ProcessWorkflowCardAction:
type IProps = {
processStore: ProcessCardStore;
searchStore: ProcessSearchStore;
}
type Resolver = (processStore: ProcessCardStore) => boolean;
type Meta = {
order: number;
};
export type UEProcessWorkflowCardAction = UeModuleBase<Resolver, Meta> & {
component: ComponentType<IProps>;
};
Пример: кнопка удаления процесса:
type IProps = {
processStore: ProcessCardStore;
searchStore: ProcessSearchStore;
}
@observer
export class RemoveButton extends React.Component<IProps, {}> {
onDeleteProcess = () => {};
override render () {
return (
<ButtonWithConfirmation
leftIcon={'trash2'}
title={'Удалить процесс?'}
isMinimal={true}
tooltipPlacement={PLACEMENT.LEFT}
intent={INTENT.DANGER}
onConfirm={this.onDeleteProcess}
confirmationMessage={'Вы уверены?'}/>
);
}
}
export const removeProcessActionUe: UniverseUE.IUeMeta['ProcessWorkflowCardAction'] = {
moduleId: 'ProcessWorkflowCardAction',
active: true,
system: false,
meta: {
order: 1
},
resolver: (store: ProcessCardStore) => {
return true;
},
component: RemoveButton
};
ueModuleManager.addModule('ProcessWorkflowCardAction', removeProcessActionUe);
Добавление кнопки в таблице процессов¶
Точка расширения ProcessWorkflowRowAction используется для дополнительного контрола в таблице процессов (отображается при наведении на строку).
Описание ProcessWorkflowRowAction:
type IProps = {
rowActionProps: RowActionsProps<SearchHit>;
processStore: ProcessSearchStore;
}
type Resolver = (props: RowActionsProps<SearchHit>) => boolean;
type Meta = {
order: number;
};
export type UEProcessWorkflowRowAction = UeModuleBase<Resolver, Meta> & {
component: ComponentType<IProps>;
};
Пример: кнопка удаления процесса:
type IProps = {
rowActionProps: RowActionsProps<SearchHit>;
processStore: ProcessSearchStore;
}
@observer
export class RemoveButton extends React.Component<IProps, {}> {
onDeleteProcess = () => {};
override render () {
return (
<ButtonWithConfirmation
leftIcon={'trash2'}
title={'Удалить процесс?'}
isMinimal={true}
tooltipPlacement={PLACEMENT.LEFT}
intent={INTENT.DANGER}
onConfirm={this.onDeleteProcess}
confirmationMessage={'Вы уверены?'}/>
);
}
}
export const removeProcessActionUe: UniverseUE.IUeMeta['ProcessWorkflowRowAction'] = {
moduleId: 'ProcessWorkflowRowAction',
active: true,
system: false,
meta: {
order: 1
},
resolver: (hit: RowActionsProps<SearchHit>) => {
return true;
},
component: RemoveButton
};
ueModuleManager.addModule('ProcessWorkflowRowAction', removeProcessActionUe);
Добавление пунктов меню в "Создать задачу"¶
Точка расширения UETaskMenuItem предназначена для добавления пунктов меню у кнопки Создать задачу на странице задач.
Описание UETaskMenuItem:
type TaskMenuItemProps = {
taskStore: TaskSearchStore<ITreeNodeModel<any>>;
}
type Resolver = (taskStore: TaskSearchStore<ITreeNodeModel<any>>) => boolean;
type Meta = {
order: number;
};
export type UETaskMenuItem = UeModuleBase<Resolver, Meta> & {
component: ComponentType<TaskMenuItemProps>;
};
Пример: пункт меню с названием SomeDropDownItemName
, при нажатии на который появляется модальное окно.
@observer
class SomeComponent extends React.Component<IProps> {
@observable
isModalOpen = false;
@action
toggleModal = () => {
this.isModalOpen = !this.isModalOpen;
};
override render () {
const taskStore = this.props.taskStore;
return (
<>
<DropDown.Item
onClick={this.toggleModal}
>
{'SomeDropDownItemName'}
</DropDown.Item>
<Modal
isOpen={this.isModalOpen}
onClose={this.toggleModal}
>
<>
{'someModalContent'}
</>
</Modal>
</>
);
}
}
export const someNewTaskMenuItemUE: UniverseUE.IUeMeta['TaskMenuItem'] =
{
moduleId: 'exampleUeModule1',
active: true,
system: false,
meta: {
order: 2
},
component: SomeComponent,
resolver: (taskStore: TaskSearchStore<ITreeNodeModel<any>>) => {
return true;
}
};
ueModuleManager.addModule('TaskMenuItem', someNewTaskMenuItemUE);
Фильтрация бизнес-процессов при публикации актива¶
Точка расширения AssignedProcessesFilter позволяет добавить дополнительную фильтрацию назначенных бизнес-процессов при публикации актива.
Описание AssignedProcessesFilter:
type Resolver = (cardStore: AbstractCardStore<IRecordEntity>) => boolean;
type Meta = {}
export type UEAssignedProcessesFilter = UeModuleBase<Resolver, Meta> & {
fn: (processDefinition: ProcessDefinitionEE, cardStore: AssetCardEEStore, processSettingsStore: ProcessSettingsStore) => boolean;
};
fn
- содержит функцию фильтрации бизнес-процессов.processDefinition
- текущий бизнес-процессcardStore
- стор карточки записиprocessSettingsStore
- стор бизнес-процессов
Примечание
В случае если в результате фильтрации с помощью фильтра будет получен пустой результат, фильтрация не будет применена.
Пример: добавление кастомной функции фильтрации.
const assignedProcessFilterUE: UniverseUE.IUeMeta['AssignedProcessFilter'] = {
moduleId: 'bpselection',
active: true,
system: false,
meta: {},
resolver: () => {
return true;
},
fn: (item, cardStore) => true
};
ueModuleManager.addModule('AssignedProcessFilter', assignedProcessFilterUE);
Добавление виджетов в секцию "Описание" в карточке задачи¶
Точка расширения UETaskCardDescriptionWidget предназначена для добавления дополнительных виджетов в карточку задачи в секции Описание.
Описание UETaskCardDescriptionWidget:
export type ITaskCardDescriptionWidgetProps = {
taskId: TaskId;
taskCardStore: TaskCardStore;
// Используется для запуска принудительной перезагруки виджета из карточки задачи
// Если в вашем компоненте нужна такая перезагрука, вызовите props.registerWidgetReloader при монтировании
// компонента, передав ему метод перезгруки вишего виджета, и сохраните результат.
// Вызовите созраненный результат при размонитрованиии компонента
registerWidgetReloader: (reloadWidget: () => Promise<unknown>) => () => void;
}
type Resolver = (taskId: TaskId, taskCardStore: TaskCardStore) => boolean;
type Meta = {
order: number;
column: 0 | 1;
};
export type UETaskCardDescriptionWidget = UeModuleBase<Resolver, Meta> & {
component: ComponentType<ITaskCardDescriptionWidgetProps>;
};
Пример реализации UETaskCardDescriptionWidget:
class MyTasksWidget extends React.Component<ITaskCardDescriptionWidgetProps> {
reloadDisposer;
componentDidMount () {
this.reloadDisposer = this.props.registerWidgetReloader(() => this.reloadWidgetData());
}
override componentWillUnmount () {
this.reloadDisposer();
}
async reloadWidgetData () {
...
}
render () {
...
}
}
ueModuleManager.addModule('TaskCardDescriptionWidget', {
moduleId: 'myTaskCardDescriptionWidget',
active: true,
system: false,
component: MyTasksWidget,
meta: {
column: 0,
order: 10
},
resolver: () => {
return true;
}
});