The manual covers the T6 Planning Workflow BPM and addresses various topics related to configuring workflows, processes, parameters, responsibilities, email templates, activity design, task types, specific functions, and their syntax. The primary focus is on using the Business Process Modeling Notation (BPMN) to model business processes, aiming to provide greater flexibility to the classic workflow. The document also provides examples of expressions and detailed explanations of each part of the process, including task types, flow design, object identification, and other features associated with T6 Planning Workflow BPM.
For each T6 Planning application, we must choose a workflow to be used. Each application can have only one type of workflow. The available types are:
The workflow type of an application can be changed at any time. To do this, simply edit the desired application and change the workflow type as needed.
Migrated applications will not have their workflow changed. New applications will default to the BPM workflow type.
An application configured to use the classic workflow will behave as the existing workflow in T6 Planning up to that point, where it operates based on the dimensions Scenario and Entity of the model. As the focus of this manual is BPM Workflow, we will not detail the Classic Workflow in this manual.
With the constant need for greater flexibility in our classic workflow, we sought a standard notation for business process modeling in the market. The most plausible option found was the Business Process Modeling Notation (BPMN), developed and provided as a new workflow option for applications.
Currently, a subset of BPMN is supported. Our long-term goal is to cover all available BPMN options.
Some additional options have been provided in the process creation to facilitate filling and executing processes, but these options do not belong to the BPMN standard.
A process is a group of activities performed in a specific sequence. Processes are independent of the application. Only some specific task types, detailed later, are application-dependent.
The process is the definition of a flow. An instance is a running copy of a process. In the same process, we can have several instances running simultaneously. It is only possible to initialize an instance in a process if it is published.
When saving a process, no validation is performed. Consistency validation only occurs during the publication of the process.
Processes have version control. In other words, every time the process is saved, a new version of the process is saved, keeping the previous version in the process history for future reference.
A process can have a collection of parameters. Each parameter has a type definition and a configuration. Each process only has parameter definitions, and each process instance must have a value for each process parameter.
If a parameter is configured to accept null values, filling is not required when the user needs to trigger an action.
A parameter configured as internal will not be visible in the parameter list when triggering an action. The purpose of an internal parameter is to abstract the parameter for the user who will trigger the action, as the parameter is only necessary for the internal functioning of the process. Since the parameter is not listed, it is necessarily a parameter that accepts null values.
Below are the possible parameter types.
Allows storing a value related to the action performed on an instance. For example: Whether the task was approved or not.
Allows the upload of files.
Stores binary values true or false, enabling use in conditionals, for example.
Used to store a date.
Used to store a floating-point value.
Used to store an integer value.
Used to store the identification of a member of a specific application and dimension.
Used to store the instance's identification. If this parameter exists in a process, whenever T6 Planning needs to identify an instance, it will use the value contained in this parameter.
Used to store a list of responsibles.
Used to store a single responsible.
Used to store the identification of a specific data table.
Used to store text.
Defining the responsibles for the tasks of a process can be a very laborious and difficult maintenance activity. To facilitate defining the responsibles for the tasks of a process, it is possible to configure the process to load the responsibles stored in a data table. To do this, simply choose the data table where the responsibles' information is stored and configure some identification columns.
Below is a description of how to configure the parameters to dynamically load the responsibles:
To facilitate email configuration, it is possible to create email templates in the process. After configuring the email template, we can associate it with predetermined events in the process or task.
The definition of the activity flow in a process is done through a graphic designer. When creating a new process, the designer will create a Start activity and an End activity for the process.
Whenever an activity is selected by clicking the mouse's first button on the activity, the designer will display around the selected activity which other possible activities can branch off from the current activity. If no options are available, it means that the current activity cannot have any more activities branching from it.
To access the available actions for an activity, simply use the mouse's second button on the desired activity. A context menu will be provided with actions for the activity.
If a double-click is performed on the activity, the designer will execute the expected default action for that activity, usually the first available action from the context menu for the activity.
To move an activity, just select it and perform the drag-and-drop movement to the desired new position for the activity.
Some activities support resizing. To resize, simply select the activity and perform the drag-and-drop movement at the bottom right corner of the activity. Note that when the mouse is at the bottom right corner of the activity and the activity supports resizing, the mouse cursor will change to the resizing cursor.
The T6 Planning workflow follows BPM rules, where each object available in our tool represents an activity, as follows:
The T6 Planning Workflow BPM allows the insertion of some functions with specific purposes within the process, as described below:
The CreateDataTableRow function is used to create a record in a data table.
PARAMETERS:
EXAMPLE: Instance(Monthly Billing Consumption) = CreateDataTableRow([Monthly Billing Consumption], [Consumption Unit] = Instance(Unit), [Month] = Instance(Month))
In this example of an expression of a task of the expression type, a new record in the Monthly Billing Consumption data table is created, where the value of the Consumption Unit column will be filled with the parameter of the instance named Unit, as well as the value of the Month column of the record will be filled with the parameter of the instance named Month.
The DataLoadParameter function is used to manipulate the data load parameters of a specific application, and the function can be used to load or save a value of a data load parameter. This function is considered a storage function.
PARAMETERS:
EXAMPLE: Instance(Email) = DataLoadParameter([Quality].[Content])
This example of an expression deals with a task of the expression type. The value of the Content data load parameter of the Quality application will be assigned to the Email parameter of the current instance.
The DataTableCell function is used to manipulate values of a record in a data table. It can be used to load or save a value from a record in a data table. This function is considered a storage function.
Parameters:
Example: Instance(UEmail) = DataTableCell([Users].[Instance(ID)].[Email])
This expression example deals with an expression-type task. The value of the Email column from the Users data table, in the record identified by the ID parameter, will be assigned to the UEmail parameter of the current instance.
The DataTableRowLookup function is used to retrieve the identification of a record in a data table.
Parameters:
Example: Instance(ID) = DataTableRowLookup[Users].[Name].[Instance(Current)]
This expression example deals with an expression-type task. The identification of the record in the Users data table that has the value in the Name column equal to the value of the Current parameter will be assigned to the ID parameter of the current instance.
This function retrieves the current server date value.
Example: Instance(Data) = GetDate()
This expression example deals with an expression-type task. The server date will be assigned to the Data parameter of the current instance.
The Instance function is used to manipulate instance parameter values. It can be used to retrieve or save a value from an instance parameter. This function is considered a storage function.
Parameters:
Example: Instance(Action) = "Approved"
This expression example deals with an expression-type task. The constant "Approved" will be assigned to the Action parameter of the instance.
Returns the code of the current instance.
Parameters: None
Example: Instance (Code) = InstanceCode()
Returns the name of the current instance.
Parameters: None
Example: Instance (Name) = InstanceName()
The LoadDataTableRows function is used to load records from a data table, and they can be filtered or not. This function is considered a loading function.
Parameters:
[Operand] [Comparator] [Operand]
[Operand] = [Column] or [Constant] or [Instance] or [Expression]
[Column] =
Name of a data table column. The column name should be enclosed in square brackets.[Constant] =
Value of a constant. The constant value should be enclosed in double quotes.[Instance] =
Instance function. For more information on using the Instance function, refer to the function details in the function list.[Expression] =
An SQL expression. The expression should be enclosed in curly braces.[Comparator] = "<=" or "=" or ">=" or "!="
Example: Instance(Activity) = LoadDataTableRows([Activities])
In this example of an expression task, the identifications of the records in the Activities data table will be assigned to the Activity parameters of the instances created by the task.
The LoadMembers function is used to load members from a dimension, and they can be filtered or not. This function is considered a loading function.
Parameters:
[Operand] [Comparator] [Operand]
[Operand] = [Column] or [Constant] or [Instance] or [Expression]
[Operand] = [Property] or [Constant] or [Instance]
[Property] =
Name of a dimension property. The property name should be enclosed in square brackets.[Constant] =
Value of a constant. The constant value should be enclosed in double quotes.[Instance] =
Instance function. For more information on using the Instance function, refer to the function details in the function list.[Comparator] = "<=" or "=" or ">=" or "!="
Example: Instance(Member) = LoadMembers([Planning].[Entity])
In this example of an expression task, the identifications of the members in the Entity dimension of the Planning application will be assigned to the Member parameters of the instances created by the task.
Returns the name or value of a member property.
Parameters:
Examples:
Member([Application].[Dimension], "5")
Member([Application].[Dimension], "[Account].[Account].[&5]")
Member([Application].[Dimension], "[Account].[Account].[&5]", "Property")
Returns the description of the process.
Parameters: None
Returns the name of the process.
Parameters: None
The RemoveDataTableRow function is used to remove records from a data table.
Parameters:
Example: Instance(Units) = RemoveDataTableRow([Consumption Unit], [Contract] = Instance(Contract));
In this example of an expression task, the records in the Consumption Unit data table are removed, where the removal filter is the Contract column having the value of the Contract instance parameter. In this example, the Units instance parameter will receive the number of removed records.
Returns the name and email of the person responsible for the task.
Parameters:
Example: Responsible(Current)
Returns the email of the person responsible for the task.
Parameters:
Returns the name of the person responsible for the task.
Parameters:
The Sum function is used to sum the values contained in a multivalued parameter.
Parameters:
Example: Instance(Value) = Sum(Values)
In this example of an expression task, the sum of the values contained in the Values parameter will be assigned to the Value parameter of the instance.
Returns the description of the current task.
Parameters: None
Returns the name of the current task.
Parameters: None
Lanes are used to organize and categorize activities according to their function or role.
A lane can have a collection of users or even a collection of user groups. The users contained in the lane, directly or indirectly, will have the function or role performed by the lane.
Lanes are independent of applications and models. Thus, the same lane can be used in various distinct processes.
Each lane belonging to a process has a one-to-one relationship to the lane.
Triggers are T6 Planning mechanisms for creating new instances of a process. Triggers can be executed manually, automatically, or through T6 Planning Services.
When a trigger is fired, a new instance is created in the process predefined in the trigger's creation. The new instance is created at the start of the process and executed by the workflow execution engine until it encounters a manual task or reaches the end of the process.
Triggers can be fired manually, automatically, or through T6 Planning Services.
The available events for trigger firing are:
To execute a process, an instance must be initiated and parameterized. In addition, the definition of those responsible for the process activities must be made.
When a trigger is executed, manually or automatically, a new instance will be created. This initialized instance will have its parameter values filled with the values found in the trigger that originated the instance.
The new instance created will traverse the flow until reaching the end. During the flow, the instance may require manual action from a user. When this happens, the instance will wait for the interactivity of the user responsible for the current activity.
When manual interactivity is required, the user must perform an action in the activity.
The available actions are:
The responsibility of a manual activity can be defined in various ways, as described below.
When an activity is within a lane and the process does not have any responsible parameter type, the responsibility of the activity is visible to all users belonging to the lane.
When an activity is not within a lane and the process has a responsible parameter type, the responsibility of the activity is assigned to the user defined in the responsible parameter.
When an activity is within a lane and the process has a responsible parameter type, the responsibility of the activity will be visible to all users belonging to the lane until no user assigns the activity to himself. If a user assigns the instance to himself, only the assigned user will see the activity.
An activity is considered to have dynamic responsibles when the process to which it belongs is configured to dynamically load responsibles from a data table. In this situation, whenever the instance enters a manual activity, the responsibles for the activity will be loaded from the data table and stored in the parameter of type Responsibles. The first responsible in the responsibles list will be stored in the Responsible type parameter.
This topic covers role and function configurations of users responsible for process tasks.
A process type role allows the user to access cube information. When a user's roles are requested by the application, for each instance assigned to the user, a role containing the member type parameter information relevant to the application in question is created.
New functions have been made available to make access to new functionalities more flexible for users. Below are the new available functions:
Users with this function have permission to create, edit, and remove processes. Available only for Manager users.
Users with this function have permission to create, edit, and remove triggers. Available only for Manager users.
Users with this function have permission to create, edit, and remove lanes. Available only for Manager users.
Users with this function have permission to stop a running instance. Available only for Manager users.
The same function that allows the user to stop an instance will also allow pausing an instance of a process.
The same function that allows the user to stop an instance will also allow resuming an instance of a process.
Users with this function have permission to pinch instances. Available only for Manager users.
Users with this function have permission to publish processes. Available only for Manager users.
Users with this function have permission to reject a running instance. The option will only be available if the item from the previous process to the current task is a manual task. Available only for Planner users.
Users with this function have permission to view instances. Available only for Planner users.
Users with this function have permission to execute triggers. Available only for Planner users.
Users with this function have permission to view processes. Available only for Manager users.
Below is an example of a process created with the new BPM workflow available in T6 Planning.
A user registers an expense reimbursement in a data form. If the reimbursement amount is less than R$500.00, the reimbursement is automatically approved. If the reimbursement amount is greater than R$500.00 and less than R$10,000.00, the reimbursement requires manual approval from a user participating in the reimbursement lane. If it is greater than R$10,000.00, the reimbursement is automatically rejected.