Procedures provide a graphic definition of component methods that do not have interaction with end users. Procedure use a graphical syntax similar to ALBPM Studio processes.
Procedures contain a set of activities that is executed by a single participant. It also has a reduced set of activities that can be used. No roles are allowed because a procedure is limited to automatic activities.
Procedures are designed to be used in any part of a process. A procedure cannot be used outside the project that it belongs to, but it can be reused among Processes in the same Project.
As it has an automatic behavior, a procedure does not have roles and it only includes automatic activities. That is, activities of the following types: Begin, End, Process Creation with no Termination Wait activity, Process Notification, Automatic, and Split-Join). It also includes Groups and Compensate Transitions.
Procedures should be used in order to reuse part of a process. They are the right way to share process behavior between more than one process or inside the same process (calling the same procedure several times) instead of using IPC.
Once the process instance reaches an activity that executes a procedure, it remains there until the procedure finishes. The process instance is never in the procedure. The process instance actually remains in the process therefore, whatever you 'apply' in the procedure does not affect the process instance.
The procedure instance is a separate instance and the operations performed over the instance within the procedure will not apply to the process instance. For example, neither adding notes nor attachments will apply to the process instance. If you need to use any of the process instance variables data, they need to be passed as arguments.
Procedures are defined as atomic. The rollback is automatically done by the Engine.
Exceptions cannot be treated inside a Procedure, they are thrown to the immediate outer group (or parent group).
The Order is composed of a header and line items. The first procedure activity can be the storage of the header and the second one can be the storage of each individual line item. You can implement the loading of the order in the same way-a procedure activity will load the header and another activity will load the order line items.
