From c36dd74fef9801090082dceb738755b47a63be8a Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Tue, 21 Jul 2026 20:51:02 +0500 Subject: [PATCH] Add AllMatchValue function and related updates across multiple files (#10990) Signed-off-by: Denis Bykhov --- models/process/src/functions.ts | 13 ++++++++++++ models/server-process/src/index.ts | 4 ++++ plugins/process-assets/lang/cs.json | 3 ++- 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/ko.json | 1 + plugins/process-assets/lang/pl.json | 1 + plugins/process-assets/lang/pt-br.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 + plugins/process-resources/src/plugin.ts | 1 + plugins/process/src/index.ts | 1 + server-plugins/process-resources/src/index.ts | 2 ++ .../process-resources/src/transform.ts | 20 +++++++++++++++++++ server-plugins/process/src/index.ts | 1 + 21 files changed, 57 insertions(+), 1 deletion(-) diff --git a/models/process/src/functions.ts b/models/process/src/functions.ts index 11d982c12c..2ed2985176 100644 --- a/models/process/src/functions.ts +++ b/models/process/src/functions.ts @@ -185,6 +185,19 @@ export function defineFunctions (builder: Builder): void { process.function.All ) + builder.createDoc( + process.class.ProcessFunction, + core.space.Model, + { + of: core.class.ArrOf, + category: 'array', + label: process.string.AllMatchValue, + type: 'reduce', + editor: process.transformEditor.FilterEditor + }, + process.function.AllMatchValue + ) + builder.createDoc( process.class.ProcessFunction, core.space.Model, diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index a1179e8160..eb040fa7c1 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -388,6 +388,10 @@ export function createModel (builder: Builder): void { func: serverProcess.transform.FirstMatchValue }) + builder.mixin(process.function.AllMatchValue, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { + func: serverProcess.transform.AllMatchValue + }) + builder.mixin(process.function.Filter, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { func: serverProcess.transform.Filter }) diff --git a/plugins/process-assets/lang/cs.json b/plugins/process-assets/lang/cs.json index 33c159f0d3..715f5be61d 100644 --- a/plugins/process-assets/lang/cs.json +++ b/plugins/process-assets/lang/cs.json @@ -117,6 +117,7 @@ "ExecutionInitiator": "Iniciátor provedení", "ExecutionStarted": "Provedení spuštěno", "Filter": "Filtr", + "AllMatchValue": "Všechny odpovídající hodnoty", "FirstMatchValue": "První odpovídající hodnota", "ConfigLabel": "Konfigurace procesů", "ConfigDescription": "Definujte procesy pro automatizaci pracovních postupů a obchodních procesů.", @@ -197,4 +198,4 @@ "TooDeepTransitionRecursion": "Příliš hluboká rekurze přechodů", "ToDoAlreadyCompleted": "Akční položka již byla dokončena" } -} \ No newline at end of file +} diff --git a/plugins/process-assets/lang/de.json b/plugins/process-assets/lang/de.json index 33f6d9512c..d7c4ba82e3 100644 --- a/plugins/process-assets/lang/de.json +++ b/plugins/process-assets/lang/de.json @@ -117,6 +117,7 @@ "ExecutionInitiator": "Ausführungsinitiator", "ExecutionStarted": "Ausführung gestartet", "Filter": "Filter", + "AllMatchValue": "Alle passenden Werte", "FirstMatchValue": "Erster passender Wert", "ConfigLabel": "Prozesskonfiguration", "ConfigDescription": "Definieren Sie Prozesse, um Workflows und Geschäftsprozesse zu automatisieren.", diff --git a/plugins/process-assets/lang/en.json b/plugins/process-assets/lang/en.json index bccf7c8eeb..4c22b97054 100644 --- a/plugins/process-assets/lang/en.json +++ b/plugins/process-assets/lang/en.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Execution initiator", "ExecutionStarted": "Execution started", "Filter": "Filter", + "AllMatchValue": "All matching values", "FirstMatchValue": "First match value", "ConfigLabel": "Process configuration", "ConfigDescription": "Define processes to automate workflows and business processes.", diff --git a/plugins/process-assets/lang/es.json b/plugins/process-assets/lang/es.json index 1e378ef541..efc1eb50b0 100644 --- a/plugins/process-assets/lang/es.json +++ b/plugins/process-assets/lang/es.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Iniciador de Ejecución", "ExecutionStarted": "Ejecución Iniciada", "Filter": "Filtro", + "AllMatchValue": "Todos los valores coincidentes", "FirstMatchValue": "Primer valor coincidente", "ConfigLabel": "Configuración de procesos", "ConfigDescription": "Defina procesos para automatizar flujos de trabajo y procesos comerciales.", diff --git a/plugins/process-assets/lang/fr.json b/plugins/process-assets/lang/fr.json index 23ca3bacd7..54c238bdfb 100644 --- a/plugins/process-assets/lang/fr.json +++ b/plugins/process-assets/lang/fr.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Initiateur d'exécution", "ExecutionStarted": "Exécution démarrée", "Filter": "Filtrer", + "AllMatchValue": "Toutes les valeurs correspondantes", "FirstMatchValue": "Première valeur correspondante", "ConfigLabel": "Configuration des processus", "ConfigDescription": "Définissez des processus pour automatiser les flux de travail et les processus métier.", diff --git a/plugins/process-assets/lang/it.json b/plugins/process-assets/lang/it.json index ba760e1993..065536fa15 100644 --- a/plugins/process-assets/lang/it.json +++ b/plugins/process-assets/lang/it.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Iniziatore dell'esecuzione", "ExecutionStarted": "Esecuzione avviata", "Filter": "Filtro", + "AllMatchValue": "Tutti i valori corrispondenti", "FirstMatchValue": "Primo valore corrispondente", "ConfigLabel": "Configurazione del processo", "ConfigDescription": "Definire i processi per automatizzare i flussi di lavoro e i processi aziendali.", diff --git a/plugins/process-assets/lang/ja.json b/plugins/process-assets/lang/ja.json index 5764530c01..f73657ee90 100644 --- a/plugins/process-assets/lang/ja.json +++ b/plugins/process-assets/lang/ja.json @@ -123,6 +123,7 @@ "ExecutionInitiator": "実行の発起人", "ExecutionStarted": "実行が開始されました", "Filter": "フィルター", + "AllMatchValue": "一致するすべての値", "FirstMatchValue": "最初の一致する値", "ConfigLabel": "プロセス構成", "ConfigDescription": "ワークフローやビジネスプロセスを自動化するためのプロセスを定義します。", diff --git a/plugins/process-assets/lang/ko.json b/plugins/process-assets/lang/ko.json index b85b181871..c5143204b3 100644 --- a/plugins/process-assets/lang/ko.json +++ b/plugins/process-assets/lang/ko.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "실행 시작자", "ExecutionStarted": "실행 시작됨", "Filter": "필터", + "AllMatchValue": "모든 일치 값", "FirstMatchValue": "첫 일치 값", "ConfigLabel": "프로세스 구성", "ConfigDescription": "워크플로와 비즈니스 프로세스를 자동화할 프로세스를 정의합니다.", diff --git a/plugins/process-assets/lang/pl.json b/plugins/process-assets/lang/pl.json index 1c2916fd17..50a71e204d 100644 --- a/plugins/process-assets/lang/pl.json +++ b/plugins/process-assets/lang/pl.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Inicjator wykonania", "ExecutionStarted": "Wykonanie rozpoczęte", "Filter": "Filtr", + "AllMatchValue": "Wszystkie pasujące wartości", "FirstMatchValue": "Pierwsza pasująca wartość", "ConfigLabel": "Konfiguracja procesu", "ConfigDescription": "Definiuj procesy do automatyzacji organizacji zadań i procesów biznesowych.", diff --git a/plugins/process-assets/lang/pt-br.json b/plugins/process-assets/lang/pt-br.json index 9f50306818..470219d7c2 100644 --- a/plugins/process-assets/lang/pt-br.json +++ b/plugins/process-assets/lang/pt-br.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Iniciador de Execução", "ExecutionStarted": "Execução Iniciada", "Filter": "Filtrar", + "AllMatchValue": "Todos os valores correspondentes", "FirstMatchValue": "Primeiro Valor Correspondente", "ConfigLabel": "Configuração de processos", "ConfigDescription": "Defina processos para automatizar fluxos de trabalho e processos de negócios.", diff --git a/plugins/process-assets/lang/pt.json b/plugins/process-assets/lang/pt.json index de5c2dd6c2..f660e43e63 100644 --- a/plugins/process-assets/lang/pt.json +++ b/plugins/process-assets/lang/pt.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Iniciador de Execução", "ExecutionStarted": "Execução Iniciada", "Filter": "Filtrar", + "AllMatchValue": "Todos os valores correspondentes", "FirstMatchValue": "Primeiro Valor Correspondente", "ConfigLabel": "Configuração de processos", "ConfigDescription": "Defina processos para automatizar fluxos de trabalho e processos de negócios.", diff --git a/plugins/process-assets/lang/ru.json b/plugins/process-assets/lang/ru.json index 446fca4f13..1a80cf32ce 100644 --- a/plugins/process-assets/lang/ru.json +++ b/plugins/process-assets/lang/ru.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "Инициатор выполнения", "ExecutionStarted": "Выполнение начато", "Filter": "Фильтр", + "AllMatchValue": "Все подходящие значения", "FirstMatchValue": "Первое подходящее значение", "ConfigLabel": "Конфигурация процессов", "ConfigDescription": "Определяйте процессы для автоматизации рабочих процессов и бизнес-процессов.", diff --git a/plugins/process-assets/lang/tr.json b/plugins/process-assets/lang/tr.json index 437e325a76..bc2181f246 100644 --- a/plugins/process-assets/lang/tr.json +++ b/plugins/process-assets/lang/tr.json @@ -121,6 +121,7 @@ "ProcessFinished": "\"{process}\" süreci \"{state}\" durumunda tamamlandı", "NewProcessToDo": "Yeni süreç Eylem öğesi", "Filter": "Filtre", + "AllMatchValue": "Tüm eşleşen değerler", "FirstMatchValue": "İlk eşleşen değer", "ConfigLabel": "Süreç yapılandırması", "ConfigDescription": "İş akışlarını ve iş süreçlerini otomatikleştirmek için süreçler tanımlayın.", diff --git a/plugins/process-assets/lang/zh.json b/plugins/process-assets/lang/zh.json index 9c245cbbc8..3d6faf0406 100644 --- a/plugins/process-assets/lang/zh.json +++ b/plugins/process-assets/lang/zh.json @@ -124,6 +124,7 @@ "ExecutionInitiator": "执行发起者", "ExecutionStarted": "执行已启动", "Filter": "过滤", + "AllMatchValue": "所有匹配值", "FirstMatchValue": "第一个匹配值", "ConfigLabel": "流程配置", "ConfigDescription": "定义流程以自动化工作流和业务流程。", diff --git a/plugins/process-resources/src/plugin.ts b/plugins/process-resources/src/plugin.ts index 70d4c32262..d512dcc172 100644 --- a/plugins/process-resources/src/plugin.ts +++ b/plugins/process-resources/src/plugin.ts @@ -157,6 +157,7 @@ export default mergeIds(processId, process, { Split: '' as IntlString, Cut: '' as IntlString, Filter: '' as IntlString, + AllMatchValue: '' as IntlString, FirstMatchValue: '' as IntlString, FirstValue: '' as IntlString, LastValue: '' as IntlString, diff --git a/plugins/process/src/index.ts b/plugins/process/src/index.ts index 52015fef0a..9568ea8602 100644 --- a/plugins/process/src/index.ts +++ b/plugins/process/src/index.ts @@ -353,6 +353,7 @@ export default plugin(processId, { OnEvent: '' as Asset }, function: { + AllMatchValue: '' as Ref, FirstMatchValue: '' as Ref, Filter: '' as Ref, FirstValue: '' as Ref, diff --git a/server-plugins/process-resources/src/index.ts b/server-plugins/process-resources/src/index.ts index 2f3ca49fbd..4791dec4d0 100644 --- a/server-plugins/process-resources/src/index.ts +++ b/server-plugins/process-resources/src/index.ts @@ -85,6 +85,7 @@ import { FieldChangedRollback, ToDoCancellRollback, ToDoCloseRollback } from './ import { Absolute, Add, + AllMatchValue, All, Append, Ceil, @@ -819,6 +820,7 @@ export default async () => ({ EmptyValue, ExecutionInitiator, ExecutionStarted, + AllMatchValue, FirstMatchValue, Filter, StringFromNumber, diff --git a/server-plugins/process-resources/src/transform.ts b/server-plugins/process-resources/src/transform.ts index 66e412efce..d863c7b53c 100644 --- a/server-plugins/process-resources/src/transform.ts +++ b/server-plugins/process-resources/src/transform.ts @@ -63,6 +63,26 @@ export async function FirstMatchValue ( } } +export async function AllMatchValue ( + value: any[], + props: Record, + control: ProcessControl +): Promise { + if (value == null) { + return + } + if (!Array.isArray(value)) return value + const { _class, ...otherProps } = props + if (_class == null) return + if (value.length === 0) return + if (typeof value[0] === 'string') { + const docs = await control.client.findAll(_class, { _id: { $in: value } }) + return matchQuery(docs, otherProps, core.class.Doc, control.client.getHierarchy(), true).map((p) => p._id) + } else if (typeof value[0] === 'object') { + return matchQuery(value, otherProps, core.class.Doc, control.client.getHierarchy(), true) + } +} + // #endregion // #region Array diff --git a/server-plugins/process/src/index.ts b/server-plugins/process/src/index.ts index b3198c791c..d5b4f8c25b 100644 --- a/server-plugins/process/src/index.ts +++ b/server-plugins/process/src/index.ts @@ -115,6 +115,7 @@ export default plugin(serverProcessId, { EmptyValue: '' as Resource, EmptyArray: '' as Resource, Filter: '' as Resource, + AllMatchValue: '' as Resource, FirstMatchValue: '' as Resource, ExecutionInitiator: '' as Resource, ExecutionStarted: '' as Resource,