DCWorkflow (slight return)
I seem to be spending a lot of time inside Plone's workflow engine at the moment. This time I'm moving items around the portal depending on their workflow state (using workflow for archiving in this particular instance).
It's a fairly common use case and there are a few recipes out there ([1], [2], so I won't replicate them here.
That said, it's not made wholly clear in the first (from Andy McKay's excellent Definitive Guide to Plone) or at all in the second that when raising the state_change.ObjectMoved exception the first object passed is the object affected by the workflow (after the move), while the second is where you want the user redirected to.
So rather than automatically passing new_obj twice you can always pass a different second object (say the original location's parent folder). This makes a lot more sense in my case, for example, where my users are likely to be archiving a number of items simultaneously.