Metastorm has introduced the use of Business Objects in v9. Using business objects has been around for some time in mature enterprise class BPM applications and finally Metastorm have realised their useful application. A Business Object is a container for the data used in your processes. It is a computer representation of a real world business entity such as a sales order, a product, a division, a department or an employee.
Metastorm business objects can be created as :
– processData (the metastorm variables you use in the processes that we used to call ‘custom variables’)
– contextData (the metastorm eFolder information stored on the Metastorm database)
– table data (data retrieved from a single database table. The query builder allows the WHERE clause to the built))
– query data (a custom SQL query (table joins for example))
– LDAP query data (retrieved from a directory server (windows user data for example))
When using a grid in a form for example, we would point the grid at a created Business Object, which itself looks to a connection (the configuration settings for a database, web service or LDAP source). For drop down lists you can reference a Business Object (which already has a connection) or run a custom select against a connection.
Another great feature added along with the Business Objects in v9 is the intellisense style access to the business object. If you’re assigning a value for example, you can reference a variable member of a business object in the same way you would access a class member in CSharp (BusinessObject.Member).
Visual Script Editor
One of the features that I hold competing feelings about is the introduction of the new visual scripting feature. The removal of the ‘do this’ event handler panels that allowed the experienced Metastorm developer to just write functions like they would an email allowing speedy development is not so great. When you have 3 other changes in mind that the change you are performing affects, speed of code implementation is a critical factor. The replacement for this is the visual script editor, a fancy new interface for building a sequential set of script activities that can be saved as a Visual Script and be re-used within other visual scripts (embedded scripting). I really like the re-use portion of this new feature which mirrors the true object orientated approach and the inclusion of the CSharp code activity (JScript if you fancy) provides a new level of .NET pluggability in your processes.
The activities you can use to build a visual script are listed below. The introduction of looping (While and For Each) is a much needed feature that many a v7 developer has wanted for a while. For looping in 7, you could use JScript, stored procedure cursors and if you really had to looping of a system stage (incrementing (or reducing) a variable value each time until the looping could exit through a conditional action). The while loop is pretty self explanatory in that it executes a set of activities whilst an expression evaluates to FALSE. The for each loop provides a great way to action a set of activities against each member of a business object or selected table data from one of your connections.
Clicking into the stage onStart and onComplete event handlers or the action onStart and onComplete will send you to the visual scripting editor. If you have made commonly used visual scripts available to the scripting toolbox, you can re-use your scripts (e.g. debugging, messaging, error logging) in your processes actions and stages.
This new visual approach is great for the Business Analysts who may not be the most technical of users but the lack of immediate coding of the metastorm native functions may annoy some developers.
Native visual script activities:
Assign Value(s) – A Collection. Assignments execute in the order specified.
Code Activity – Execution of CSharp of JScript custom code.
Write to Log – Writes to the eLog a custom error.
Evaluate %Script – Import of a v7 script
For Each (e.g. run a custom cSharp script for each member of a business object)
Write to a File (useful for debugging)
Save Folder to File
Insert Database Row
Delete Database Row(s)
Update Database Row(s)
Add Metastorm User
Update Metastorm User
Delete Metastorm User
Assign User to Rule
Remove User from Role
Note that we see no parallel execution activity or true atomic transaction support (with compensatory activities). I understand that these are more process features (.NET WF has these) and find it odd that Metastorm don’t employ these in the process itself, just the visual scripting. Odd.