All long-running process in one place.
Some operations take some time to be done (i.e. Send Newsletters, Renew contracts, Send weather forecasts).
Process module gives you a unified model for writing long-running process, giving you the following advantages:
From the developer point of view, process are long-running algoritms that can be supended and restored safely because they store their execution state in the database.
There are three main entities involved:
Symbolentity that represents the object with the process algorithm implementation. There are base classes and extension methods to simplify implementing this logic.
IProcessData, execution state, user that triggered the proces, extra arguments, etc...
Operations, Scheduled tasks or any other piece of business logic can trigger the execution of a new process.
For the end user, a process is just another entity that has some familiar icons: Play, Stop, Pause, Cancel, etc...
While a process is running (on windows or web interface) a progress bar shows the current execution progress, as well as the global or per-line exceptions that could be happening.
Additionaly, the server has a Process Control Panel showing a resume of the last process executions, as well as all the in-memory state of the
ProcessRunner. Using this interface you can also Start/Stop the
ProcessRunner and control their initial configuration (degree of parallelism, initial delay...)
In server farm scenarios, process execution can be distributed to other servers that are not busy attending requests.
Each server can be configured to work isolated, running only the processes that he has generated, or be able to generate processes and/or execute process in a common pool of many servers.
Just by starting the Process module, the search controls get the hability to run operations over multiple entities using a context menu.
Out of the box, any non-lite
Delete operation can be executed for multiple entities, and you can enable the feature for any
ConstructFrom operation that saves the generated entiy.
If an operations has been overriden in the client side, it won't get multi-entity execution until
ContextualFromMany is also overriden, ensuring a good behaviour in all cases.
Turn back to Signum Extensions