Workflow will be the best option. From my experience event listener is sometimes missed, especially when bulk operations are performed.
Another advantage of workflow is you can check which workflow is running, aborted, and finished. But for event listeners, you only have to check log.
And if you write your own workflow process you can trigger it from any of your backend code. I mean from any service, model, servlet.