RulesetWorkflow
Jump to navigation
Jump to search
_*This is a design document for a work in progress. It describes features that do not exist today and may never exist*_
Text Description
- The user of OrderRequest queue fill in a numeric "CF", called "Price".
- On creation, it needs to create following approvals:
- "ManagerApproval" if CF.Price is > 1000
- "PresidentApproval" if CF.Price is > 2000
- When all of "M", "P" are resolved (or if there were none to begin with), Create "FinanceApproval".
- If any approvals above is rejected, reject the original ticket.
- If "FinanceApproval" is resolved, resolve original ticket.
- If "FinanceApproval" is rejected, create an approval for "CEOApproval".
- If "CEOApproval" is resolved, resolve the original ticket.
- If "CEOApproval" is rejected, reject the original ticket.
ASCII Diagram
,----------. ,---------------------->[DONE] | \ / ^ [FLOW]-+-?---->[M]---->[F] | | | / \ | `-?->[P]-+-' `-(!)->[C]-----------------' | | | | | `-(!)---------->[FAIL] | | ^ `-(!)----------------------------------'
Objects
Note that "Scrips" are now called "Rules".
(Audrey says that LockRuleset is needed, "to register dependency.")
RuleAction "AquireMyLocks"
FOREACH $Scrip IN $TicketObj->Scrips WHERE $Scrip.Action.Type == "TryCreateTicketWithRuleset" DO LockRuleset $Scrip.Action.Argument
RuleAction "TryCreateTicketWithRuleset"
DO ReleaseMyLockOnRuleset $Argument UNLESS RulesetLocked $Argument DO CreateTicketWithRuleset $Argument
GlobalRule "AquireLocks"
- AppliesTo: All Objects
- Condition: OnCreate
- Action: AquireMyLocks
Queue "OrderRequest"
- Rule:
- Condition: OnCreate
- Action: SetTicketRuleSet "PurchaseFlow"
- Action: RunTicketRuleSet "PurchaseFlow"
RuleSet "PurchaseFlow"
- Rule (implicitly run by AcquireMyLocks):
- Condition: OnCreate
- Action: LockRuleSet "ManagerApproval"
- Action: LockRuleSet "PresidentApproval"
- Action: LockRuleSet "FinanceApproval"
- Rule:
- Condition: OnCreate
- Condition: CF.Price > 1000
- Action: TryCreateTicketWithRuleset "Manager"
- Rule:
- Condition: OnCreate
- Condition: CF.Price > 2000
- Action: TryCreateTicketWithRuleset "President"
- Rule:
- Condition: OnCreate
- Condition: "Finance" is not blocked
- Action: TryCreateTicketWithRuleset "Finance"
- Rule:
- Condition: OnReject
- Action: DeleteTree
RuleSet: "ManagerApproval"
- Rule (implicitly run by AcquireMyLocks):
- Condition: OnCreate
- Action: LockRuleSet "FinanceApproval"
- Rule:
- Condition: OnResolve
- Action: TryCreateTicketWithRuleset "FinanceApproval"
- Rule:
- Condition: OnReject
- Action: RejectTicket "PurchaseFlow"
RuleSet: "PresidentApproval"
- Rule (implicitly run by AcquireMyLocks):
- Condition: OnCreate
- Action: LockRuleSet "FinanceApproval"
- Rule:
- Condition: OnResolve
- Action: TryCreateTicketWithRuleset "FinanceApproval"
- Rule:
- Condition: OnReject
- Action: RejectTicket "PurchaseFlow"
RuleSet: "FinanceApproval"
- Rule:
- Condition: OnResolve
- Action: ResolveTicket "PurchaseFlow"
- Rule:
- Condition: OnReject
- Action: ForceCreateTicketWithRuleset "CEOApproval"
RuleSet: "CEOApproval"
- Rule:
- Condition: OnResolve
- Action: ResolveTicket "PurchaseFlow"
- Rule:
- Condition: OnReject
- Action: RejectTicket "PurchaseFlow"
Another Text Description
- I have a MonitoredQueue that sets tickets to "Monitored" if its subject matches /monitored/.
- I want to have a kind of Ticket that are 'Monitored'.
- I want all monitored tickets, when they are overdue for 14 days, to:
- Send notification to manager
- Mark as stalled
- I want all monitored tickets, when they are overdue for 28 days, to:
- Mark as rejected
- I want to query all tickets that are monitored as such
- I want to modify 14 => 15 and have it affect all existing tickets that are monitored
- I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule
- For all monitored tickets.
- I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule
- For all new monitored tickets.
- Without affecting existing ones.