Is there a way to trigger a user interaction if, and only if a certain field has changed value?
It seems that no information about the previous state is available to the workflow when a projection action is triggered.
Is there a way to trigger a user interaction if, and only if a certain field has changed value?
It seems that no information about the previous state is available to the workflow when a projection action is triggered.
You need to define a Custom Event with a event action of type ”workflow”. This connects the triggering (event action) to the workflow. Then you can define the triggering of the event either by changes in a database table or changes in one specific field. Both old and new values of the field can be tracked. This means that when the user modifies a field the event action is triggered and the workflow gets executed.
I understand that, but that isn’t supported with Workflows that contain user interactions.
Is there a work-around for that?
Hmm, this seems more tricker than it should be. I tested with a workflow firing on Update of PartCatalogSet in projection PartHandling. I start the workflow by checking the value of InfoText in the input to see whether it’s null, an empty string (‘’) or has a value using: execution.getVariable('InfoText')
It works when I edit the Information Text field to have a value on the page, in which case the client sends the following payload: { "InfoText": "x" }
But regardless of whether I blank the field out - { "InfoText": null }
- or change another field - { "VolumeNet": "125" }
- the call to execution.getVariable('InfoText')
returns null. I.e., I can’t check whether the field is present, unless there’s another smart way.
The work-around for this would be to make a projection call in the workflow to get current value of your field from the database, but that might mean a lot of unnecessary server calls. Mockup:
Very interesting approach. I assumed that the call of the projection event would happen after the persisting to the db had happened.
Have you actually tried this yet?
If not, i might. :)
I dabbled with the first approach I mentioned, which is how I found the problem with blanking out the field. I have not tried adding the server call to check the old value. Sorry, I have to focus on my day job now. :P
Without trying anything, a second (process enrichment) workflow that would buffer the last value of a given attribute in a custom field would surely do the trick without hogging the database for requests.
It would be a really ugly workaround for a rather strange limitation, though.
I will probably try the fetch and compare method tomorrow and report.
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.