@acorex-platform/module-workflow-management-client 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-workflow-management-client-acorex-platform-module-workflow-management-client-B_Sl7G2v.mjs +4990 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-acorex-platform-module-workflow-management-client-B_Sl7G2v.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-column.component-BPa0Sh6Z.mjs +57 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-column.component-BPa0Sh6Z.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-edit.component-DuYGXzAL.mjs +482 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-edit.component-DuYGXzAL.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-contracts.mjs +163 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs +127 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs +142 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-C8nsbDAw.mjs +142 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-C8nsbDAw.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-CttfExOC.mjs +417 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-CttfExOC.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-DKZTLui4.mjs +1329 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-index-DKZTLui4.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-save-workflow-definition-activities.command-spFF77AO.mjs +60 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-save-workflow-definition-activities.command-spFF77AO.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-activity-instance-rows.utils-CMVZYS4y.mjs +172 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-activity-instance-rows.utils-CMVZYS4y.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-column.component-D0E2zjIA.mjs +81 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-column.component-D0E2zjIA.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-edit.component-CVTeOv-q.mjs +538 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-edit.component-CVTeOv-q.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-live-dashboard.queries--9NtYkau.mjs +218 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-live-dashboard.queries--9NtYkau.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-popup.component-BWOyivC5.mjs +588 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-popup.component-BWOyivC5.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs +33 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs +227 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-task-popover.component-Cg4gODGo.mjs +300 -0
- package/fesm2022/acorex-platform-module-workflow-management-client-workflow-task-popover.component-Cg4gODGo.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workflow-management-client.mjs +2 -0
- package/fesm2022/acorex-platform-module-workflow-management-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-workflow-management-client-contracts.d.ts +341 -0
- package/types/acorex-platform-module-workflow-management-client.d.ts +1026 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
const AXPWorkflowManagementMenuKeys = {
|
|
2
|
+
Root: 'workflow-management:menu',
|
|
3
|
+
Workflow: 'workflow-management:workflow',
|
|
4
|
+
WorkflowDefinitions: 'workflow-management:workflow-definitions',
|
|
5
|
+
WorkflowInstances: 'workflow-management:workflow-instances',
|
|
6
|
+
Activities: 'workflow-management:activities',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Administration capabilities used by this module.
|
|
11
|
+
* Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
|
|
12
|
+
*/
|
|
13
|
+
const AXPAdministrationPermissionKeys = {
|
|
14
|
+
Access: 'Administration:Permission:Access',
|
|
15
|
+
MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',
|
|
16
|
+
ManageSessions: 'Administration:Permission:ManageSessions',
|
|
17
|
+
MaintainPolicies: 'Administration:Permission:MaintainPolicies',
|
|
18
|
+
ViewIntegrations: 'Administration:Permission:ViewIntegrations',
|
|
19
|
+
MaintainConnections: 'Administration:Permission:MaintainConnections',
|
|
20
|
+
MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',
|
|
21
|
+
ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',
|
|
22
|
+
ViewRules: 'Administration:Permission:ViewRules',
|
|
23
|
+
MaintainRules: 'Administration:Permission:MaintainRules',
|
|
24
|
+
ManageRuleActions: 'Administration:Permission:ManageRuleActions',
|
|
25
|
+
MaintainAi: 'Administration:Permission:MaintainAi',
|
|
26
|
+
UseAiAssist: 'Administration:Permission:UseAiAssist',
|
|
27
|
+
MaintainDashboards: 'Administration:Permission:MaintainDashboards',
|
|
28
|
+
ViewJobs: 'Administration:Permission:ViewJobs',
|
|
29
|
+
ManageJobActions: 'Administration:Permission:ManageJobActions',
|
|
30
|
+
ViewObservability: 'Administration:Permission:ViewObservability',
|
|
31
|
+
MaintainObservability: 'Administration:Permission:MaintainObservability',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated Prefer {@link AXPAdministrationPermissionKeys}.
|
|
35
|
+
* Legacy nested shape kept so existing imports compile during migration.
|
|
36
|
+
*/
|
|
37
|
+
const AXMPermissionsKeys = {
|
|
38
|
+
WorkflowManagement: {
|
|
39
|
+
Management: AXPAdministrationPermissionKeys.MaintainWorkflows,
|
|
40
|
+
},
|
|
41
|
+
WorkflowInstance: {
|
|
42
|
+
ReassignToSelf: AXPAdministrationPermissionKeys.ManageWorkflowActions,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const config = {
|
|
47
|
+
i18n: 'workflow-management',
|
|
48
|
+
module: 'WorkflowManagement',
|
|
49
|
+
};
|
|
50
|
+
const RootConfig = {
|
|
51
|
+
config,
|
|
52
|
+
module: {
|
|
53
|
+
route: 'workflow-management',
|
|
54
|
+
name: config.module,
|
|
55
|
+
title: '@workflow-management:module.title',
|
|
56
|
+
icon: 'fa-light fa-diagram-project',
|
|
57
|
+
},
|
|
58
|
+
/** Task-board suspend activity type ids (match activity definition keys). */
|
|
59
|
+
activities: {
|
|
60
|
+
humanTask: 'workflow-activity:human-task',
|
|
61
|
+
cartable: 'workflow-activity:cartable',
|
|
62
|
+
},
|
|
63
|
+
entities: {
|
|
64
|
+
workflowDefinition: {
|
|
65
|
+
name: 'WorkflowDefinition',
|
|
66
|
+
fullName: `${config.module}.WorkflowDefinition`,
|
|
67
|
+
title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',
|
|
68
|
+
titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',
|
|
69
|
+
icon: 'fa-light fa-diagram-project',
|
|
70
|
+
},
|
|
71
|
+
workflowInstance: {
|
|
72
|
+
name: 'WorkflowInstance',
|
|
73
|
+
fullName: `${config.module}.WorkflowInstance`,
|
|
74
|
+
title: '@workflow-management:workflow-instances.entities.workflow-instance.title',
|
|
75
|
+
titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',
|
|
76
|
+
icon: 'fa-light fa-play-circle',
|
|
77
|
+
},
|
|
78
|
+
activityDefinition: {
|
|
79
|
+
name: 'ActivityDefinition',
|
|
80
|
+
fullName: `${config.module}.ActivityDefinition`,
|
|
81
|
+
title: '@workflow-management:activities.entities.activity-definition.title',
|
|
82
|
+
titlePlural: '@workflow-management:activities.entities.activity-definition.plural',
|
|
83
|
+
icon: 'fa-light fa-puzzle-piece',
|
|
84
|
+
},
|
|
85
|
+
automation: {
|
|
86
|
+
name: 'Automation',
|
|
87
|
+
fullName: `${config.module}.Automation`,
|
|
88
|
+
title: '@workflow-management:automations.entities.automation.title',
|
|
89
|
+
titlePlural: '@workflow-management:automations.entities.automation.plural',
|
|
90
|
+
icon: 'fa-light fa-bolt',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* Live dashboard queries bound to base DashboardManagement chart/KPI widgets.
|
|
95
|
+
* Keys: `{module}:Dashboard:{Name}`.
|
|
96
|
+
*/
|
|
97
|
+
queries: {
|
|
98
|
+
dashboard: {
|
|
99
|
+
definitionsKpi: `${config.module}:Dashboard:DefinitionsKpi`,
|
|
100
|
+
activitiesKpi: `${config.module}:Dashboard:ActivitiesKpi`,
|
|
101
|
+
definitionsByStatusBar: `${config.module}:Dashboard:DefinitionsByStatusBar`,
|
|
102
|
+
activitiesByCategoryDonut: `${config.module}:Dashboard:ActivitiesByCategoryDonut`,
|
|
103
|
+
publishedDefinitionsGauge: `${config.module}:Dashboard:PublishedDefinitionsGauge`,
|
|
104
|
+
/** @deprecated Prefer {@link runningInstancesKpi} for runtime ops dashboards. */
|
|
105
|
+
workflowDefinitionsKpi: `${config.module}:Dashboard:WorkflowDefinitionsKpi`,
|
|
106
|
+
/** @deprecated Prefer {@link instancesBySubStatusDonut} for runtime ops dashboards. */
|
|
107
|
+
workflowsByStatusBar: `${config.module}:Dashboard:WorkflowsByStatusBar`,
|
|
108
|
+
runningInstancesKpi: `${config.module}:Dashboard:RunningInstancesKpi`,
|
|
109
|
+
faultedInstancesKpi: `${config.module}:Dashboard:FaultedInstancesKpi`,
|
|
110
|
+
awaitingActionInstancesKpi: `${config.module}:Dashboard:AwaitingActionInstancesKpi`,
|
|
111
|
+
startedTodayInstancesKpi: `${config.module}:Dashboard:StartedTodayInstancesKpi`,
|
|
112
|
+
completedTodayInstancesKpi: `${config.module}:Dashboard:CompletedTodayInstancesKpi`,
|
|
113
|
+
avgRunningAgeHoursKpi: `${config.module}:Dashboard:AvgRunningAgeHoursKpi`,
|
|
114
|
+
instancesBySubStatusDonut: `${config.module}:Dashboard:InstancesBySubStatusDonut`,
|
|
115
|
+
instancesByDefinitionBar: `${config.module}:Dashboard:InstancesByDefinitionBar`,
|
|
116
|
+
instancesThroughputLine: `${config.module}:Dashboard:InstancesThroughputLine`,
|
|
117
|
+
instancesByCurrentActivityBar: `${config.module}:Dashboard:InstancesByCurrentActivityBar`,
|
|
118
|
+
instancesFaultHeatmap: `${config.module}:Dashboard:InstancesFaultHeatmap`,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** Component key for the Workflow Instance Activity instances tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */
|
|
124
|
+
const WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY = 'workflow-instance-activity-instances-page';
|
|
125
|
+
|
|
126
|
+
/** Registry key for the workflow definition Activities custom page (linear graph editor). */
|
|
127
|
+
const WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY = 'workflow-definition-activities-page';
|
|
128
|
+
|
|
129
|
+
//#region ---- Workflow task context (reserved keys) ----
|
|
130
|
+
/**
|
|
131
|
+
* Human-task / cartable `context` payload: technical ids at the root; display metadata under reserved keys.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```json
|
|
135
|
+
* {
|
|
136
|
+
* "leaveRequestId": "{{ variables.leaveRequestId }}",
|
|
137
|
+
* "_taskI18n": {
|
|
138
|
+
* "employeeDisplayName": "{{ variables.employeeDisplayName }}",
|
|
139
|
+
* "leaveTypeTitle": "{{ variables.leaveTypeTitle }}"
|
|
140
|
+
* },
|
|
141
|
+
* "_taskTitleParts": [
|
|
142
|
+
* "{{ variables.employeeDisplayName }}",
|
|
143
|
+
* "{{ variables.leaveTypeTitle }}"
|
|
144
|
+
* ]
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
/** Interpolation map for `@scope:key` task title and description strings. */
|
|
149
|
+
const AXP_WORKFLOW_TASK_CONTEXT_I18N_KEY = '_taskI18n';
|
|
150
|
+
/** Ordered segments joined with " — " when bookmark title is still a generic activity label. */
|
|
151
|
+
const AXP_WORKFLOW_TASK_CONTEXT_TITLE_PARTS_KEY = '_taskTitleParts';
|
|
152
|
+
//#endregion
|
|
153
|
+
|
|
154
|
+
//#endregion
|
|
155
|
+
|
|
156
|
+
//#region ---- Contracts barrel ----
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Generated bundle index. Do not edit.
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
export { AXMPermissionsKeys, AXPAdministrationPermissionKeys, AXPWorkflowManagementMenuKeys, AXP_WORKFLOW_TASK_CONTEXT_I18N_KEY, AXP_WORKFLOW_TASK_CONTEXT_TITLE_PARTS_KEY, RootConfig, WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY, WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY };
|
|
163
|
+
//# sourceMappingURL=acorex-platform-module-workflow-management-client-contracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workflow-management-client-contracts.mjs","sources":["../../../../libs/modules/workflow-management/contracts/src/menu.keys.ts","../../../../libs/modules/workflow-management/contracts/src/permission.keys.ts","../../../../libs/modules/workflow-management/contracts/src/root-config.ts","../../../../libs/modules/workflow-management/contracts/src/WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/workflow-management/contracts/src/WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/workflow-management/contracts/src/workflow-task-context.constants.ts","../../../../libs/modules/workflow-management/contracts/src/entities/automation/automation.types.ts","../../../../libs/modules/workflow-management/contracts/src/index.ts","../../../../libs/modules/workflow-management/contracts/src/acorex-platform-module-workflow-management-client-contracts.ts"],"sourcesContent":["export const AXPWorkflowManagementMenuKeys = {\n Root: 'workflow-management:menu',\n Workflow: 'workflow-management:workflow',\n WorkflowDefinitions: 'workflow-management:workflow-definitions',\n WorkflowInstances: 'workflow-management:workflow-instances',\n Activities: 'workflow-management:activities',\n} as const;\n\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n WorkflowManagement: {\n Management: AXPAdministrationPermissionKeys.MaintainWorkflows,\n },\n WorkflowInstance: {\n ReassignToSelf: AXPAdministrationPermissionKeys.ManageWorkflowActions,\n },\n} as const;\n","const config = {\n i18n: 'workflow-management',\n module: 'WorkflowManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'workflow-management',\n name: config.module,\n title: '@workflow-management:module.title',\n icon: 'fa-light fa-diagram-project',\n },\n /** Task-board suspend activity type ids (match activity definition keys). */\n activities: {\n humanTask: 'workflow-activity:human-task',\n cartable: 'workflow-activity:cartable',\n },\n entities: {\n workflowDefinition: {\n name: 'WorkflowDefinition',\n fullName: `${config.module}.WorkflowDefinition`,\n title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',\n titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',\n icon: 'fa-light fa-diagram-project',\n },\n workflowInstance: {\n name: 'WorkflowInstance',\n fullName: `${config.module}.WorkflowInstance`,\n title: '@workflow-management:workflow-instances.entities.workflow-instance.title',\n titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',\n icon: 'fa-light fa-play-circle',\n },\n activityDefinition: {\n name: 'ActivityDefinition',\n fullName: `${config.module}.ActivityDefinition`,\n title: '@workflow-management:activities.entities.activity-definition.title',\n titlePlural: '@workflow-management:activities.entities.activity-definition.plural',\n icon: 'fa-light fa-puzzle-piece',\n },\n automation: {\n name: 'Automation',\n fullName: `${config.module}.Automation`,\n title: '@workflow-management:automations.entities.automation.title',\n titlePlural: '@workflow-management:automations.entities.automation.plural',\n icon: 'fa-light fa-bolt',\n },\n },\n /**\n * Live dashboard queries bound to base DashboardManagement chart/KPI widgets.\n * Keys: `{module}:Dashboard:{Name}`.\n */\n queries: {\n dashboard: {\n definitionsKpi: `${config.module}:Dashboard:DefinitionsKpi`,\n activitiesKpi: `${config.module}:Dashboard:ActivitiesKpi`,\n definitionsByStatusBar: `${config.module}:Dashboard:DefinitionsByStatusBar`,\n activitiesByCategoryDonut: `${config.module}:Dashboard:ActivitiesByCategoryDonut`,\n publishedDefinitionsGauge: `${config.module}:Dashboard:PublishedDefinitionsGauge`,\n /** @deprecated Prefer {@link runningInstancesKpi} for runtime ops dashboards. */\n workflowDefinitionsKpi: `${config.module}:Dashboard:WorkflowDefinitionsKpi`,\n /** @deprecated Prefer {@link instancesBySubStatusDonut} for runtime ops dashboards. */\n workflowsByStatusBar: `${config.module}:Dashboard:WorkflowsByStatusBar`,\n runningInstancesKpi: `${config.module}:Dashboard:RunningInstancesKpi`,\n faultedInstancesKpi: `${config.module}:Dashboard:FaultedInstancesKpi`,\n awaitingActionInstancesKpi: `${config.module}:Dashboard:AwaitingActionInstancesKpi`,\n startedTodayInstancesKpi: `${config.module}:Dashboard:StartedTodayInstancesKpi`,\n completedTodayInstancesKpi: `${config.module}:Dashboard:CompletedTodayInstancesKpi`,\n avgRunningAgeHoursKpi: `${config.module}:Dashboard:AvgRunningAgeHoursKpi`,\n instancesBySubStatusDonut: `${config.module}:Dashboard:InstancesBySubStatusDonut`,\n instancesByDefinitionBar: `${config.module}:Dashboard:InstancesByDefinitionBar`,\n instancesThroughputLine: `${config.module}:Dashboard:InstancesThroughputLine`,\n instancesByCurrentActivityBar: `${config.module}:Dashboard:InstancesByCurrentActivityBar`,\n instancesFaultHeatmap: `${config.module}:Dashboard:InstancesFaultHeatmap`,\n },\n },\n} as const;\n","/** Component key for the Workflow Instance Activity instances tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY =\n 'workflow-instance-activity-instances-page';\n","/** Registry key for the workflow definition Activities custom page (linear graph editor). */\nexport const WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY = 'workflow-definition-activities-page';\n","//#region ---- Workflow task context (reserved keys) ----\n\n/**\n * Human-task / cartable `context` payload: technical ids at the root; display metadata under reserved keys.\n *\n * @example\n * ```json\n * {\n * \"leaveRequestId\": \"{{ variables.leaveRequestId }}\",\n * \"_taskI18n\": {\n * \"employeeDisplayName\": \"{{ variables.employeeDisplayName }}\",\n * \"leaveTypeTitle\": \"{{ variables.leaveTypeTitle }}\"\n * },\n * \"_taskTitleParts\": [\n * \"{{ variables.employeeDisplayName }}\",\n * \"{{ variables.leaveTypeTitle }}\"\n * ]\n * }\n * ```\n */\n\n/** Interpolation map for `@scope:key` task title and description strings. */\nexport const AXP_WORKFLOW_TASK_CONTEXT_I18N_KEY = '_taskI18n';\n\n/** Ordered segments joined with \" — \" when bookmark title is still a generic activity label. */\nexport const AXP_WORKFLOW_TASK_CONTEXT_TITLE_PARTS_KEY = '_taskTitleParts';\n\n//#endregion\n","import type { AXPFilterClause } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n//#region ---- Imports ----\n//#endregion\n\n//#region ---- Automation Model ----\n\n/**\n * Reusable automation entity model.\n * refType + refId reference any parent entity (e.g. AssessmentManagement.Questionnaire, refId = questionnaire id).\n */\nexport interface AXMWorkflowManagementAutomationEntityModel extends AXPEntityModel<string> {\n /** Entity type of the parent record (e.g. \"AssessmentManagement.Questionnaire\"). */\n refType: string;\n /** Parent record id. */\n refId: string;\n name?: string;\n title?: string;\n description?: string;\n condition: AXPFilterClause;\n /** Activity/command key and parameters (from activity-command-configurator). */\n command: { key: string; title?: string; payload?: Record<string, unknown> };\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root-config';\n\nexport * from './WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY';\nexport * from './WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY';\n\nexport * from './workflow-task-context.constants';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { AXPPropertyViewerService, buildPropertyViewerTabsFromProperties, buildPropertyViewerInitialContextFromProperties } from '@acorex-platform/framework-client/layout/components';
|
|
2
|
+
import { mapAXPPropertyToWidgetProperty } from '@acorex-platform/framework-client/layout/widget-core';
|
|
3
|
+
import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
4
|
+
import { AXPWorkflowDefinitionService } from '@acorex-platform/framework-client/workflow';
|
|
5
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
6
|
+
import * as i0 from '@angular/core';
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { cloneDeep } from 'lodash';
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
/**
|
|
12
|
+
* Opens the property viewer when the workflow definition declares `inputs`, then runs
|
|
13
|
+
* `WorkflowManagement.WorkflowDefinition:Execute` with the collected variables.
|
|
14
|
+
*/
|
|
15
|
+
class ExecuteWorkflowWithInputCommand {
|
|
16
|
+
constructor() {
|
|
17
|
+
//#region ---- Services & Dependencies ----
|
|
18
|
+
this.workflowDefinitionService = inject(AXPWorkflowDefinitionService);
|
|
19
|
+
this.propertyViewerService = inject(AXPPropertyViewerService);
|
|
20
|
+
this.commandService = inject(AXPCommandService);
|
|
21
|
+
this.translationService = inject(AXTranslationService);
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region ---- Command Implementation ----
|
|
25
|
+
async execute(xx) {
|
|
26
|
+
try {
|
|
27
|
+
const raw = xx ?? {};
|
|
28
|
+
const opts = (raw['options'] ?? xx);
|
|
29
|
+
const workflowId = String(opts['workflowId'] ?? '');
|
|
30
|
+
if (!workflowId) {
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
message: {
|
|
34
|
+
text: (await this.translationService.translateAsync('@general:messages.invalid-data')) || 'Invalid data',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const definition = await this.workflowDefinitionService.getWorkflowByName(workflowId);
|
|
39
|
+
if (!definition) {
|
|
40
|
+
const notFound = (await this.translationService.translateAsync('@workflow-management:workflow-definitions.actions.execute.workflow-not-found', { params: { name: workflowId } })) || `Workflow "${workflowId}" was not found.`;
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
message: { text: notFound },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const inputProps = (definition.inputs ?? []);
|
|
47
|
+
let initialInput = {};
|
|
48
|
+
if (inputProps.length > 0) {
|
|
49
|
+
const dialogResult = await this.openInputDialog(inputProps, this.translationService.resolve(definition.title) ?? workflowId);
|
|
50
|
+
if (dialogResult === 'cancelled') {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
message: {
|
|
54
|
+
text: (await this.translationService.translateAsync('@general:actions.cancel.title')) || 'Cancelled',
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
initialInput = dialogResult;
|
|
59
|
+
}
|
|
60
|
+
const executed = await this.commandService.execute('WorkflowManagement.WorkflowDefinition:Execute', {
|
|
61
|
+
workflowId,
|
|
62
|
+
input: initialInput,
|
|
63
|
+
});
|
|
64
|
+
if (!executed) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
message: {
|
|
68
|
+
text: (await this.translationService.translateAsync('@general:messages.entity.command-no-result')) ||
|
|
69
|
+
'Command returned no result',
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return executed;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
77
|
+
return { success: false, message: { text: message } };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async openInputDialog(inputProps, workflowLabel) {
|
|
81
|
+
const group = { name: 'workflow-inputs', title: 'Input', order: 0 };
|
|
82
|
+
const widgetProps = inputProps.map((p, index) => mapAXPPropertyToWidgetProperty(p, {
|
|
83
|
+
group,
|
|
84
|
+
order: index,
|
|
85
|
+
valuePathPrefix: 'input',
|
|
86
|
+
resolveTitle: (prop) => typeof prop.title === 'string' ? prop.title : (this.translationService.resolve(prop.title) ?? prop.name),
|
|
87
|
+
resolveDescription: (prop) => prop.description === undefined
|
|
88
|
+
? undefined
|
|
89
|
+
: typeof prop.description === 'string'
|
|
90
|
+
? prop.description
|
|
91
|
+
: this.translationService.resolve(prop.description),
|
|
92
|
+
}));
|
|
93
|
+
const tabs = buildPropertyViewerTabsFromProperties(widgetProps);
|
|
94
|
+
const context = buildPropertyViewerInitialContextFromProperties(widgetProps, { input: {} });
|
|
95
|
+
const titleKey = '@workflow-management:workflow-definitions.actions.execute.input-dialog.title';
|
|
96
|
+
const rawTitle = await this.translationService.translateAsync(titleKey);
|
|
97
|
+
const title = rawTitle && rawTitle !== titleKey ? rawTitle : `Input — ${workflowLabel}`;
|
|
98
|
+
const result = (await this.propertyViewerService
|
|
99
|
+
.create()
|
|
100
|
+
.dialog((d) => {
|
|
101
|
+
d.setTitle(title)
|
|
102
|
+
.setSize('md')
|
|
103
|
+
.setCloseButton(true)
|
|
104
|
+
.setMode('advanced')
|
|
105
|
+
.setTabs(tabs)
|
|
106
|
+
.setContext(cloneDeep(context));
|
|
107
|
+
})
|
|
108
|
+
.show());
|
|
109
|
+
if (!result || result.values === undefined || result.values === null) {
|
|
110
|
+
return 'cancelled';
|
|
111
|
+
}
|
|
112
|
+
const values = result.values;
|
|
113
|
+
const inputBag = values['input'];
|
|
114
|
+
if (inputBag !== undefined && typeof inputBag === 'object' && !Array.isArray(inputBag)) {
|
|
115
|
+
return { ...inputBag };
|
|
116
|
+
}
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowWithInputCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
120
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowWithInputCommand }); }
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowWithInputCommand, decorators: [{
|
|
123
|
+
type: Injectable
|
|
124
|
+
}] });
|
|
125
|
+
|
|
126
|
+
export { ExecuteWorkflowWithInputCommand };
|
|
127
|
+
//# sourceMappingURL=acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs","sources":["../../../../libs/modules/workflow-management/client/src/lib/features/entities/workflow-definition/commands/execute-workflow-with-input.command.ts"],"sourcesContent":["\n\nimport { AXPWidgetPropertyGroup } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult, AXPProperty } from '@acorex-platform/framework-shared/core';\nimport {\n AXPPropertyViewerResult,\n AXPPropertyViewerService,\n buildPropertyViewerInitialContextFromProperties,\n buildPropertyViewerTabsFromProperties,\n} from '@acorex-platform/framework-client/layout/components';\nimport { mapAXPPropertyToWidgetProperty } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWorkflowDefinitionService } from '@acorex-platform/framework-client/workflow';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash';\n\nimport type { ExecuteWorkflowInput, ExecuteWorkflowOutput } from './execute-workflow.command';\n\n//#region ---- Types ----\n\n/**\n * Invoked from entity list actions. Resolves {@link ExecuteWorkflowInput.workflowId} from\n * `options` or the root payload; optional `input` from options is ignored until\n * the property viewer collects values.\n */\nexport interface ExecuteWorkflowWithInputInvocation {\n workflowId: string;\n}\n\n//#endregion\n\n/**\n * Opens the property viewer when the workflow definition declares `inputs`, then runs\n * `WorkflowManagement.WorkflowDefinition:Execute` with the collected variables.\n */\n@Injectable()\nexport class ExecuteWorkflowWithInputCommand implements AXPCommand<\n ExecuteWorkflowWithInputInvocation,\n ExecuteWorkflowOutput\n> {\n //#region ---- Services & Dependencies ----\n\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n private readonly commandService = inject(AXPCommandService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(xx: unknown): AXPCommandExecuteResultPromise<ExecuteWorkflowOutput> {\n try {\n const raw = (xx as Record<string, unknown>) ?? {};\n const opts = (raw['options'] ?? xx) as Record<string, unknown>;\n const workflowId = String(opts['workflowId'] ?? '');\n if (!workflowId) {\n return {\n success: false,\n message: {\n text: (await this.translationService.translateAsync('@general:messages.invalid-data')) || 'Invalid data',\n },\n };\n }\n\n const definition = await this.workflowDefinitionService.getWorkflowByName(workflowId);\n if (!definition) {\n const notFound =\n (await this.translationService.translateAsync(\n '@workflow-management:workflow-definitions.actions.execute.workflow-not-found',\n { params: { name: workflowId } },\n )) || `Workflow \"${workflowId}\" was not found.`;\n return {\n success: false,\n message: { text: notFound },\n };\n }\n\n const inputProps = (definition.inputs ?? []) as AXPProperty[];\n let initialInput: Record<string, unknown> = {};\n\n if (inputProps.length > 0) {\n const dialogResult = await this.openInputDialog(\n inputProps,\n this.translationService.resolve(definition.title) ?? workflowId,\n );\n if (dialogResult === 'cancelled') {\n return {\n success: false,\n message: {\n text: (await this.translationService.translateAsync('@general:actions.cancel.title')) || 'Cancelled',\n },\n };\n }\n initialInput = dialogResult;\n }\n\n const executed = await this.commandService.execute<ExecuteWorkflowInput, ExecuteWorkflowOutput>(\n 'WorkflowManagement.WorkflowDefinition:Execute',\n {\n workflowId,\n input: initialInput,\n },\n );\n if (!executed) {\n return {\n success: false,\n message: {\n text:\n (await this.translationService.translateAsync('@general:messages.entity.command-no-result')) ||\n 'Command returned no result',\n },\n };\n }\n return executed;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, message: { text: message } };\n }\n }\n\n private async openInputDialog(\n inputProps: AXPProperty[],\n workflowLabel: string,\n ): Promise<Record<string, unknown> | 'cancelled'> {\n const group: AXPWidgetPropertyGroup = { name: 'workflow-inputs', title: 'Input', order: 0 };\n const widgetProps = inputProps.map((p, index) =>\n mapAXPPropertyToWidgetProperty(p, {\n group,\n order: index,\n valuePathPrefix: 'input',\n resolveTitle: (prop) =>\n typeof prop.title === 'string' ? prop.title : (this.translationService.resolve(prop.title) ?? prop.name),\n resolveDescription: (prop) =>\n prop.description === undefined\n ? undefined\n : typeof prop.description === 'string'\n ? prop.description\n : this.translationService.resolve(prop.description),\n }),\n );\n\n const tabs = buildPropertyViewerTabsFromProperties(widgetProps);\n const context = buildPropertyViewerInitialContextFromProperties(widgetProps, { input: {} } as Record<\n string,\n unknown\n >);\n const titleKey = '@workflow-management:workflow-definitions.actions.execute.input-dialog.title';\n const rawTitle = await this.translationService.translateAsync(titleKey);\n const title = rawTitle && rawTitle !== titleKey ? rawTitle : `Input — ${workflowLabel}`;\n\n const result = (await this.propertyViewerService\n .create()\n .dialog<AXPPropertyViewerResult | null>((d) => {\n d.setTitle(title)\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(tabs)\n .setContext(cloneDeep(context));\n })\n .show()) as AXPPropertyViewerResult | null;\n\n if (!result || result.values === undefined || result.values === null) {\n return 'cancelled';\n }\n\n const values = result.values as Record<string, unknown>;\n const inputBag = values['input'];\n if (inputBag !== undefined && typeof inputBag === 'object' && !Array.isArray(inputBag)) {\n return { ...(inputBag as Record<string, unknown>) };\n }\n return {};\n }\n\n //#endregion\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { AXPWorkflowManager } from '@acorex-platform/framework-client/workflow';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { inject, Injectable } from '@angular/core';
|
|
4
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
/**
|
|
8
|
+
* Execute Workflow Command
|
|
9
|
+
*
|
|
10
|
+
* Starts and manages workflow execution from entity list.
|
|
11
|
+
* Handles the complete workflow lifecycle including frontend/backend activities.
|
|
12
|
+
*/
|
|
13
|
+
class ExecuteWorkflowCommand {
|
|
14
|
+
constructor() {
|
|
15
|
+
//#region ---- Services ----
|
|
16
|
+
this.workflowManager = inject(AXPWorkflowManager);
|
|
17
|
+
this.toastService = inject(AXToastService);
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region ---- Command Implementation ----
|
|
21
|
+
async execute(xx) {
|
|
22
|
+
try {
|
|
23
|
+
// Extract input from command context (entity actions pass options via options)
|
|
24
|
+
const input = (xx?.options || xx);
|
|
25
|
+
console.log(`[WorkflowManagement] 🚀 ExecuteWorkflowCommand: Starting workflow '${input.workflowId}'`, {
|
|
26
|
+
workflowId: input.workflowId,
|
|
27
|
+
input: input.input,
|
|
28
|
+
context: xx,
|
|
29
|
+
});
|
|
30
|
+
// Start workflow execution
|
|
31
|
+
// This uses the workflow engine which now queries definitions by name field
|
|
32
|
+
const result = await this.workflowManager.start(input.workflowId, input.input || {});
|
|
33
|
+
console.log(`[WorkflowManagement] 📊 Workflow start result:`, {
|
|
34
|
+
success: result.success,
|
|
35
|
+
instanceId: result.instanceId,
|
|
36
|
+
error: result.error,
|
|
37
|
+
stateStatus: result.state?.status,
|
|
38
|
+
stateActivityOutputs: result.state?.activityOutputs,
|
|
39
|
+
});
|
|
40
|
+
if (!result.success) {
|
|
41
|
+
console.error(`[WorkflowManagement] ❌ Failed to start workflow '${input.workflowId}':`, result.error);
|
|
42
|
+
this.toastService.show({
|
|
43
|
+
color: 'danger',
|
|
44
|
+
title: 'Workflow Execution Failed',
|
|
45
|
+
content: result.error || 'Unknown error',
|
|
46
|
+
closeButton: true,
|
|
47
|
+
timeOut: 5000,
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
message: { details: {
|
|
52
|
+
instanceId: result.instanceId || '',
|
|
53
|
+
output: null,
|
|
54
|
+
},
|
|
55
|
+
text: result.error || 'Unknown error'
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
console.log(`[WorkflowManagement] ✅ Workflow '${input.workflowId}' started successfully. Instance ID: ${result.instanceId}`);
|
|
60
|
+
// Handle workflow execution loop
|
|
61
|
+
// let currentResult = result;
|
|
62
|
+
// let taskCount = 0;
|
|
63
|
+
// while (currentResult.nextTask) {
|
|
64
|
+
// taskCount++;
|
|
65
|
+
// const task = currentResult.nextTask;
|
|
66
|
+
// console.log(`[ExecuteWorkflowCommand] 🔄 Task ${taskCount}: Executing frontend task: ${task.activityType}`, task);
|
|
67
|
+
// // Execute frontend task
|
|
68
|
+
// console.log(`[ExecuteWorkflowCommand] ⚙️ Calling workflowManager.execute...`);
|
|
69
|
+
// const executionResult = await this.workflowManager.execute(task);
|
|
70
|
+
// console.log(`[ExecuteWorkflowCommand] ✅ Task executed:`, {
|
|
71
|
+
// output: executionResult.output,
|
|
72
|
+
// outcome: executionResult.outcome,
|
|
73
|
+
// });
|
|
74
|
+
// const { output, outcome } = executionResult;
|
|
75
|
+
// // Complete task and get next
|
|
76
|
+
// currentResult = await this.workflowManager.complete(
|
|
77
|
+
// currentResult.instanceId!,
|
|
78
|
+
// task,
|
|
79
|
+
// outcome,
|
|
80
|
+
// output
|
|
81
|
+
// );
|
|
82
|
+
// if (!currentResult.success) {
|
|
83
|
+
// this.toastService.show({
|
|
84
|
+
// color: 'danger',
|
|
85
|
+
// title: 'Workflow Execution Failed',
|
|
86
|
+
// content: currentResult.error || 'Unknown error',
|
|
87
|
+
// closeButton: true,
|
|
88
|
+
// timeOut: 5000,
|
|
89
|
+
// });
|
|
90
|
+
// return {
|
|
91
|
+
// success: false,
|
|
92
|
+
// message: {
|
|
93
|
+
// text: currentResult.error || 'Unknown error'
|
|
94
|
+
// },
|
|
95
|
+
// data: {
|
|
96
|
+
// instanceId: currentResult.instanceId || '',
|
|
97
|
+
// output: null,
|
|
98
|
+
// }
|
|
99
|
+
// };
|
|
100
|
+
// }
|
|
101
|
+
// }
|
|
102
|
+
// Workflow completed successfully
|
|
103
|
+
// console.log(`[ExecuteWorkflowCommand] Workflow completed:`, currentResult.state?.output);
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
kind: 'object',
|
|
107
|
+
data: undefined,
|
|
108
|
+
// data: {
|
|
109
|
+
// instanceId: currentResult.instanceId!,
|
|
110
|
+
// output: currentResult.state?.output,
|
|
111
|
+
// }
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(`[ExecuteWorkflowCommand] Error:`, error);
|
|
116
|
+
this.toastService.show({
|
|
117
|
+
color: 'danger',
|
|
118
|
+
title: 'Workflow Execution Error',
|
|
119
|
+
content: error.message || 'Unknown error',
|
|
120
|
+
closeButton: true,
|
|
121
|
+
timeOut: 5000,
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
message: { details: {
|
|
126
|
+
instanceId: '',
|
|
127
|
+
output: null,
|
|
128
|
+
},
|
|
129
|
+
text: error.message || 'Unknown error'
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
135
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowCommand }); }
|
|
136
|
+
}
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ExecuteWorkflowCommand, decorators: [{
|
|
138
|
+
type: Injectable
|
|
139
|
+
}] });
|
|
140
|
+
|
|
141
|
+
export { ExecuteWorkflowCommand };
|
|
142
|
+
//# sourceMappingURL=acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs","sources":["../../../../libs/modules/workflow-management/client/src/lib/features/entities/workflow-definition/commands/execute-workflow.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { AXPWorkflowManager } from '@acorex-platform/framework-client/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXToastService } from '@acorex/components/toast';\n\n//#region ---- Types ----\n\n/**\n * Input for ExecuteWorkflow command\n */\nexport interface ExecuteWorkflowInput {\n /**\n * Workflow name (unique key)\n */\n workflowId: string;\n\n /**\n * Initial input data\n */\n input?: Record<string, any>;\n}\n\n/**\n * Output for ExecuteWorkflow command\n */\nexport interface ExecuteWorkflowOutput {\n /**\n * Instance ID\n */\n instanceId: string;\n\n /**\n * Workflow output\n */\n output: any;\n}\n\n//#endregion\n\n/**\n * Execute Workflow Command\n * \n * Starts and manages workflow execution from entity list.\n * Handles the complete workflow lifecycle including frontend/backend activities.\n */\n@Injectable()\nexport class ExecuteWorkflowCommand implements AXPCommand<ExecuteWorkflowInput, ExecuteWorkflowOutput> {\n //#region ---- Services ----\n\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(xx: any): AXPCommandExecuteResultPromise<ExecuteWorkflowOutput> {\n\n try {\n // Extract input from command context (entity actions pass options via options)\n const input = (xx?.options || xx) as ExecuteWorkflowInput;\n \n console.log(`[WorkflowManagement] 🚀 ExecuteWorkflowCommand: Starting workflow '${input.workflowId}'`, {\n workflowId: input.workflowId,\n input: input.input,\n context: xx,\n });\n\n // Start workflow execution\n // This uses the workflow engine which now queries definitions by name field\n const result = await this.workflowManager.start(input.workflowId, input.input || {});\n \n console.log(`[WorkflowManagement] 📊 Workflow start result:`, {\n success: result.success,\n instanceId: result.instanceId,\n error: result.error,\n stateStatus: result.state?.status,\n stateActivityOutputs: result.state?.activityOutputs,\n });\n\n if (!result.success) {\n console.error(`[WorkflowManagement] ❌ Failed to start workflow '${input.workflowId}':`, result.error);\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Failed',\n content: result.error || 'Unknown error',\n closeButton: true,\n timeOut: 5000,\n });\n\n return {\n success: false,\n message: { details: {\n instanceId: result.instanceId || '',\n output: null,\n },\n text: result.error || 'Unknown error'\n },\n };\n }\n\n console.log(`[WorkflowManagement] ✅ Workflow '${input.workflowId}' started successfully. Instance ID: ${result.instanceId}`);\n\n // Handle workflow execution loop\n // let currentResult = result;\n // let taskCount = 0;\n // while (currentResult.nextTask) {\n // taskCount++;\n // const task = currentResult.nextTask;\n\n // console.log(`[ExecuteWorkflowCommand] 🔄 Task ${taskCount}: Executing frontend task: ${task.activityType}`, task);\n\n // // Execute frontend task\n // console.log(`[ExecuteWorkflowCommand] ⚙️ Calling workflowManager.execute...`);\n // const executionResult = await this.workflowManager.execute(task);\n // console.log(`[ExecuteWorkflowCommand] ✅ Task executed:`, {\n // output: executionResult.output,\n // outcome: executionResult.outcome,\n // });\n \n // const { output, outcome } = executionResult;\n\n // // Complete task and get next\n // currentResult = await this.workflowManager.complete(\n // currentResult.instanceId!,\n // task,\n // outcome,\n // output\n // );\n\n // if (!currentResult.success) {\n // this.toastService.show({\n // color: 'danger',\n // title: 'Workflow Execution Failed',\n // content: currentResult.error || 'Unknown error',\n // closeButton: true,\n // timeOut: 5000,\n // });\n\n // return {\n // success: false,\n // message: {\n // text: currentResult.error || 'Unknown error'\n // },\n // data: {\n // instanceId: currentResult.instanceId || '',\n // output: null,\n // }\n // };\n // }\n // }\n\n // Workflow completed successfully\n // console.log(`[ExecuteWorkflowCommand] Workflow completed:`, currentResult.state?.output);\n\n return {\n success: true,\n kind: 'object',\n data: undefined as unknown as ExecuteWorkflowOutput,\n // data: {\n // instanceId: currentResult.instanceId!,\n // output: currentResult.state?.output,\n // }\n };\n } catch (error: any) {\n console.error(`[ExecuteWorkflowCommand] Error:`, error);\n\n this.toastService.show({\n color: 'danger',\n title: 'Workflow Execution Error',\n content: error.message || 'Unknown error',\n closeButton: true,\n timeOut: 5000,\n });\n\n return {\n success: false,\n message: { details: {\n instanceId: '',\n output: null,\n },\n text: error.message || 'Unknown error'\n },\n };\n }\n }\n\n //#endregion\n}\n\n"],"names":[],"mappings":"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"}
|