-
1. Re: Decision node always taking first option
arutha Sep 11, 2007 6:11 AM (in response to arutha)
Tested it with other Java basetypes, doesn't matter.
However, I rebuilt to a DecisionHandler class making the choice, the node-code:<decision name="decrypt?"> <handler class="process.ProcessDecision" /> <transition name="decrypt" to="ForwardResult1" /> <transition name="nodecrypt" to="ForwardResult2" /> </decision>
And that works fine. However, it's practical in most of the situations I need these nodes to make DecisionHandler subclasses. So, any idea what could cause the original code to always take the first option? -
2. Re: Decision node always taking first option
kukeltje Sep 11, 2007 7:46 AM (in response to arutha)there have been some small things related to database types etc... please search the forum first for related items and check if they apply to your case. If not, please report which ones you found and tried and from then on we can look further
-
3. Re: Decision node always taking first option
arutha Sep 11, 2007 8:32 AM (in response to arutha)
Well, that was the first step I took, and nothing really directly applied.
For example, this guy seems to have the same problem:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=118091
But you suggested to him to search this fine, fine forum. I agree, it's a fine forum. Blue's my fav colour.
Next, I read this post:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=118015
It's how I came up with the workaround, but it still doesn't talk about this problem at all.
Closest thing in description-terms was this one:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=117835
But it talks of troubles in JSF-world, I'm not running a front-end, no JSF/JSP comes to play here. It's a pretty straight-forward process I'm running.
If you know a thread on the forum that I missed, I'd be much obliged if you could paste the URL... -
4. Re: Decision node always taking first option
razieh Sep 12, 2007 9:11 AM (in response to arutha)public void approve(long id) {
User user = (User) em.createQuery("select u from User u where u.id=" + id).getSingleResult();
TaskInstance ti = taskInfo.findTaskInstance(taskId);
ti.start();
this.dossierAssignee = user;
ti.end("taskCreatePetition");
}
public void cancel(long id) {
User user = (User) em.createQuery("select u from User u where u.id=" + id).getSingleResult();
TaskInstance ti = taskInfo.findTaskInstance(taskId);
ti.start();
this.dossierAssignee = user;
ti.end("taskPrepareLetterForDossierSource");
}
i hope it can help you. -
5. Re: Decision node always taking first option
razieh Sep 12, 2007 9:15 AM (in response to arutha)sorry.actually this code can help you.
public void approve(long id) {
TaskInstance ti = taskInfo.findTaskInstance(taskId);
ti.start();
this.dossierAssignee = user;
ti.end("ForwardResult1");
}
public void cancel(long id) {
TaskInstance ti = taskInfo.findTaskInstance(taskId);
ti.start();
this.dossierAssignee = user;
ti.end("ForwardResult2");
} -
6. Re: Decision node always taking first option
arutha Sep 12, 2007 10:51 AM (in response to arutha)
Razieh,
I don't see the connection with my question.
It seems you're talking about buttons or such on JSP/JSF by the looks of the names on your Java-code, I'm not using any JSP/JSF. In fact, I'd like to solve this without any Java-code at all.. or SQL, for that matter. Purely in the process definition file, using the decision nodes....
I can get it to work writing a class extending DecisionHandler, but it's not practical to code a new class or even part of the same for each decision node.
My problem is simply this: the decision node always takes the first transition, no matter the condition. I want to be able to make choices based on a Pojo in working memory. The Pojo is accesible (read first post) and getters work fine. It must be a problem with the condition of the condition node. -
7. Re: Decision node always taking first option
petia Sep 12, 2007 11:45 AM (in response to arutha)Hi,
The following worked for me (in jBPM 3.1.4). 'scenario' is a variable to which I enter value earlier in the process.
Hope it will help you. (It took me while to figure out how to extract a variable value, even if it is a very basic thing.)
Cheers, Petia<decision name="xor"> <transition name="urgent" to="task-b"> <condition expression="#{contextInstance.variables['scenario']== 1}"/> </transition> <transition name="dont care" to="task-c"> <condition expression="#{contextInstance.variables['scenario']== 2}"/> </transition> <transition name="forget about it" to="task-d"> <condition expression="#{contextInstance.variables['scenario'] != 2 and contextInstance.variables['scenario'] != 1}"/> </transition> </decision>
-
8. Re: Decision node always taking first option
estaub Sep 12, 2007 12:58 PM (in response to arutha)Petia,
This shouldn't be necessary.
I'm not saying it ISN'T necessary in some context - but I can't imagine what it is. It'll be interesting to see if it helps Arutha.
This is the kind of problem I'd debug into JBPM to figure out. However, be warned - the variable-handling code is probably a lot more complex than you would expect.
-Ed Staub -
9. Re: Decision node always taking first option
kukeltje Sep 12, 2007 8:04 PM (in response to arutha)I think (not sure) the Script 'engine' does have access to normal objects in memory and the EL resolver only has access to variables.
There was a request from the SEAM guys (Gavin himself afaik) to make the jbpm resolver pluggable, so it *could* use the same one as seam does. There was something in the jira related to this -
10. Re: Decision node always taking first option
arutha Sep 13, 2007 6:25 AM (in response to arutha)
I'm certain the Script-engine has access to Objects in memory, since I can call any function in the object from the script in the process definition and get a valid response. (See my node-enter action above, that works)
I'm also sure Objects can be accessed in conditions, as it is one of the examples in the jBPM folder, like so:<decision name="decline?"> <transition name="no" to="base rating"> <condition expression="#{quoteWorkingObject.declineCount == 0}"/> </transition> <transition name="yes" to="end1"> condition expression="#{quoteWorkingObject.declineCount > 0}"/> </transition> </decision>
I'm about to give Peta's example a shot, though the syntax differs from the example given in jBPM. -
11. Re: Decision node always taking first option
kukeltje Sep 13, 2007 7:04 AM (in response to arutha)ths script enginge I'm sure, the EL not. In the example you describe, the quoteWorkingObject IS a processvariable and not just an object in memory.
Ignore petia's example since that also uses a processvariable and just another (imo less wanted) syntax. -
12. Re: Decision node always taking first option
estaub Sep 13, 2007 9:00 AM (in response to arutha)>> Ignore petia's example since that also uses a processvariable and just another (imo less wanted) syntax.
That is, of course, unless it works! ;-)
I have a vague memory of running into the same problem and using Petia's workaround early this year., when I was just starting with JBPM. Unfortunately, I don't remember anything useful, like what the underlying problem was, except that as you'd guess, it had to do with variable resolution.
-Ed Staub -
13. Re: Decision node always taking first option
arutha Sep 13, 2007 9:04 AM (in response to arutha)
Indeed, I'd rather use the straight-forward syntax, you're right about that.
Doesn't the object become a process variable by using the mapping in ESB?
As follows (thursday already...?):<property name="esb-to-jbpm"> <!-- esb-name maps to getBody().get("eVar1") --> <variables> <variable esb-name="some_object" jbpm-name="jbpm_object" /> </variables> </property>
Meaning the process 'should' have acces to the 'jbpm_object'-variable? -
14. Re: Decision node always taking first option
petia Sep 13, 2007 10:13 AM (in response to arutha)I am too very interested in a more straight-forward syntax (but the syntax given in the documentation did not work for me), so please let me know when you have solved it. (Note also that I am working in version 3.1.4 and the syntax in 3.2 may be different.)