Skip to content

Commit 983162d

Browse files
engalarako
authored andcommitted
feat: support full user targeting on workflow USER TASK (fixes mendixlabs#169)
Parser now reads both legacy UserSource and current UserTargeting BSON fields, recognizing all five $Type variants: MicroflowUserTargeting, XPathUserTargeting, MicroflowGroupTargeting, XPathGroupTargeting, and NoUserTargeting. MDL syntax extended with optional USERS/GROUPS modifier: TARGETING [USERS|GROUPS] MICROFLOW/XPATH.
1 parent 3a8956d commit 983162d

17 files changed

Lines changed: 7506 additions & 7152 deletions

cmd/mxcli/lsp_completions_gen.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mdl/ast/ast_workflow.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ type WorkflowUserTaskNode struct {
5656
func (n *WorkflowUserTaskNode) workflowActivityNode() {}
5757

5858
// WorkflowTargetingNode represents user targeting strategy.
59+
// Kind: "microflow", "xpath", "group_microflow", "group_xpath", or ""
5960
type WorkflowTargetingNode struct {
60-
Kind string // "microflow", "xpath", or ""
61-
Microflow QualifiedName // for microflow targeting
62-
XPath string // for xpath targeting
61+
Kind string // "microflow", "xpath", "group_microflow", "group_xpath", or ""
62+
Microflow QualifiedName // for microflow targeting (user or group)
63+
XPath string // for xpath targeting (user or group)
6364
}
6465

6566
// WorkflowUserTaskOutcomeNode represents an outcome of a user task.

mdl/executor/cmd_workflows.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,14 @@ func formatUserTask(a *workflows.UserTask, indent string) []string {
432432
if us.XPath != "" {
433433
lines = append(lines, fmt.Sprintf("%s targeting xpath '%s'", indent, us.XPath))
434434
}
435+
case *workflows.MicroflowGroupSource:
436+
if us.Microflow != "" {
437+
lines = append(lines, fmt.Sprintf("%s TARGETING GROUPS MICROFLOW %s", indent, us.Microflow))
438+
}
439+
case *workflows.XPathGroupSource:
440+
if us.XPath != "" {
441+
lines = append(lines, fmt.Sprintf("%s TARGETING GROUPS XPATH '%s'", indent, us.XPath))
442+
}
435443
}
436444
}
437445

mdl/executor/cmd_workflows_write.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@ func buildUserTask(n *ast.WorkflowUserTaskNode) *workflows.UserTask {
251251
task.UserSource = &workflows.XPathBasedUserSource{
252252
XPath: n.Targeting.XPath,
253253
}
254+
case "group_microflow":
255+
task.UserSource = &workflows.MicroflowGroupSource{
256+
Microflow: n.Targeting.Microflow.Module + "." + n.Targeting.Microflow.Name,
257+
}
258+
case "group_xpath":
259+
task.UserSource = &workflows.XPathGroupSource{
260+
XPath: n.Targeting.XPath,
261+
}
254262
}
255263

256264
// Outcomes

mdl/grammar/MDLLexer.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ ACTIVITY: A C T I V I T Y;
659659
CONDITION: C O N D I T I O N;
660660
OFF: O F F;
661661
USERS: U S E R S;
662+
GROUPS: G R O U P S;
662663

663664
// Data transformer tokens
664665
DATA: D A T A;

mdl/grammar/MDLParser.g4

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2820,17 +2820,17 @@ workflowActivityStmt
28202820
workflowUserTaskStmt
28212821
: USER TASK IDENTIFIER STRING_LITERAL
28222822
(PAGE qualifiedName)?
2823-
(TARGETING MICROFLOW qualifiedName)?
2824-
(TARGETING XPATH STRING_LITERAL)?
2823+
(TARGETING (USERS | GROUPS)? MICROFLOW qualifiedName)?
2824+
(TARGETING (USERS | GROUPS)? XPATH STRING_LITERAL)?
28252825
(ENTITY qualifiedName)?
28262826
(DUE DATE_TYPE STRING_LITERAL)?
28272827
(DESCRIPTION STRING_LITERAL)?
28282828
(OUTCOMES workflowUserTaskOutcome+)?
28292829
(BOUNDARY EVENT workflowBoundaryEventClause+)?
28302830
| MULTI USER TASK IDENTIFIER STRING_LITERAL
28312831
(PAGE qualifiedName)?
2832-
(TARGETING MICROFLOW qualifiedName)?
2833-
(TARGETING XPATH STRING_LITERAL)?
2832+
(TARGETING (USERS | GROUPS)? MICROFLOW qualifiedName)?
2833+
(TARGETING (USERS | GROUPS)? XPATH STRING_LITERAL)?
28342834
(ENTITY qualifiedName)?
28352835
(DUE DATE_TYPE STRING_LITERAL)?
28362836
(DESCRIPTION STRING_LITERAL)?

mdl/grammar/parser/MDLLexer.interp

Lines changed: 4 additions & 1 deletion
Large diffs are not rendered by default.

mdl/grammar/parser/MDLLexer.tokens

Lines changed: 82 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -514,84 +514,85 @@ ACTIVITY=513
514514
CONDITION=514
515515
OFF=515
516516
USERS=516
517-
DATA=517
518-
TRANSFORM=518
519-
TRANSFORMER=519
520-
TRANSFORMERS=520
521-
JSLT=521
522-
XSLT=522
523-
RECORDS=523
524-
NOTIFY=524
525-
PAUSE=525
526-
UNPAUSE=526
527-
ABORT=527
528-
RETRY=528
529-
RESTART=529
530-
LOCK=530
531-
UNLOCK=531
532-
REASON=532
533-
OPEN=533
534-
COMPLETE_TASK=534
535-
NOT_EQUALS=535
536-
LESS_THAN_OR_EQUAL=536
537-
GREATER_THAN_OR_EQUAL=537
538-
EQUALS=538
539-
LESS_THAN=539
540-
GREATER_THAN=540
541-
PLUS=541
542-
MINUS=542
543-
STAR=543
544-
SLASH=544
545-
PERCENT=545
546-
MOD=546
547-
DIV=547
548-
SEMICOLON=548
549-
COMMA=549
550-
DOT=550
551-
LPAREN=551
552-
RPAREN=552
553-
LBRACE=553
554-
RBRACE=554
555-
LBRACKET=555
556-
RBRACKET=556
557-
COLON=557
558-
AT=558
559-
PIPE=559
560-
DOUBLE_COLON=560
561-
ARROW=561
562-
QUESTION=562
563-
HASH=563
564-
MENDIX_TOKEN=564
565-
STRING_LITERAL=565
566-
DOLLAR_STRING=566
567-
NUMBER_LITERAL=567
568-
VARIABLE=568
569-
IDENTIFIER=569
570-
HYPHENATED_ID=570
571-
QUOTED_IDENTIFIER=571
572-
'<='=536
573-
'>='=537
574-
'='=538
575-
'<'=539
576-
'>'=540
577-
'+'=541
578-
'-'=542
579-
'*'=543
580-
'/'=544
581-
'%'=545
582-
';'=548
583-
','=549
584-
'.'=550
585-
'('=551
586-
')'=552
587-
'{'=553
588-
'}'=554
589-
'['=555
590-
']'=556
591-
':'=557
592-
'@'=558
593-
'|'=559
594-
'::'=560
595-
'->'=561
596-
'?'=562
597-
'#'=563
517+
GROUPS=517
518+
DATA=518
519+
TRANSFORM=519
520+
TRANSFORMER=520
521+
TRANSFORMERS=521
522+
JSLT=522
523+
XSLT=523
524+
RECORDS=524
525+
NOTIFY=525
526+
PAUSE=526
527+
UNPAUSE=527
528+
ABORT=528
529+
RETRY=529
530+
RESTART=530
531+
LOCK=531
532+
UNLOCK=532
533+
REASON=533
534+
OPEN=534
535+
COMPLETE_TASK=535
536+
NOT_EQUALS=536
537+
LESS_THAN_OR_EQUAL=537
538+
GREATER_THAN_OR_EQUAL=538
539+
EQUALS=539
540+
LESS_THAN=540
541+
GREATER_THAN=541
542+
PLUS=542
543+
MINUS=543
544+
STAR=544
545+
SLASH=545
546+
PERCENT=546
547+
MOD=547
548+
DIV=548
549+
SEMICOLON=549
550+
COMMA=550
551+
DOT=551
552+
LPAREN=552
553+
RPAREN=553
554+
LBRACE=554
555+
RBRACE=555
556+
LBRACKET=556
557+
RBRACKET=557
558+
COLON=558
559+
AT=559
560+
PIPE=560
561+
DOUBLE_COLON=561
562+
ARROW=562
563+
QUESTION=563
564+
HASH=564
565+
MENDIX_TOKEN=565
566+
STRING_LITERAL=566
567+
DOLLAR_STRING=567
568+
NUMBER_LITERAL=568
569+
VARIABLE=569
570+
IDENTIFIER=570
571+
HYPHENATED_ID=571
572+
QUOTED_IDENTIFIER=572
573+
'<='=537
574+
'>='=538
575+
'='=539
576+
'<'=540
577+
'>'=541
578+
'+'=542
579+
'-'=543
580+
'*'=544
581+
'/'=545
582+
'%'=546
583+
';'=549
584+
','=550
585+
'.'=551
586+
'('=552
587+
')'=553
588+
'{'=554
589+
'}'=555
590+
'['=556
591+
']'=557
592+
':'=558
593+
'@'=559
594+
'|'=560
595+
'::'=561
596+
'->'=562
597+
'?'=563
598+
'#'=564

mdl/grammar/parser/MDLParser.interp

Lines changed: 3 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)