Business process management (BPM) is a disciplined approach to identify, design, execute, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate, collaborative and increasingly technology-aided definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.
A BPM Example:
Task name : Approval process
Task Description:
Clients ask for a way to block the modification of prices and discounts in quotes. Additionally, some quotes will have an approval mechanism for discounts.
The client has this hierarchy:
CEO
| Finance
| Sales Director
| Assistant
| Area Manager
Example use case: Area Manager creates a quotes which has a certain marginality. If the marginanlity is greater than 20 % the quote's automatically approved. If it's between 15 and 20% then the Sales Director needs to approve it. If it's lower than 15 than Sales Director, Finance and CEO have to approve it. Assistant can create a quote for Area Manager but than he needs to approve it.
To solve this task we’ve created extra status (quote stage) (Approved, Awaiting Approval, Refused, Approved by Finance,Approved by CEO etc),a Workflow Task, a Mermaid Business Question and a Process Flow with some Process Steps.
A[Created] --> B[Refuse]
A --> C[Approved]
I --> D
A --> D[Approved by CEO]
A --> E[Refused by CEO]
B --> F[Accepted by Finance]
B --> G[Refused by Finance]
C --> F
C --> G
F --> I[Awaiting Approval]
G --> I
I --> E
Taking the task step by step:
For this step it’s not necessary to make a process step we need a simple update field workflow as in the example below:
In this case the Quote need to be approved only from the Sales Director so the quote stage goes from Created directly to Approved by CEO or Refused by CEO
To do this we need to create:
The first Created → Approved by CEO
The second Created → Refused by CEO
The condition expresion map holds the logic of the implementation.
<map><expression>
<![CDATA[if AND(marginality>'14',marginality<'21',
getCurrentUserField('roleid') == 'H4') then 1 else 0 end]]>
</expression></map>
H4 → the role id of Sales Director
The validation is an intermediary map created in order to validate the condition expresion map which holds the logic of the implementation.
<map>
<originmodule>
<originname>Quotes</originname>
</originmodule>
<fields>
<field>
<fieldname>marginality</fieldname>
<validations>
<validation>
<rule>expression</rule>
<restrictions>
<restriction>sales_director_role</restriction>
</restrictions>
</validation>
</validations>
</field>
</fields>
</map>
In this case the Quote need to be approved firstly by the Sales Director, secondly by Finance and finally from CEO. This part of the tasks have to go step by step, so if the Sales Director have not denied or approved the quote no one else have the permission to do it. The map goes : Created → Approved/Refuse → Approved by Finance/Refuse by Finance → Approved by CEO/Refuse by CEO
The first Created → Approved
The second Created → Refused
The condition expresion map holds the logic of the implementation.
<map><expression><![CDATA[if AND(marginality<'15',getCurrentUserField('roleid') == 'H4') then 1 else 0 end]]></expression></map>
H4 → the role id of Sales Director
The validation is an intermediary map created in order to validate the condition expresion map which holds the logic of the implementation.
<map>
<originmodule>
<originname>Quotes</originname>
</originmodule>
<fields>
<field>
<fieldname>marginality</fieldname>
<validations>
<validation>
<rule>expression</rule>
<restrictions>
<restriction>second_user_role</restriction>
</restrictions>
</validation>
</validations>
</field>
</fields>
</map>
The first Approved → Approved by Finance / Refused by Finance
The second Refused → Approved by Finance / Refused by Finance
The condition expresion map holds the logic of the implementation.
<map><expression>if getCurrentUserField('roleid') == 'H3' then 1 else 0 end></expression></map>
H3 → the role id of Finance
The validation is an intermediary map created in order to validate the condition expresion map which holds the logic of the implementation.
<map>
<originmodule>
<originname>Quotes</originname>
</originmodule>
<fields>
<field>
<fieldname>marginality</fieldname>
<validations>
<validation>
<rule>expression</rule>
<restrictions>
<restriction>third_role</restriction>
</restrictions>
</validation>
</validations>
</field>
</fields>
</map>
The first Approved by Finance / Refused by Finance → Awaiting Approval
The second Awaiting Approval→Approved by CEO / Refused by CEO
The condition expresion map holds the logic of the implementation.
<map><expression>if getCurrentUserField('roleid') == 'H2' then 1 else 0 end></expression></map>
H2 → the role id of CEO
The validation is an intermediary map created in order to validate the condition expresion map which holds the logic of the implementation.
<map>
<originmodule>
<originname>Quotes</originname>
</originmodule>
<fields>
<field>
<fieldname>marginality</fieldname>
<validations>
<validation>
<rule>expression</rule>
<restrictions>
<restriction>ceo_role</restriction>
</restrictions>
</validation>
</validations>
</field>
</fields>
</map>