Skip to content

Commit 3b022f5

Browse files
authored
Merge pull request #159 from engalar/feat/workflow-microflow-actions
feat: workflow microflow actions and COMPLETE_TASK page action
2 parents 0273abf + 3335cac commit 3b022f5

31 files changed

+16344
-11288
lines changed

cmd/mxcli/lsp_completions_gen.go

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-- Test: COMPLETE_TASK action type for ACTIONBUTTON
2+
-- Verifies parsing of workflow task completion buttons
3+
4+
CREATE PAGE TestModule.UserTaskPage
5+
(
6+
Title: 'User Task Page',
7+
Layout: Atlas_Core.Atlas_Default,
8+
Params: { $WorkflowUserTask: System.WorkflowUserTask }
9+
)
10+
{
11+
ACTIONBUTTON btnApprove (
12+
Caption: 'Approve',
13+
Action: COMPLETE_TASK 'Approve',
14+
ButtonStyle: Success
15+
)
16+
ACTIONBUTTON btnReject (
17+
Caption: 'Reject',
18+
Action: COMPLETE_TASK 'Reject',
19+
ButtonStyle: Danger
20+
)
21+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
-- Test: workflow microflow actions syntax
2+
-- Verifies parsing of all 11 workflow action types in microflows
3+
4+
CREATE MICROFLOW TestModule.MF_WorkflowActions (
5+
$Workflow: Object,
6+
$ContextObj: Object,
7+
$UserTask: Object
8+
)
9+
RETURNS Nothing
10+
BEGIN
11+
-- Priority 1: Get workflow data
12+
$Issue = GET WORKFLOW DATA $Workflow AS TestModule.WF_DeliveryDelay;
13+
14+
-- Priority 2: Call workflow
15+
$WfInstance = CALL WORKFLOW TestModule.WF_DeliveryDelay (WorkflowContext = $ContextObj);
16+
17+
-- Priority 3: Get workflows
18+
$Workflows = GET WORKFLOWS FOR $ContextObj;
19+
20+
-- Get activity records
21+
$Records = GET WORKFLOW ACTIVITY RECORDS $Workflow;
22+
23+
-- Set task outcome
24+
SET TASK OUTCOME $UserTask 'Approve';
25+
26+
-- Open user task
27+
OPEN USER TASK $UserTask;
28+
29+
-- Workflow operations
30+
WORKFLOW OPERATION PAUSE $Workflow;
31+
WORKFLOW OPERATION CONTINUE $Workflow;
32+
WORKFLOW OPERATION ABORT $Workflow REASON 'No longer needed';
33+
WORKFLOW OPERATION RESTART $Workflow;
34+
WORKFLOW OPERATION RETRY $Workflow;
35+
WORKFLOW OPERATION UNPAUSE $Workflow;
36+
37+
-- Notify workflow
38+
NOTIFY WORKFLOW $Workflow;
39+
40+
-- Open workflow admin page
41+
OPEN WORKFLOW $Workflow;
42+
43+
-- Lock/Unlock
44+
LOCK WORKFLOW ALL;
45+
UNLOCK WORKFLOW ALL;
46+
LOCK WORKFLOW $Workflow;
47+
UNLOCK WORKFLOW $Workflow;
48+
END;

mdl/ast/ast_microflow_workflow.go

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
package ast
4+
5+
// CallWorkflowStmt represents: [$Wf =] CALL WORKFLOW Module.WF_Name ($ContextObj)
6+
type CallWorkflowStmt struct {
7+
OutputVariable string
8+
Workflow QualifiedName
9+
Arguments []CallArgument
10+
ErrorHandling *ErrorHandlingClause
11+
Annotations *ActivityAnnotations
12+
}
13+
14+
func (*CallWorkflowStmt) isMicroflowStatement() {}
15+
16+
// GetWorkflowDataStmt represents: [$Data =] GET WORKFLOW DATA $WorkflowVar AS Module.WorkflowName
17+
type GetWorkflowDataStmt struct {
18+
OutputVariable string
19+
WorkflowVariable string
20+
Workflow QualifiedName
21+
ErrorHandling *ErrorHandlingClause
22+
Annotations *ActivityAnnotations
23+
}
24+
25+
func (*GetWorkflowDataStmt) isMicroflowStatement() {}
26+
27+
// GetWorkflowsStmt represents: [$Wfs =] GET WORKFLOWS FOR $ContextObj
28+
type GetWorkflowsStmt struct {
29+
OutputVariable string
30+
WorkflowContextVariableName string
31+
ErrorHandling *ErrorHandlingClause
32+
Annotations *ActivityAnnotations
33+
}
34+
35+
func (*GetWorkflowsStmt) isMicroflowStatement() {}
36+
37+
// GetWorkflowActivityRecordsStmt represents: [$Records =] GET WORKFLOW ACTIVITY RECORDS $WorkflowVar
38+
type GetWorkflowActivityRecordsStmt struct {
39+
OutputVariable string
40+
WorkflowVariable string
41+
ErrorHandling *ErrorHandlingClause
42+
Annotations *ActivityAnnotations
43+
}
44+
45+
func (*GetWorkflowActivityRecordsStmt) isMicroflowStatement() {}
46+
47+
// WorkflowOperationStmt represents: WORKFLOW OPERATION <type> $WorkflowVar [REASON '...']
48+
type WorkflowOperationStmt struct {
49+
OperationType string // ABORT, CONTINUE, PAUSE, RESTART, RETRY, UNPAUSE
50+
WorkflowVariable string
51+
Reason Expression // Only for ABORT
52+
ErrorHandling *ErrorHandlingClause
53+
Annotations *ActivityAnnotations
54+
}
55+
56+
func (*WorkflowOperationStmt) isMicroflowStatement() {}
57+
58+
// SetTaskOutcomeStmt represents: SET TASK OUTCOME $UserTask 'OutcomeName'
59+
type SetTaskOutcomeStmt struct {
60+
WorkflowTaskVariable string
61+
OutcomeValue string
62+
ErrorHandling *ErrorHandlingClause
63+
Annotations *ActivityAnnotations
64+
}
65+
66+
func (*SetTaskOutcomeStmt) isMicroflowStatement() {}
67+
68+
// OpenUserTaskStmt represents: OPEN USER TASK $UserTask
69+
type OpenUserTaskStmt struct {
70+
UserTaskVariable string
71+
ErrorHandling *ErrorHandlingClause
72+
Annotations *ActivityAnnotations
73+
}
74+
75+
func (*OpenUserTaskStmt) isMicroflowStatement() {}
76+
77+
// NotifyWorkflowStmt represents: [$Result =] NOTIFY WORKFLOW $WorkflowVar
78+
type NotifyWorkflowStmt struct {
79+
OutputVariable string
80+
WorkflowVariable string
81+
ErrorHandling *ErrorHandlingClause
82+
Annotations *ActivityAnnotations
83+
}
84+
85+
func (*NotifyWorkflowStmt) isMicroflowStatement() {}
86+
87+
// OpenWorkflowStmt represents: OPEN WORKFLOW $WorkflowVar
88+
type OpenWorkflowStmt struct {
89+
WorkflowVariable string
90+
ErrorHandling *ErrorHandlingClause
91+
Annotations *ActivityAnnotations
92+
}
93+
94+
func (*OpenWorkflowStmt) isMicroflowStatement() {}
95+
96+
// LockWorkflowStmt represents: LOCK WORKFLOW ($WorkflowVar | ALL)
97+
type LockWorkflowStmt struct {
98+
WorkflowVariable string
99+
PauseAllWorkflows bool
100+
ErrorHandling *ErrorHandlingClause
101+
Annotations *ActivityAnnotations
102+
}
103+
104+
func (*LockWorkflowStmt) isMicroflowStatement() {}
105+
106+
// UnlockWorkflowStmt represents: UNLOCK WORKFLOW ($WorkflowVar | ALL)
107+
type UnlockWorkflowStmt struct {
108+
WorkflowVariable string
109+
ResumeAllPausedWorkflows bool
110+
ErrorHandling *ErrorHandlingClause
111+
Annotations *ActivityAnnotations
112+
}
113+
114+
func (*UnlockWorkflowStmt) isMicroflowStatement() {}

mdl/ast/ast_page_v3.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,13 @@ type OrderByItemV3 struct {
8181

8282
// ActionV3 represents a V3 action expression.
8383
type ActionV3 struct {
84-
Type string // "save", "cancel", "close", "delete", "create", "showPage", "microflow", "nanoflow", "openLink", "signOut"
85-
Target string // Entity, page, or flow qualified name (for create/showPage/microflow/nanoflow)
86-
Args []FlowArgV3 // Arguments for showPage/microflow calls
87-
ThenAction *ActionV3 // For CREATE_OBJECT ... THEN ...
88-
ClosePage bool // For SAVE_CHANGES CLOSE_PAGE
89-
LinkURL string // For OPEN_LINK
84+
Type string // "save", "cancel", "close", "delete", "create", "showPage", "microflow", "nanoflow", "openLink", "signOut", "completeTask"
85+
Target string // Entity, page, or flow qualified name (for create/showPage/microflow/nanoflow)
86+
Args []FlowArgV3 // Arguments for showPage/microflow calls
87+
ThenAction *ActionV3 // For CREATE_OBJECT ... THEN ...
88+
ClosePage bool // For SAVE_CHANGES CLOSE_PAGE
89+
LinkURL string // For OPEN_LINK
90+
OutcomeValue string // For COMPLETE_TASK
9091
}
9192

9293
// ColumnV3 represents a V3 datagrid column.

mdl/executor/cmd_fragments.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,8 @@ func formatActionV3(a *ast.ActionV3) string {
281281
return "NANOFLOW " + a.Target
282282
case "signOut":
283283
return "SIGN_OUT"
284+
case "completeTask":
285+
return "COMPLETE_TASK '" + strings.ReplaceAll(a.OutcomeValue, "'", "''") + "'"
284286
default:
285287
return a.Type
286288
}

mdl/executor/cmd_microflows_builder_graph.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,29 @@ func (fb *flowBuilder) addStatement(stmt ast.MicroflowStatement) model.ID {
185185
return fb.addImportFromMappingAction(s)
186186
case *ast.ExportToMappingStmt:
187187
return fb.addExportToMappingAction(s)
188+
// Workflow microflow actions
189+
case *ast.CallWorkflowStmt:
190+
return fb.addCallWorkflowAction(s)
191+
case *ast.GetWorkflowDataStmt:
192+
return fb.addGetWorkflowDataAction(s)
193+
case *ast.GetWorkflowsStmt:
194+
return fb.addGetWorkflowsAction(s)
195+
case *ast.GetWorkflowActivityRecordsStmt:
196+
return fb.addGetWorkflowActivityRecordsAction(s)
197+
case *ast.WorkflowOperationStmt:
198+
return fb.addWorkflowOperationAction(s)
199+
case *ast.SetTaskOutcomeStmt:
200+
return fb.addSetTaskOutcomeAction(s)
201+
case *ast.OpenUserTaskStmt:
202+
return fb.addOpenUserTaskAction(s)
203+
case *ast.NotifyWorkflowStmt:
204+
return fb.addNotifyWorkflowAction(s)
205+
case *ast.OpenWorkflowStmt:
206+
return fb.addOpenWorkflowAction(s)
207+
case *ast.LockWorkflowStmt:
208+
return fb.addLockWorkflowAction(s)
209+
case *ast.UnlockWorkflowStmt:
210+
return fb.addUnlockWorkflowAction(s)
188211
default:
189212
// For now, skip unknown statement types
190213
return ""

0 commit comments

Comments
 (0)