Question
· Oct 5, 2023

Routing rule equivalence question

Is there a difference in outcome between the two screengrabs below?

In both cases, when  certain conditions are met, a transformation is called and the output sent on to two targets. In the first case we surmise the transformation is called twice, and the output of the first run sent to the first target, the output of the second run to the second target. In the second case we surmise the transformation is called once, and the output duplicated and sent to the two targets. 

  • Are there any cases where they would not be functionally the same (eg because of side-effects of the transformation?)
  • Could there be performance differences - from only calling the transformation once rather than twice? If so, how significant could those be in a Production handling 40K-50K messages a day (Healthcare, HL7), especially since this pattern of coding is replicated in several places across the production.

Product version: Ensemble 2018.1
$ZV: Cache for Windows (x86-64) 2018.1 (Build 184U) Wed Sep 19 2018 09:09:22 EDT
Discussion (2)1
Log in or sign up to continue

Hello @Colin Brough 

I Believe, There is no functional difference between rule 1 and rule 2 except the invoking the DTL twice and finally call the Target. By default it has the feature to call multiple targets once the transformation completed. You utilized the feature in rule 2. That's the exact way to call multiple target unless different message and different transformation required. There will be a performance difference should be there. Because it executes the DTL first every time and eventually call the targets asynchronously(Whether it's asynchronous or synchronous It depends on the configuration in production Business process).

For the sake of closing off this old question, and to answer my own question, in light of more experience and some testing...

  • side effects of the transformation could, in theory, change the behaviour - but it'd have to be a transformation that had side-effects (eg kept some kind of state across executions, whether in globals or on the filesystem or in some other way)
  • performance could be affected, since transformation is called twice rather than once, but in most cases the difference is likely to be negligible.