From 7d4554a629cc9ac586e799d50b28385ce6d13ef5 Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Thu, 16 Oct 2025 00:55:09 +0500 Subject: [PATCH] Add subprocess match trigger Signed-off-by: Denis Bykhov --- models/process/src/triggers.ts | 16 +++ models/server-process/src/index.ts | 5 + packages/presentation/src/utils.ts | 7 +- plugins/process-assets/lang/cs.json | 1 + plugins/process-assets/lang/de.json | 1 + plugins/process-assets/lang/en.json | 1 + plugins/process-assets/lang/es.json | 1 + plugins/process-assets/lang/fr.json | 1 + plugins/process-assets/lang/it.json | 1 + plugins/process-assets/lang/ja.json | 1 + plugins/process-assets/lang/pt.json | 1 + plugins/process-assets/lang/ru.json | 1 + plugins/process-assets/lang/tr.json | 1 + plugins/process-assets/lang/zh.json | 1 + .../components/criterias/BaseCriteria.svelte | 31 ++--- .../components/criterias/ModeSelector.svelte | 44 ++++++++ .../criterias/SubProcessStateCriteria.svelte | 73 ++++++++++++ .../settings/SubProcessMatchEditor.svelte | 106 ++++++++++++++++++ .../settings/SubProcessMatchPresenter.svelte | 52 +++++++++ plugins/process-resources/src/index.ts | 10 +- plugins/process-resources/src/plugin.ts | 3 + plugins/process-resources/src/query.ts | 12 +- plugins/process-resources/src/utils.ts | 36 ++++++ plugins/process/src/index.ts | 2 + .../process-resources/src/functions.ts | 36 ++++++ server-plugins/process-resources/src/index.ts | 2 + server-plugins/process/src/index.ts | 1 + services/process/src/main.ts | 5 +- 28 files changed, 422 insertions(+), 30 deletions(-) create mode 100644 plugins/process-resources/src/components/criterias/ModeSelector.svelte create mode 100644 plugins/process-resources/src/components/criterias/SubProcessStateCriteria.svelte create mode 100644 plugins/process-resources/src/components/settings/SubProcessMatchEditor.svelte create mode 100644 plugins/process-resources/src/components/settings/SubProcessMatchPresenter.svelte diff --git a/models/process/src/triggers.ts b/models/process/src/triggers.ts index c454858bd61..3a703b2654b 100644 --- a/models/process/src/triggers.ts +++ b/models/process/src/triggers.ts @@ -94,6 +94,22 @@ export function defineTriggers (builder: Builder): void { process.trigger.OnSubProcessesDone ) + builder.createDoc( + process.class.Trigger, + core.space.Model, + { + label: process.string.WhenSubProcessMatches, + icon: process.icon.WaitSubprocesses, + editor: process.component.SubProcessMatchEditor, + presenter: process.component.SubProcessMatchPresenter, + checkFunction: process.triggerCheck.SubProcessMatchCheck, + requiredParams: ['process'], + init: false, + auto: true + }, + process.trigger.OnSubProcessMatch + ) + builder.createDoc( process.class.Trigger, core.space.Model, diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index 0fb50399794..4fb6e8eb542 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -77,6 +77,11 @@ export function createModel (builder: Builder): void { serverCheckFunc: serverProcess.func.CheckSubProcessesDone }) + builder.mixin(process.trigger.OnSubProcessMatch, process.class.Trigger, serverProcess.mixin.TriggerImpl, { + preventRollback: true, + serverCheckFunc: serverProcess.func.CheckSubProcessMatch + }) + builder.mixin(process.method.RunSubProcess, process.class.Method, serverProcess.mixin.MethodImpl, { func: serverProcess.func.RunSubProcess }) diff --git a/packages/presentation/src/utils.ts b/packages/presentation/src/utils.ts index ff525b327dc..2e2a9ae58d5 100644 --- a/packages/presentation/src/utils.ts +++ b/packages/presentation/src/utils.ts @@ -742,6 +742,10 @@ export function findAttributeEditorByAttribute (client: Client, attribute: AnyAt const hierarchy = client.getHierarchy() if (attribute === undefined) return + if (attribute.editor != null) { + return attribute.editor + } + if (attribute.type._class === core.class.TypeAny) { const _type: TypeAny = attribute.type as TypeAny return _type.editor ?? _type.presenter @@ -769,9 +773,6 @@ export function findAttributeEditorByAttribute (client: Client, attribute: AnyAt } } - if (attribute.editor != null) { - return attribute.editor - } const editorMixin = hierarchy.classHierarchyMixin(presenterClass.attrClass, mixin) if (editorMixin?.inlineEditor === undefined) { diff --git a/plugins/process-assets/lang/cs.json b/plugins/process-assets/lang/cs.json index 775e5d8de26..f918db351a8 100644 --- a/plugins/process-assets/lang/cs.json +++ b/plugins/process-assets/lang/cs.json @@ -51,6 +51,7 @@ "EnterValue": "Zadat hodnotu", "OnToDoDone": "Při dokončení akční položky", "OnSubProcessesDone": "Při dokončení podprocesů", + "WhenSubProcessMatches": "Když podproces odpovídá podmínce", "Result": "Výsledek", "NoResultRequired": "Není vyžadován žádný výsledek", "RequestResult": "Požádat o výsledek", diff --git a/plugins/process-assets/lang/de.json b/plugins/process-assets/lang/de.json index a4a11a5a2a2..b0a92b70779 100644 --- a/plugins/process-assets/lang/de.json +++ b/plugins/process-assets/lang/de.json @@ -51,6 +51,7 @@ "EnterValue": "Wert eingeben", "OnToDoDone": "Beim Erledigen von Action Item", "OnSubProcessesDone": "Beim Abschluss von Unterprozessen", + "WhenSubProcessMatches": "Wenn Unterprozess übereinstimmt", "Result": "Ergebnis", "NoResultRequired": "Kein Ergebnis erforderlich", "RequestResult": "Ergebnis anfordern", diff --git a/plugins/process-assets/lang/en.json b/plugins/process-assets/lang/en.json index 07ea656e85b..088f32b10ef 100644 --- a/plugins/process-assets/lang/en.json +++ b/plugins/process-assets/lang/en.json @@ -51,6 +51,7 @@ "EnterValue": "Enter value", "OnToDoDone": "When action item done", "OnSubProcessesDone": "On sub processes done", + "WhenSubProcessMatches": "When subprocess matches", "Result": "Result", "RequestResult": "Request result", "NoResultRequired": "No result required", diff --git a/plugins/process-assets/lang/es.json b/plugins/process-assets/lang/es.json index f90ddfa1e64..ca55dcd8fa8 100644 --- a/plugins/process-assets/lang/es.json +++ b/plugins/process-assets/lang/es.json @@ -55,6 +55,7 @@ "EnterValue": "Ingrese un valor", "OnToDoDone": "Al completar la acción", "OnSubProcessesDone": "Al finalizar los subprocesos", + "WhenSubProcessMatches": "Cuando el subproceso coincide", "Result": "Resultado", "RequestResult": "Solicitar resultado", "NoResultRequired": "No se requiere resultado", diff --git a/plugins/process-assets/lang/fr.json b/plugins/process-assets/lang/fr.json index a7b6588a820..12cc0eca5e6 100644 --- a/plugins/process-assets/lang/fr.json +++ b/plugins/process-assets/lang/fr.json @@ -55,6 +55,7 @@ "EnterValue": "Saisir une valeur", "OnToDoDone": "Lors de l'achèvement de l'action", "OnSubProcessesDone": "Au fin des sous-processus", + "WhenSubProcessMatches": "Lorsque le sous-processus correspond", "Result": "Résultat", "RequestResult": "Demander le résultat", "NoResultRequired": "Aucun résultat requis", diff --git a/plugins/process-assets/lang/it.json b/plugins/process-assets/lang/it.json index 9ca9109b32d..c2f3a5d2e87 100644 --- a/plugins/process-assets/lang/it.json +++ b/plugins/process-assets/lang/it.json @@ -55,6 +55,7 @@ "EnterValue": "Inserisci valore", "OnToDoDone": "Quando l'azione è completata", "OnSubProcessesDone": "Alla fine dei sottoprocessi", + "WhenSubProcessMatches": "Quando il sottoprocesso corrisponde", "Result": "Risultato", "RequestResult": "Richiedi risultato", "NoResultRequired": "Nessun risultato richiesto", diff --git a/plugins/process-assets/lang/ja.json b/plugins/process-assets/lang/ja.json index 0e1bfd1fa07..63bb4af7a00 100644 --- a/plugins/process-assets/lang/ja.json +++ b/plugins/process-assets/lang/ja.json @@ -55,6 +55,7 @@ "EnterValue": "値を入力", "OnToDoDone": "アクション完了時", "OnSubProcessesDone": "サブプロセス完了時", + "WhenSubProcessMatches": "サブプロセスが条件に一致したとき", "RequestResult": "結果をリクエスト", "NoResultRequired": "結果は不要", "From": "から", diff --git a/plugins/process-assets/lang/pt.json b/plugins/process-assets/lang/pt.json index 93230331c2e..658dd76ca49 100644 --- a/plugins/process-assets/lang/pt.json +++ b/plugins/process-assets/lang/pt.json @@ -55,6 +55,7 @@ "EnterValue": "Insira valor", "OnToDoDone": "Ao completar a ação", "OnSubProcessesDone": "Ao concluir processos sub", + "WhenSubProcessMatches": "Quando o subprocesso corresponde", "Result": "Resultado", "RequestResult": "Solicitar resultado", "NoResultRequired": "Nenhum resultado requerido", diff --git a/plugins/process-assets/lang/ru.json b/plugins/process-assets/lang/ru.json index b219f7545a8..a0e8242eb43 100644 --- a/plugins/process-assets/lang/ru.json +++ b/plugins/process-assets/lang/ru.json @@ -55,6 +55,7 @@ "EnterValue": "Введите значение", "OnToDoDone": "При завершении задачи", "OnSubProcessesDone": "При завершении подпроцессов", + "WhenSubProcessMatches": "Когда подпроцесс соответствует условию", "Result": "Результат", "NoResultRequired": "Результат не требуется", "RequestResult": "Запросить результат", diff --git a/plugins/process-assets/lang/tr.json b/plugins/process-assets/lang/tr.json index 0794c24e348..f75170cd5a4 100644 --- a/plugins/process-assets/lang/tr.json +++ b/plugins/process-assets/lang/tr.json @@ -51,6 +51,7 @@ "EnterValue": "Değer gir", "OnToDoDone": "Eylem öğesi tamamlandığında", "OnSubProcessesDone": "Alt süreçler tamamlandığında", + "WhenSubProcessMatches": "Alt süreç eşleştiğinde", "Result": "Sonuç", "RequestResult": "Sonuç talep et", "NoResultRequired": "Sonuç gerekmez", diff --git a/plugins/process-assets/lang/zh.json b/plugins/process-assets/lang/zh.json index f2fff30ff0e..04b41489071 100644 --- a/plugins/process-assets/lang/zh.json +++ b/plugins/process-assets/lang/zh.json @@ -55,6 +55,7 @@ "EnterValue": "输入值", "OnToDoDone": "任务完成时", "OnSubProcessesDone": "子进程完成时", + "WhenSubProcessMatches": "当子进程匹配条件时", "Result": "结果", "RequestResult": "请求结果", "NoResultRequired": "无需结果", diff --git a/plugins/process-resources/src/components/criterias/BaseCriteria.svelte b/plugins/process-resources/src/components/criterias/BaseCriteria.svelte index 3b2318d5aed..195fd3828c1 100644 --- a/plugins/process-resources/src/components/criterias/BaseCriteria.svelte +++ b/plugins/process-resources/src/components/criterias/BaseCriteria.svelte @@ -16,10 +16,11 @@
- { - mode = e.detail - const prevEditor = (selectedMode.editor ?? selectedMode.withoutEditor) ? null : undefined - selectedMode = modesValues.find((m) => m.id === mode) ?? modesValues[0] - const newEditor = (selectedMode.editor ?? selectedMode.withoutEditor) ? null : undefined - if (prevEditor !== newEditor) { - val = undefined - } - changeResult(val) - }} - /> + {#if selectedMode.editor}
+ + + + { + mode = e.detail + const prevEditor = (selectedMode.editor ?? selectedMode.withoutEditor) ? null : undefined + selectedMode = modes.find((m) => m.id === mode) ?? modes[0] + const newEditor = (selectedMode.editor ?? selectedMode.withoutEditor) ? null : undefined + dispatch('change', prevEditor !== newEditor) + }} +/> diff --git a/plugins/process-resources/src/components/criterias/SubProcessStateCriteria.svelte b/plugins/process-resources/src/components/criterias/SubProcessStateCriteria.svelte new file mode 100644 index 00000000000..3c45fcc1b13 --- /dev/null +++ b/plugins/process-resources/src/components/criterias/SubProcessStateCriteria.svelte @@ -0,0 +1,73 @@ + + + + +
+ + ({ id: state._id, label: state.title }))} + {selected} + on:selected={change} + /> +
diff --git a/plugins/process-resources/src/components/settings/SubProcessMatchEditor.svelte b/plugins/process-resources/src/components/settings/SubProcessMatchEditor.svelte new file mode 100644 index 00000000000..a461ae2b875 --- /dev/null +++ b/plugins/process-resources/src/components/settings/SubProcessMatchEditor.svelte @@ -0,0 +1,106 @@ + + + +
+
diff --git a/plugins/process-resources/src/components/settings/SubProcessMatchPresenter.svelte b/plugins/process-resources/src/components/settings/SubProcessMatchPresenter.svelte new file mode 100644 index 00000000000..fadec771640 --- /dev/null +++ b/plugins/process-resources/src/components/settings/SubProcessMatchPresenter.svelte @@ -0,0 +1,52 @@ + + + + +{#if selectedProcess} + :