Групповые действия
См. Механизм групповых действий
Для добавления групповых действий в новом конфиге журналов следует использовать поле actions (List<RecordRef>).
Действия из данного списка могут быть групповыми, для отфильтрованных элементов, для конкретных записей или любая комбинация данных возможностей.
Возможность выполнения действия определяется реализацией ActionsExecutor
на UI и флагами в конфиге действия. Пример действия на UI:
export default class DeleteAction extends ActionsExecutor {
static ACTION_ID = 'delete';
async execForRecord(record, action, context) {
return this.execForRecords([record], action, context);
}
async execForRecords(records, action, context) {
let dialogTitle, dialogText;
if (records.length === 1) {
dialogTitle = 'record-action.delete.dialog.title.remove-one';
dialogText = 'record-action.delete.dialog.title.remove-one';
} else {
dialogTitle = 'record-action.delete.dialog.title.remove-many';
dialogText = 'record-action.delete.dialog.msg.remove-many';
}
return new Promise(resolve => {
dialogManager.showRemoveDialog({
title: dialogTitle,
text: dialogText,
onDelete: () => {
Records.remove(records)
.then(() => {
resolve(true);
})
.catch(e => {
dialogManager.showInfoDialog({
title: 'record-action.delete.dialog.title.error',
text: e.message || 'record-action.delete.dialog.msg.error',
onClose: () => {
resolve(false);
}
});
console.error(e);
});
},
onCancel: () => {
resolve(false);
}
});
});
}
getDefaultActionModel() {
return {
name: 'record-action.name.delete',
icon: 'icon-delete',
theme: 'danger'
};
}
}
Executor реализует 2 метода: execForRecords
и execForRecord
. Это означает, что в конфиге действия мы можем управлять данными фичами отключая и включая их.
Фича execForQuery
будет всегда неактивна до реализации соответствующего метода.
По умолчанию все фичи по максимуму включены если соответствующий Executor переопределяет нужные методы.
Пример конфига действия:
{
"id": "download-zip",
"type": "download-zip",
"evaluator": {
"type": "has-attribute",
"config": {
"attribute": "_content"
}
},
"features": {
"execForQuery": false,
"execForRecord": false,
"execForRecords": true
}
}
В DTO нового конфига журнала есть поле groupActions, но оно deprecated и будет удалено в дальнейшем.
Для воспроизведения такого же функционала как в groupActions следует настроить примерно следующий конфиг:
Было:
<group-actions>
<action id="complete-document-task" title="journal.group-action.payments.approve">
<param name="actionId">complete-document-task</param>
<param name="tasks">[
{"taskId": "confirm-task", "transition": "Confirmed"}
]</param>
</action>
</group-actions>
Стало:
{
"id": "complete-confirm-task", <-- данный id не одно и то же что в старом конфиге. Следует его задавать по смыслу.
"type": "server-group-action",
"name": "journal.group-action.payments.approve",
"config": {
"id": "complete-document-task", <-- здесь уже id из группового действия
"formKey": "...", <-- в примере выше формы нет, но её следует сюда помещать если хочется минимум действий при миграции. По хорошему функционал форм для действий следует использовать из статьи с действиями
"params": {
"tasks": "[{ "taskId": "confirm-task", "transition": "Confirmed" }]" <-- здесь нужно проверить без кавычек. Если получится, то лучше использовать такой вариант.
"actionId": "complete-document-task"
}
}
}