Раздел содержит описание работы действий в ECOS.
Contents
- Описание формата
- Получение действий по записи
- Фронтенд
- Общие настройки любого действия
- Типы действий
- view
- edit
- open-in-background
- download
- delete
- download-card-template
- download-by-template
- view-card-template
- upload-new-version
- create
- save-as-case-template
- open-url
- assoc-action
- content-preview-modal
- fetch
- view-business-process
- cancel-business-process
- mutate
- edit-menu
- view-menu
- task-outcome
- tasks-actions
- edit-password
- open-submit-form
- Enterprise действия
- Расширение действий
- Настройки списка действий
- Техническая информация
Действия - это артефакты ECOS в формате json или yaml с типом ui/action.
Одно действие может быть многократно использовано в разных местах системы (например, в журнале и на карточке документа).
Все действия делятся на 3 категории - "над записью", "над выбранными записями" и "над отфильтрованными записями".
Имя | Тип | Описание |
---|---|---|
id | String | Идентификатор действия.
Уникальный среди всех действий в системе
|
key | String | Ключ, по которому возможна фильтрация.
Должен быть в формате word0.word1.word2, чтобы можно было фильтровать по маске.
|
name | String | Имя действия, которое увидит пользователь |
type | String | Тип действия.
Тип определяет логику, которая будет выполнена при выполнении действия.
|
icon | String | Иконка действия. Пример "icon-delete", "icon-on".
Все иконки можно посмотреть в
citeck/ecos-ui/src/fonts/citeck/demo.html |
config | JsonObject | Конфигурация действия.
Полезно в случаях, когда один тип действия может на основе конфигурации менять свое поведение.
Например - для действия с типом Download можно задать шаблон URI для скачивания контента.
|
predicate | Predicate | Используется для динамического определения доступности действия для пользователя. Подробно о :ref:`предикатах <ecos-predicate_main>`
Например, действия Редактировать и Удалить не могут выполнять пользователи без прав на запись и для них эти действия скрываются.
|
Для запроса действий отправляется следующий запрос:
{ "query": { "records": [ "workspace://SpacesStore/123123-123-123", "workspace://SpacesStore/123123-123-124" ], "actions": [ "ui/action$delete", "ui/action$edit" ] } }
Ответ:
[ { "record": "workspace://SpacesStore/123123-123-123", "actions": [ { "icon": "edit", "key": "...", "type": "mutate", "config": {} }, { "icon": "delete", "key": "...", "type": "delete", "config": {} } ] }, { "record": "workspace://SpacesStore/123123-123-124", "actions": [ { "icon": "edit", "id": "...", "type": "mutate", "config": {} }, { "icon": "delete", "id": "...", "type": "delete", "config": {} } ] } ]
Так же доступен вариант раздельного указания действий по записям:
{ "query": { "records": [ { "record": "workspace://SpacesStore/123123-123-123", "actions": [ "ui/action$delete", "ui/action$edit" ] }, { "record": "workspace://SpacesStore/123123-123-555", "actions": [ "ui/action$edit" ] } ] } }
На фронтенде действия описаны в виде javascript сущностей с методами
execForRecord
, execForRecords
, execForQuery
, getDefaultModel
, canBeExecuted
и др.
Например: src/components/Records/actions/handler/executor/CreateAction.js
При выполнении действия вызывается метод execute в который передается запись, над которой выполняется действие и конфигурация действия.
Реестр действий описан в src/components/Records/actions/RecordActionExecutorsRegistry.js
Регистрация действий в реестре: src/components/Records/actions/index.js
Конфигурация | Описание |
---|---|
Стандартные установки id: "print-signed-fin-pdf", name: { ru: "Распечатать подписанный PDF", en: "Print signed PDF" }, type: "open-url", icon: "icon-print", theme: '', features: { "execForQuery": false, "execForRecord": false, "execForRecords": true } |
id - идентификатор действия;
name - название действия;
type - тип;
config - дополнительные сведения;
icon - код картинки из иконочного шрифта citeck;
theme - имя темы.
features - использовать для записи/Record, записей/Records, поискового запроса/Query
|
Подтверждение и контент окна confirm:{ title:{ ru: 'текст' , en: 'text' }, message:{ ru: 'текст' , en: 'text' }, formRef: '', attributesMapping:{ body.comment: "comment" } } |
Подтверждение выполнения действия
- если не заданы значения в confirm , действие выполняется без подтверждения
- title - заголовок окна (строка или объект с локализацией)
- message - сообщение в окне
- если задано formRef - отображается соответствующая форма в окне подтверждения (message игнорируется)
- attributesMapping - маппинг атрибутов, данные с формы подтверждения (комментарии и т.д.) можно прокинуть в поля конфигурации действия;
key - путь для записи в body конфигурации действия, value - путь к значению с формы.Ответ подтверждения, если он есть, к прочие данные с формы, передается в действие.
Например, в запросе необходимо отправить комментарий с формы подтверждения. Для этого настраиваем
body.comment . Внутри body в поле comment необходимо найти и записать значение из поля comment в форму подтверждения. |
Подстановка значения по атрибуту { "type": "fetch", "config": { "url": "/share/proxy/alfresco/api/someurl?nodeRef=${recordRef}", "body": { "counterparty": "${idocs:counterparty.idocs:organizationName}" } } } |
В любом месте конфигурации можно подставлять атрибуты из записи, над которой происходит действие.
Есть один частный случай -
${recordRef} . Вместо него всегда подставляется recordRef текущей записи.Все остальные атрибуты подставляются так же как если они загружены через
Citeck.Records.load(...) . Например: |
Отключение окна о результатах выполнения { ... "config": { "noResultModal": true, } } |
По умолчанию
false |
Первоначальная обработка внешнем модулем { ... "preActionModule": "js/citeck/modules/common/custom-preProcess-action" } |
preActionModule указывается ссылка на модуль содержащая js код.Модулю нужно экспортировать функции
execForRecord или execForRecords (в зависимости от features), которые вызываются перед выполнением основного внутреннего действия.В функцию модуля передаются значения:
records , action , context .Ожидаемый ответ от функции модуля:
{ config: {}, results: [{ message: 'String', status: 'String', recordRef: 'String' }, ... ] } ключ-значения не обязательные, но обрабатываются только они.
config - объединяется со значением config из конфигурации самого действия
results - актуально для
execForRecords ; внешнее действие может обработать какие-то записи и вернуть по ним результат.Если записи указаны в results, они исключаются из выполнения внутреннего основного действия.
Результаты внешнего и внутреннего объединяются для вывода информации.
|
id типа: view
Описание | Конфигурация |
---|---|
Открыть запись на просмотр. | Дополнительные параметры для config:
background: Bool - открыть запись в новой вкладке приложения в фоновом режиме;
reopen: Bool - открыть запись в текущей вкладке приложения;
newBrowserTab: Bool - открыть запись в новой вкладке браузера
reopenBrowserTab: Bool - открыть запись в текущей вкладке браузера (с перезагрузкой страницы).
|
id типа: edit
Описание | Конфигурация |
---|---|
Редактировать запись. | attributes: Object<String, String> - атрибуты, которые будут прокинуты на форму создания. Необязательный параметр |
id типа: open-in-background
Описание | Конфигурация |
---|---|
Открыть запись в новой фоновой вкладке |
id типа: download
Описание | Конфигурация |
---|---|
Скачать некоторый контент связанный (или не связанный) с записью.
По умолчанию скачивается контент записи
|
url - URL для скачивания. Можно добавлять ${recordRef} для подстановки текущей записи. |
id типа: delete
Описание | Конфигурация |
---|---|
Удалить запись | {
"config" : {
"isWaitResponse" : false,
"withoutConfirm" : true
},
"type" : "delete"
}
isWaitResponse - ожидание ответа удаления (по умолчанию
true )withoutConfirm - удаление без подтверждения (по умолчанию
false ) |
id типа: download-card-template
Описание | Конфигурация |
---|---|
Скачать печатную версию документа
|
templateType - тип шаблона
format - формат (html, pdf, pdf2, docx)
|
id типа: download-by-template
Описание | Конфигурация |
---|---|
Скачать документ по шаблону
|
templateRef - ссылка на шаблон
resultName - имя файла, который будет скачан
requestParams - дополнительные параметры, которые будут отправлены на сервер
|
id типа: view-card-template
Описание | Конфигурация |
---|---|
Просмотр печатной версии документа в новой вкладке браузера
(возвращаемый документ такой же как для события
download-card-template ) |
templateType - тип шаблона
format - формат (html, pdf, pdf2, docx)
includeTimezone (по умолчанию -
true ) |
id типа: upload-new-version
Описание | Конфигурация |
---|---|
Загрузка новой версии документа |
id типа: create
Описание | Конфигурация |
---|---|
Действие для создания нового документа.
Обычно применяется когда требуется создать новый документ, в котором некоторые поля будут предзаполнены из данных текущего открытого документа.
|
typeRef: String - ECOS тип для создания. Обязательный параметр;
createVariantId: String - Идентификатор варианта создания для типа. Если не указан, то используется первый доступный вариант
createVariant: Object - Вариант создания для ситуаций, когда ни один вариант создания из типа не походит и требуется его полностью определить в действии
attributes: Object - Предопределенные атрибуты для создания новой сущности. Для прокидывания атрибутов с текущей записи (т.е. той, с которой выполняется действие) на форму создания можно использовать вставки вида
${attribute_name} options: Object - Опции формы
|
id типа: save-as-case-template
Описание | Конфигурация |
---|---|
Создается шаблон, затем по условию конфигурации - скачивание или переход на дашборд.
|
download
По умолчанию скачивается контент записи.
|
id типа: open-url
Описание | Конфигурация |
---|---|
Открывает заданный URL относительно текущего стенда.
|
URL - можно добавлять
${recordRef} для подстановки текущей записи |
id типа: assoc-action
Описание | Конфигурация |
---|---|
Выполняет действие над указанной ассоциацией.
|
assoc - ассоциация
action - объект действия
|
id типа: content-preview-modal
Описание | Конфигурация |
---|---|
Модальное окно с предпросмотром документа.
В конфигурации действия ожидается поле scale.
Возможные значения:
| auto
| 0…4
| page-fit
| page-height
| page-width
|
recordRef
|
id типа: fetch
Описание | Конфигурация |
---|---|
Отправляет запрос на указанный URL
|
url
method
args - аргументы, которые будут переданы в URL
body - аргументы, которые будут переданы в тело запроса
|
id типа: view-business-process
Описание | Конфигурация |
---|---|
Просмотреть Бизнес-процесс
(окно с превью процесса и доп. действиями).
|
workflowFromRecord [true/ false]
|
id типа: cancel-business-process
Описание | Конфигурация |
---|---|
Отменить бизнес- процесс.
|
id типа: mutate
Описание | Конфигурация |
---|---|
Внесение изменений без участия пользователя посредством передачи атрибутов.
Доступно для
execForRecord , execForRecords |
config: { implSourceId: "ARTIFACTID_ПРОЕКТА/id_действия@" record: { id: "${recordRef}", attributes: { "key": "value" } } } implSourceId - возможность получить ссылку для скачивания файла с карточки и определенной записи в журнале
record.id - необязательный параметр
record.attributes - изменяемые поля и их значения
|
- В журнале перейти во вкладку «Действия»:
п/п | Наименование | Описание | Пример заполнения |
---|---|---|---|
1 | Id | уникальный идентификатор | guide-action |
2 | Имя | наименование действия | Изменить инициатора |
3 | Тип | тип действия | mutate |
4 | Ключ: | ключ конфигурации | record |
5 | Значение | значение конфигурации | {attributes:{requester:requester}} |
6 | Форма | выбрать форму ввода данных | Действие гайда (form-action-guide) |
7 | Ключ: | ключ параметра формы подтверждения | record.attributes.requester |
8 | Значение | значение параметра формы подтверждения | requester |
9 | Применимость | Применить для записи, записей, поискового запроса. См. :ref:`подробно<applicability>` | все в true |
- Пользователь отмечает некоторые строки в журнале и выбирает в выпадающем меню над журналом действие:
- Открывается форма для уточнения значений атрибута для выполнения действия и нажимает кнопку:
Конфиг действия:
{ "id": "change-status", "name": { "ru": "Изменить статус", "en": "Change status" }, "confirm":{ "title": { "ru": "Изменить", "en": "Change" }, "message":{}, "formRef":"uiserv/form@change-status-form", "formAttributes":{}, "attributesMapping":{ "record.attributes._status": "statuses" } } "type": "mutate", "config": { "record": { "id": "${recordRef}" "attributes": {} } } } }
Форма, которая предлагается пользователю:
Через компонент Async Data добавляются статусы типа данных:
Настройки компонента ECOS Select:
Скрипт для перебора массива для получения id статуса:
var statuses = _.get(data, "stats.statuses"); var arr = []; for(var i = 0; i < statuses.length; i++) { var id statuses[i].id; arr.push(id); } values = arr;
Полученные статусы в форме :ref:`локализуются<form_localisation>`:
Действие в интерфейсе:
Пример группового действия для выгрузки в txt файл некоторых данных из выбранных записей (в примере - _created
) с возможностью скачивания.
Конфиг действия:
id: example-unload-to-file type: mutate name: ru: Выгрузить в файл en: Unload confirm: title: ru: Подтвердите действие en: Confirm the action message: ru: Выгрузить в файл en: Unload config: implSourceId: ЗДЕСЬ_ARTIFACTID_ВАШЕГО_ПРОЕКТА/example-unload features: execForQuery: false execForRecord: true execForRecords: true
RecordsDAO для действия (метод getId()
должен возвращать значение из implSourceId в конфигурации):
import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.citeck.ecos.commons.data.DataValue; import ru.citeck.ecos.records3.RecordsService; import ru.citeck.ecos.records3.record.dao.mutate.ValueMutateDao; import ru.citeck.ecos.webapp.api.content.EcosContentApi; import ru.citeck.ecos.webapp.api.entity.EntityRef; import java.util.*; @Component @Slf4j public class ExampleUnloadToFileRecordsDao implements ValueMutateDao<DataValue> { private final RecordsService recordsService; private final EcosContentApi contentApi; @Autowired public ExampleUnloadToFileRecordsDao(RecordsService recordsService, EcosContentApi contentApi) { this.recordsService = recordsService; this.contentApi = contentApi; } @NotNull @Override public String getId() { return "example-unload"; } @Nullable @Override public Object mutate(@NotNull DataValue selectedRecords) throws Exception { List<String> recordRefs = selectedRecords.get("records").asList(String.class); List<String> data = new ArrayList<>(Collections.emptyList()); for (String record : recordRefs) { data.add(recordsService.getAtt(record,"_created").asText()); } EntityRef tempRef = contentApi.uploadTempFile() .writeContent(writer -> { writer.writeText(data.toString()); return null; }); String url = recordsService.getAtt(tempRef, "_content.url").asText(); return DataValue.createObj() .set("type", "link") .set("data", DataValue.createObj() .set("url", url) ); } }
В интерфейсе при активации действия из выбранных записей были получены их _created
и записаны в файл, который доступен для скачивания:
Подробнее о :ref:`EcosContentApi<EcosContentApi>`
Конфиг действия:
{ "id": "print-to-console", "name": { "ru": "Вывести в консоль", "en": "Print to console" }, "confirm": { "title": { "ru": "Подтвердите действие", "en": "Confirm the action" }, "message": { "ru": "Вывести в консоль", "en": "Print to console" }, "formRef": "", "formAttributes": {}, "attributesMapping": {} }, "type": "mutate", "config": { "record": { "id": "minimal-webapp/print-to-console@", "attributes": { "employee": "${employee}", "position": "${position}", "start_date": "${start_date}" } } }, "features": { "execForRecords": false, "execForQuery": false, "execForRecord": true } }
DTO для необходимого набора данных - SalaryDataDto.java
package ru.citeck.ecos.webapp.sample.minimal.dto; import lombok.Data; import java.util.Date; @Data public class SalaryDataDto { private String employee; private String position; private Date start_date; }
И DAO класс, который будет все это обрабатывать - JavaPrintToConsoleRecordsDao.java
package ru.citeck.ecos.webapp.sample.minimal.service.java.action; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Component; import ru.citeck.ecos.records3.record.dao.mutate.ValueMutateDao; import ru.citeck.ecos.webapp.sample.minimal.dto.SalaryDataDto; @Component public class JavaPrintToConsoleRecordsDao implements ValueMutateDao<SalaryDataDto> { @NotNull @Override public String getId() { return "print-to-console"; } @Nullable @Override public Object mutate(@NotNull SalaryDataDto salaryDataRecord) { String salaryInfo = String.format("Сотрудник: %s%nДолжность: %s%nДата приема: %s%n", salaryDataRecord.getEmployee(), salaryDataRecord.getPosition(), salaryDataRecord.getStart_date()); System.out.println("###################\n"); System.out.println(salaryInfo); System.out.println("###################"); return null; } }
Обратите внимание, связь между конфигой и обработчиком осуществляется за счет указания ID обработчика в конфиге.
Конфиг действия:
{ "id": "unload-salary-data-to-file", "name": { "ru": "Выгрузить в файл", "en": "Unload to file" }, "confirm": { "title": { "ru": "Подтвердите действие", "en": "Confirm the action" }, "message": { "ru": "Выгрузить в файл", "en": "Unload to file" }, "formRef": "", "formAttributes": {}, "attributesMapping": {} }, "type": "mutate", "config": { "implSourceId": "minimal-webapp/unload-to-file" }, "features": { "execForRecords": true, "execForQuery": false, "execForRecord": false } }
DAO класс - JavaUnloadToFileRecordsDao.java
package ru.citeck.ecos.webapp.sample.minimal.service.java.action; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.citeck.ecos.commons.data.DataValue; import ru.citeck.ecos.records3.RecordsService; import ru.citeck.ecos.records3.record.dao.mutate.ValueMutateDao; import ru.citeck.ecos.webapp.api.content.EcosContentApi; import ru.citeck.ecos.webapp.api.entity.EntityRef; import java.util.Date; import java.util.List; @Component public class JavaUnloadToFileRecordsDao implements ValueMutateDao<DataValue> { private final RecordsService recordsService; private final EcosContentApi contentApi; @Autowired public JavaUnloadToFileRecordsDao(RecordsService recordsService, EcosContentApi contentApi) { this.recordsService = recordsService; this.contentApi = contentApi; } @NotNull @Override public String getId() { return "unload-to-file"; } @Nullable @Override public Object mutate(@NotNull DataValue selectedRecords) { List<String> recordRefs = selectedRecords.get("records").asList(String.class); List<SalaryRecordData> salaryRecordsData = recordsService.getAtts(recordRefs, SalaryRecordData.class); String salaryDataAsPrettyString = formatSalaryDataList(salaryRecordsData); EntityRef tempRef = contentApi.uploadTempFile() .writeContentJ(writer -> { writer.writeText(salaryDataAsPrettyString); }); String url = recordsService.getAtt(tempRef, "_content.url").asText(); return DataValue.createObj() .set("type", "link") .set("data", DataValue.createObj() .set("url", url) ); } public String formatSalaryDataList(List<SalaryRecordData> salaryRecordsData) { StringBuilder sb = new StringBuilder(); for (SalaryRecordData record : salaryRecordsData) { sb.append("\nСотрудник: ").append(record.getEmployee()).append(",\n"); sb.append("Должность: ").append(record.getPosition()).append(",\n"); sb.append("Дата приема: ").append(record.getStart_date()).append(",\n\n"); } sb.append("\n"); return sb.toString(); } @Data @NoArgsConstructor @AllArgsConstructor static class SalaryRecordData { private String employee; private String position; private Date start_date; } }
id типа: edit-menu
Описание | Конфигурация |
---|---|
Запустить редактор конфигурации меню
|
действие для версии конфигурации > 0
|
id типа: view-menu
Описание | Конфигурация |
---|---|
Запустить редактор конфигурации меню
|
действие для версии конфигурации > 0
|
id типа: task-outcome
Описание | Конфигурация |
---|---|
Действие используется в связке с
tasks-actions .Действие связано с бизнес-процессом записи.
|
label - заголовок варианта завершения задачи
outcome - идентификатор варианта завершения задачи
formRef - ссылка на форму задачи (uiserv/eform@...)
taskRef - ссылка на задачу (wftask@flowable$12345)
|
id типа: tasks-actions
id типа: edit-password
Описание | Конфигурация |
---|---|
Изменение пароля
|
id типа: open-submit-form
Описание | Конфигурация |
---|---|
Вызов формы редактирования с попыткой отправить в рассмотрение.
Действие связано с бизнес-процессом записи.
|
Если все поля заполнены корректны, форма отправляется и закрывается.
Иначе отображается список ошибок, после их исправления отправление вручную.
config.formId - необязательный параметр; без указания загружается форма по умолчанию.
"config": { "formId": "...", } |
id типа: transform
Описание | Конфигурация |
---|---|
Трансформация содержимого по заданным правилам и его скачивание или загрузка в атрибут с типом "контент"
|
input: Object // источник содержимого. По умолчанию - основное содержимое текущего документа;
transformations: Object[] // описание трансформаций;
output: Object // цель для результата трансформации. По умолчанию - временный файл, контент которого сразу же скачивается.
Подробнее о возможных настройках input, transformations и output можно прочитать :ref:`здесь<Content_transformation>`
Примеры:
1. Сконвертировать содержимое в PDF и скачать
id: download-as-pdf type: transform name: Скачать как PDF config: transformations: - type: convert config: { toMimeType: 'application/pdf' } |
Конфиг действия:
{ "id": "test-action-transform", "name": { "ru": "Скачать с штрих-код", "en": "Download with barcode" }, "type": "transform", "config": { "transformations": [ { "type": "convert", "config": { "toMimeType": "application/pdf" } }, { "type": "barcode", "config": { "entityRef": "${?id}", "layout": "BOTTOM_RIGHT", "pages": "ALL" } } ] } }
layout
- выбор положения баркода с возможными значениями: TOP_LEFT, TOP_CENTER, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT
До добавления действия в тип данных необходимо:
- добавить :ref:`аспект Имеет штрих-код<barcode_aspect>` в тип данных;
- добавить :ref:`шаблон нумерации<number_template>` в тип данных.
Для добавления новых инстансов действий необходимо описать их в json виде и добавить их в alfresco (в микросервисы так же можно добавлять действия) по пути
{alfresco_module_id}/src/main/resources/alfresco/module/{alfresco_module_id}/ui/action
Пример описания:
{ "id": "confirm-list-html", "key": "card-template.confirm-list.html", "name": "Скачать лист согласования", "type": "download-card-template", "config": { "templateType": "confirm-list", "format": "html" } }
Для тестирования можно заливать эту конфигурацию в журнале действий вручную.
На данный момент все типы описаны в базовом проекте ecos-ui (в планах есть поддержка расширения действий без изменений в ecos-ui).
Описать новое действие:
export const DownloadAction = { execute: ({ record, action }) => { const config = action.config || {}; let url = config.url || getDownloadContentUrl(record.id); url = url.replace('${recordRef}', record.id); // eslint-disable-line no-template-curly-in-string const name = config.filename || 'file'; const a = document.createElement('A', { target: '_blank' }); a.href = url; a.download = name; document.body.appendChild(a); a.click(); document.body.removeChild(a); return false; }, getDefaultModel: () => { return { name: 'grid.inline-tools.download', type: 'download', icon: 'icon-download' }; }, canBeExecuted: ({ record }) => { return record.att('.has(n:"cm:content")') !== false; } };
Зарегистрировать новый тип:
import Registry from './RecordActionExecutorsRegistry'; import { DownloadAction } from './DefaultActions'; Registry.addExecutors({ download: DownloadAction, });
Настройка действий на dashboard осуществляется в журнале типов данных, который располагается в системных журналах:
1 - выбрать список действий для типа.
2 - если стоит чекбокс, то действия наследуются от родителя.
Действия в журнале описываются в разделе actions перед headers и содержат ссылки на те же действия, что и в типах. Если действия не описаны, то используется список действий по умолчанию:
- ui/action$content-download
- ui/action$edit
- ui/action$delete
- ui/action$view-dashboard
- ui/action$view-dashboard-in-background
Примеры настроек действий:
<journal id="ecos-sync"> <datasource>integrations/sync</datasource> <create> <variant title="Alfresco Records"> <recordRef>integrations/sync@alfrecords</recordRef> <attribute name="type">alfrecords</attribute> </variant> </create> <actions> <action ref="ui/action$ecos-module-download" /> <action ref="ui/action$delete" /> <action ref="ui/action$edit" /> </actions> <headers> <header key="module_id" default="true"/> <header key="name" default="true"/> <header key="type" default="true"/> <header key="syncDate" default="true"/> <header key="enabled" default="true"/> </headers> </journal>
Настройка действия, которое активно для записей с определенным mimetype контента:
{ "id": "edit-in-onlyoffice", "key": "edit.onlyoffice", "name": "Редактировать Документ", "type": "open-url", // тип действия должен соответствовать типу на UI "config": { "url": "/share/page/onlyoffice-edit?nodeRef=${recordRef}&new=" }, "evaluator": { "type": "predicate", // Тип evaluator'а для фильтрации действий "config": { "predicate": { "t": "in", "att": "_content.mimetype?str", // атрибут, который мы проверяем "val": [ //значения, на которые мы проверяем "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "text/plain", "text/csv" ] } } } }
Данный конфиг достаточно положить в ecos-app/ui/action для микросервисов или в {alfresco_module_id}/src/main/resources/alfresco/module/{alfresco_module_id}/ui/action для Alfresco
Параметр | Описание |
---|---|
actionRecord | В любую форму, которая вызывается из действия, в объект
options устанавливается свойство actionRecord , указывающее идентификатор записи (record), для которой выполняется действие.Данное значение только для чтения. Указать в действии
config.options.actionRecord не нужно, пользовательское будет перезаписано. |
Тип результата boolean или object (array - deprecated - обработка поддерживается)
Если object
отображаются подробности выполнения в зависимости от типа результата.
Для групповых действий модальное окно появляется сразу при запуске и если результат boolean автоматические закрывается.
link
Отображаемый результата выполнения - ссылка на скачивания отчета
{ "type": "link", "data": { "url": "..." } }
results
Таблица записей с результатом выполнения действия
{ "type": "results", "data": { "results": [ { "recordRef": "workspace://SpacesStore/...", "disp": "название записи" "status": "OK", "message": "Все хорошо" } ] } }
error
Вывод ошибки. Возможно автоматическое создание.
{ "type": "error", "data": { "message": "..." } }
Note
- В колонке ID типа используйте форматирование для типа - Heading 3 (вместо Normal text) - так оно попадет в список доступных действий и будет возможность ссылки-якоря
- Если описание конфигурации большое используете Expand панель (+)