Part I
During the last //build/ conference a number of new WF4, or should I now say WF4.5, features where announced. While the list of new features isn’t earth shattering long some of the most annoying shortcomings where addressed.
Designer enhancements
As
a developer I spend a lot of time in the designer so any improvements
there are going to make me happy. And I am very happy to see some of the
new features.
Auto surround with a Sequence.
This
seemingly small feature is a real time saver. There are lots of places
where an activity has a child activity to execute, for example an If
activity has a Then and an Else and executes either. These are of type
Activity so by default you can add a single activity there. At runtime
this is no problem. Want multiple child activities? Just add a Sequence
and you can add as many child activities as you want. The problem is
that in the designer that means removing the existing child (you can put
it on the clipboard), adding a sequence and finally re-adding the
original child. Not difficult but somewhat cumbersome and I never like
deleting something I need and saving it on the clipboard.
No longer. Now
we can just drag a new Activity and the designer will automatically
wrap the existing activity in a Sequence. So much easier and a much
nicer way to work!
Annotations
Another
feature I missed greatly was adding comments to an Activity describing
its intent. All we had was the DisplayName and that was not much of a
replacement. Fortunately we now get Annotations allowing us to add more
information about the intent.
Search
Searching
through workflows is another big one. With small workflows it is quite
easy to see where a variable is used but when workflows get bigger this
becomes an increasingly hard problem. With WF4 I typically solve this by
opening the workflow XAML in a text editor and searching the raw XML.
While this works reasonably well it is less that perfect and one of
those tricks you need to pick up while working with WF4. The new search
capability will let you search through a workflow in the designer, as
you really should, just as any other Visual Studio artifact. Another
great improvement.
Multi-select of activities
As
soon as you start creating flow chart or state machine workflow you
will quickly find you have to rearrange the existing activities to make
place for a new one. Seems simple enough to move them right? Well you
are wrong as the designer only lets you select a single activity at the
time so you can’t move a group of them in one go.
Well no longer as we can now select multiple activities and drag them around as a group.
This is by no means the complete list of changes, here you
can find a more complete list, but these are the ones I think most
people, myself included, where really missing. Glad to see them being
added, now if only we could get to work with them today.
Part II
During the last //build/ conference a number of new WF4.5 features where announced. In part 1 I took a look at the designer improvements, here I am going to take a look at some of the runtime enhancements.
Runtime Enhancements
Part II
During the last //build/ conference a number of new WF4.5 features where announced. In part 1 I took a look at the designer improvements, here I am going to take a look at some of the runtime enhancements.
Runtime Enhancements
New activities
As
part of WF 4.5 we will see some new activities in the box. The number
isn’t earth shattering but as I always tell people WF activities are all
about your business and Microsoft can’t create activities tailored to
your business, you need to do so yourself.
One useful new activity is the NoPersistScope. Not that it is very hard to create yourself once you know how, I wrote a blog post about it here, but not easy to discover and certainly something that is very useful.
State machine
Although not completely new, it was released as part of the .NET 4 platform update 1,
the state machine is now rolled into the .NET framework proper so it
doesn’t require an additional install. Nice to see that back.
C# Expressions
One
thing a lot of developers are going to be very happy with is support
for C# expressions. Previously you where forced to use VB expressions,
even in a C# project. And while that isn’t extremely hard it did require
a mental switch and, as most C# developers aren’t fluent in VB, some
frequent searching for the right syntax. With WF 4.5 you can enter you
expressions using the C# syntax in a C# project and in VB syntax in a VB
project. So much better.
Besides
C# expression it appears we can also replace the expression authoring
experience with something we control using new extensibility points in
the designer. So far I have not seen any details of this so I am curious
to what kind of scenarios this opens up.
Versioning
The most important new feature is workflow versioning. In Part III - I will go into details on what this new feature brings us.
Part III
Versioning Workflows
To understand why this is so painful at the moment it is important to remember that workflow instances often run for a long time. And that is not just a long time in computer terms, like a few minutes, but a long time in human terms like weeks, months or even years.
Right not with WF4 you can’t change the definition of a workflow instance that is running even when it is persisted to disk. Doing so will result in any number of weird exceptions when the workflow tries to resume. And the fact that you can’t change the definition means you can’t fix a bug, all you can do is let the workflow run and make sure that new instances are started with a fixed definition. Not the nicest of situations and I am very glad this is being addressed.
The first part is the ability to add a version to a workflow instance using a WorkflowIdentity object. This doesn’t fix the versioning issue itself but at least we get a predictable exception.
The second part if the capability to create update maps and update the state of a persisted workflow instance to a newer version. This capability gives us a lot of control as we can choose which workflow instance we upgrade and which we keep at the current version. Basically we create a DynamicUpdateMap and use the DynamicUpdateServices.PrepareForUpdate() to update a workflow instance state. A great and long awaited addition to the workflow runtime.
The final versioning piece is an addition to the WorkflowServiceHost allowing it to host multiple versions of a workflow. This is something we can now achieve using the WCF routing service but is far from trivial to implement. This should make the scenario of versioning workflow services much easier.
No comments:
Post a Comment