Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions cmd/mxcli/lsp_completions_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions mdl-examples/doctype-tests/complete-task-action.mdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-- Test: COMPLETE_TASK action type for ACTIONBUTTON
-- Verifies parsing of workflow task completion buttons

CREATE PAGE TestModule.UserTaskPage
(
Title: 'User Task Page',
Layout: Atlas_Core.Atlas_Default,
Params: { $WorkflowUserTask: System.WorkflowUserTask }
)
{
ACTIONBUTTON btnApprove (
Caption: 'Approve',
Action: COMPLETE_TASK 'Approve',
ButtonStyle: Success
)
ACTIONBUTTON btnReject (
Caption: 'Reject',
Action: COMPLETE_TASK 'Reject',
ButtonStyle: Danger
)
}
48 changes: 48 additions & 0 deletions mdl-examples/doctype-tests/workflow-microflow-actions.mdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-- Test: workflow microflow actions syntax
-- Verifies parsing of all 11 workflow action types in microflows

CREATE MICROFLOW TestModule.MF_WorkflowActions (
$Workflow: Object,
$ContextObj: Object,
$UserTask: Object
)
RETURNS Nothing
BEGIN
-- Priority 1: Get workflow data
$Issue = GET WORKFLOW DATA $Workflow AS TestModule.WF_DeliveryDelay;

-- Priority 2: Call workflow
$WfInstance = CALL WORKFLOW TestModule.WF_DeliveryDelay (WorkflowContext = $ContextObj);

-- Priority 3: Get workflows
$Workflows = GET WORKFLOWS FOR $ContextObj;

-- Get activity records
$Records = GET WORKFLOW ACTIVITY RECORDS $Workflow;

-- Set task outcome
SET TASK OUTCOME $UserTask 'Approve';

-- Open user task
OPEN USER TASK $UserTask;

-- Workflow operations
WORKFLOW OPERATION PAUSE $Workflow;
WORKFLOW OPERATION CONTINUE $Workflow;
WORKFLOW OPERATION ABORT $Workflow REASON 'No longer needed';
WORKFLOW OPERATION RESTART $Workflow;
WORKFLOW OPERATION RETRY $Workflow;
WORKFLOW OPERATION UNPAUSE $Workflow;

-- Notify workflow
NOTIFY WORKFLOW $Workflow;

-- Open workflow admin page
OPEN WORKFLOW $Workflow;

-- Lock/Unlock
LOCK WORKFLOW ALL;
UNLOCK WORKFLOW ALL;
LOCK WORKFLOW $Workflow;
UNLOCK WORKFLOW $Workflow;
END;
114 changes: 114 additions & 0 deletions mdl/ast/ast_microflow_workflow.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// SPDX-License-Identifier: Apache-2.0

package ast

// CallWorkflowStmt represents: [$Wf =] CALL WORKFLOW Module.WF_Name ($ContextObj)
type CallWorkflowStmt struct {
OutputVariable string
Workflow QualifiedName
Arguments []CallArgument
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*CallWorkflowStmt) isMicroflowStatement() {}

// GetWorkflowDataStmt represents: [$Data =] GET WORKFLOW DATA $WorkflowVar AS Module.WorkflowName
type GetWorkflowDataStmt struct {
OutputVariable string
WorkflowVariable string
Workflow QualifiedName
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*GetWorkflowDataStmt) isMicroflowStatement() {}

// GetWorkflowsStmt represents: [$Wfs =] GET WORKFLOWS FOR $ContextObj
type GetWorkflowsStmt struct {
OutputVariable string
WorkflowContextVariableName string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*GetWorkflowsStmt) isMicroflowStatement() {}

// GetWorkflowActivityRecordsStmt represents: [$Records =] GET WORKFLOW ACTIVITY RECORDS $WorkflowVar
type GetWorkflowActivityRecordsStmt struct {
OutputVariable string
WorkflowVariable string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*GetWorkflowActivityRecordsStmt) isMicroflowStatement() {}

