DRD reuse DMN


#1

Hello

I have a DRD diagram demo2.dmn (6.1 KB)

I would like to reuse one of my DMN in the DRD, how can I do that?
My attached example contains an age dmn and I would like to create a new DRD and reuse the age dmn again.

Thanks you help in advance: Gábor


#2

Hi Gabor,

you have three options.:

a) You can insert the new decision into the same DRD.
b) You can use a DMN decision literal expression in the new DRD to call the decision table.
c) You can extract the decision and use a process for orchestration. It calls the decision first and calls the DRD afterwards with the result.

Does this help you?

Best regards,
Philipp


#3

Hello

Could you help me a bit about your response.
I would like to (re)use this DMN: age.dmn (1.1 KB)

a) In my demo DRD I am not able to insert the DMN only recreate one what is not useful :(.
b) I found a lot about the literal expression but I didn’ t find any tutorial/info how can I use. Do you have an example how can I call DMN from DRD literal expression? (or how can we use the literal in DRD)
c) I don’t understand sorry.

Thanks and regards: Gábor


#4

Hi Gábor,

regarding the questions:

b) There is no built-in way to call another DMN using a decision literal expression. But it’s not hard to build it on your own. You can write a script or invoke a class / bean which evaluates the decision. See the example for inspiration.

c) It’s a kind of decision flow. That means that you use a BPMN process to call the DMN decisions explicitly instead of using a DRD. Please have a look at the example.

Does this help you?

Best regards,
Philipp


#5

Hello

Thank you very much you response. Your link is very helpful.
In DRD point of view I see some improvements :).

Thanks a lot.

Regards: Gábor


#6

Hello,

We also needed this functionality, and have successfully integrated solution “b” in our codebase, based in the code on github https://github.com/camunda-consulting/code/tree/master/snippets/dmn-decision-chaining/dmn-decision-chaining-plugin/src/main/java/com/camunda/consulting. So we can use the expression dmn('dish', variableContext) the invoke another dmn.

We do have the following question: at this point the called DMN is expected to have a single matching rule, and a single column, whose value is used as return value to the “dmn” function. How can this be extended to 1) multiple matching rules and 2) multiple columns (and a combination of those two). Now, in the implementation of the “dmn” function, we have full access to the DmnDecisionTableResult instance, so all the data is available. The question then becomes how the result can be used in multiple columns of the calling dmn, without actually invoking the dmn function twice.

Is that question somewhat clear?

Thank you,
Stijn


#7

Hello @stijn.timbermont,

one idea is to make the dmn function stateful for a single evaluation and make the results available in serveral cells of the calling decision table.

Of course you should be careful with the state.

As the decision evaluation is very fast (https://blog.camunda.com/post/2016/08/dmn-performance-improvements/) you should judge the implementation overhead against the time used for further evaluations.

Hope this helps, Ingo