// WorkflowOperationStmt represents: WORKFLOW OPERATION <type> $WorkflowVar [REASON '...']
type WorkflowOperationStmt struct {
OperationType string // ABORT, CONTINUE, PAUSE, RESTART, RETRY, UNPAUSE
WorkflowVariable string
Reason Expression // Only for ABORT
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*WorkflowOperationStmt) isMicroflowStatement() {}

// SetTaskOutcomeStmt represents: SET TASK OUTCOME $UserTask 'OutcomeName'
type SetTaskOutcomeStmt struct {
WorkflowTaskVariable string
OutcomeValue string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*SetTaskOutcomeStmt) isMicroflowStatement() {}

// OpenUserTaskStmt represents: OPEN USER TASK $UserTask
type OpenUserTaskStmt struct {
UserTaskVariable string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*OpenUserTaskStmt) isMicroflowStatement() {}

// NotifyWorkflowStmt represents: [$Result =] NOTIFY WORKFLOW $WorkflowVar
type NotifyWorkflowStmt struct {
OutputVariable string
WorkflowVariable string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*NotifyWorkflowStmt) isMicroflowStatement() {}

// OpenWorkflowStmt represents: OPEN WORKFLOW $WorkflowVar
type OpenWorkflowStmt struct {
WorkflowVariable string
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*OpenWorkflowStmt) isMicroflowStatement() {}

// LockWorkflowStmt represents: LOCK WORKFLOW ($WorkflowVar | ALL)
type LockWorkflowStmt struct {
WorkflowVariable string
PauseAllWorkflows bool
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*LockWorkflowStmt) isMicroflowStatement() {}

// UnlockWorkflowStmt represents: UNLOCK WORKFLOW ($WorkflowVar | ALL)
type UnlockWorkflowStmt struct {
WorkflowVariable string
ResumeAllPausedWorkflows bool
ErrorHandling *ErrorHandlingClause
Annotations *ActivityAnnotations
}

func (*UnlockWorkflowStmt) isMicroflowStatement() {}
13 changes: 7 additions & 6 deletions mdl/ast/ast_page_v3.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,13 @@ type OrderByItemV3 struct {

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

// ColumnV3 represents a V3 datagrid column.
Expand Down
2 changes: 2 additions & 0 deletions mdl/executor/cmd_fragments.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,8 @@ func formatActionV3(a *ast.ActionV3) string {
return "NANOFLOW " + a.Target
case "signOut":
return "SIGN_OUT"
case "completeTask":
return "COMPLETE_TASK '" + strings.ReplaceAll(a.OutcomeValue, "'", "''") + "'"
default:
return a.Type
}
Expand Down
23 changes: 23 additions & 0 deletions mdl/executor/cmd_microflows_builder_graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,29 @@ func (fb *flowBuilder) addStatement(stmt ast.MicroflowStatement) model.ID {
return fb.addImportFromMappingAction(s)
case *ast.ExportToMappingStmt:
return fb.addExportToMappingAction(s)
// Workflow microflow actions
case *ast.CallWorkflowStmt:
return fb.addCallWorkflowAction(s)
case *ast.GetWorkflowDataStmt:
return fb.addGetWorkflowDataAction(s)
case *ast.GetWorkflowsStmt:
return fb.addGetWorkflowsAction(s)
case *ast.GetWorkflowActivityRecordsStmt:
return fb.addGetWorkflowActivityRecordsAction(s)
case *ast.WorkflowOperationStmt:
return fb.addWorkflowOperationAction(s)
case *ast.SetTaskOutcomeStmt:
return fb.addSetTaskOutcomeAction(s)
case *ast.OpenUserTaskStmt:
return fb.addOpenUserTaskAction(s)
case *ast.NotifyWorkflowStmt:
return fb.addNotifyWorkflowAction(s)
case *ast.OpenWorkflowStmt:
return fb.addOpenWorkflowAction(s)
case *ast.LockWorkflowStmt:
return fb.addLockWorkflowAction(s)
case *ast.UnlockWorkflowStmt:
return fb.addUnlockWorkflowAction(s)
default:
// For now, skip unknown statement types
return ""
Expand Down
Loading
Loading