Hi Rahul, thanks for the quick reply. i opened the JIRA ticket for the
donedata as you suggested.
But i still cannot get this to work even with your suggested
modifications. Here is the log of execution (it seems that the
assignment to AAA doesn't persist).
DEBUG 10:14:22.086 [Thread-1 ] [sax ] endDocument()
DEBUG 10:14:23.103 [Thread-1 ] [Context ]
_ALL_NAMESPACES = {=http://www.w3.org/2005/07/scxml,
cs=http://commons.apache.org/scxml}
DEBUG 10:14:23.129 [Thread-1 ] [ExpressionFactory ]
Parsing expression: 10;
DEBUG 10:14:23.131 [Thread-1 ] [Context ]
_ALL_NAMESPACES = null
DEBUG 10:14:23.131 [Thread-1 ] [Context ] cook_time = 10
DEBUG 10:14:23.131 [Thread-1 ] [Context ] AAA =
[data: null]
DEBUG 10:14:23.132 [Thread-1 ] [Context ]
_eventdata = null
DEBUG 10:14:23.132 [Thread-1 ] [Context ]
_eventdatamap = {s1.entry=null}
DEBUG 10:14:23.132 [Thread-1 ] [Context ]
_eventdata = null
DEBUG 10:14:23.132 [Thread-1 ] [Context ]
_eventdatamap = {s11.entry=null, s1.exit=null, s2.entry=null}
DEBUG 10:14:23.132 [Thread-1 ] [Context ]
_ALL_NAMESPACES = {=http://www.w3.org/2005/07/scxml,
cs=http://commons.apache.org/scxml}
DEBUG 10:14:23.133 [Thread-1 ] [ExpressionFactory ]
Parsing expression: AAA;
DEBUG 10:14:23.133 [Thread-1 ] [ExpressionFactory ]
Parsing expression: 's3';
DEBUG 10:14:23.134 [Thread-1 ] [ExpressionFactory ]
Parsing expression: 's3';
DEBUG 10:14:23.134 [Thread-1 ] [SCXMLSemantics ]
<assign>: data node 'data' updated
DEBUG 10:14:23.134 [Thread-1 ] [Context ]
_ALL_NAMESPACES = null
DEBUG 10:14:23.134 [Thread-1 ] [Context ]
_eventdata = null
DEBUG 10:14:23.134 [Thread-1 ] [Context ]
_eventdatamap = {s11.exit=null, s12.entry=null, null.change=null,
s2.done=null}
DEBUG 10:14:23.134 [Thread-1 ] [Context ]
_ALL_NAMESPACES = {=http://www.w3.org/2005/07/scxml,
cs=http://commons.apache.org/scxml}
DEBUG 10:14:23.134 [Thread-1 ] [ExpressionFactory ]
Parsing expression: AAA eq 's3';
DEBUG 10:14:23.134 [Thread-1 ] [Context ]
_ALL_NAMESPACES = null
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_ALL_NAMESPACES = {=http://www.w3.org/2005/07/scxml,
cs=http://commons.apache.org/scxml}
DEBUG 10:14:23.135 [Thread-1 ] [ExpressionFactory ]
Parsing expression: AAA eq 's4';
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_ALL_NAMESPACES = null
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_ALL_NAMESPACES = {=http://www.w3.org/2005/07/scxml,
cs=http://commons.apache.org/scxml}
DEBUG 10:14:23.135 [Thread-1 ] [ExpressionFactory ]
Parsing expression: AAA;
INFO 10:14:23.135 [Thread-1 ] [SCXMLSemantics ] null:
[data: null]
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_ALL_NAMESPACES = null
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_eventdata = null
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_eventdatamap = {s2.exit=null, s12.exit=null, s5.entry=null,
.done=null}
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_eventdata = null
DEBUG 10:14:23.135 [Thread-1 ] [Context ]
_eventdatamap = {s1.entry=null}
DEBUG 10:14:23.135 [Thread-1 ] [SCXMLExecutor ]
Current States: [s5]
here are the modified files:
=============file a.scxml=====================================
<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml"
xmlns:cs="http://commons.apache.org/scxml"
version="1.0"
profile="ecmascript"
initial="s1">
<!-- trivial 5 second microwave oven example -->
<!-- see http://commons.apache.org/scxml/guide/datamodel.html for
different way to access the datamodel -->
<datamodel>
<data id="cook_time" expr="10"/>
<data id="AAA" expr="''"/>
</datamodel>
<state id="s1">
<!-- off state -->
<transition target="s2"/>
</state>
<state id="s2" src="b.scxml#s111">
<!-- on/pause state -->
<transition event="s2.done" cond="AAA eq 's3'" target="s3"/>
<transition event="s2.done" cond="AAA eq 's4'" target="s4"/>
<transition event="s2.done" target="s5"/>
<onexit>
<log expr="AAA"/>
</onexit>
</state>
<final id="s3"/>
<final id="s4"/>
<final id="s5"/>
</scxml>
=============end of file a.scxml==============================
=============file b.scxml=====================================
<?xml version="1.0" encoding="us-ascii"?>
<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml"
xmlns:cs="http://commons.apache.org/scxml" initial="s111">
<state id="s111">
<initial><transition target="s11"/></initial>
<state id="s11">
<transition target="s12">
<!--<cs:var name="aaa" expr="'s3'" />-->
<assign location="AAA" expr="'s3'"/>
</transition>
</state>
<final id="s12">
</final>
</state>
</scxml>
=============end of file b.scxml==============================
thanks,
fabrizio.
On Thu, May 6, 2010 at 09:52, Rahul Akolkar <[email protected]> wrote:
> On Thu, May 6, 2010 at 11:34 AM, Fabrizio Morbini <[email protected]> wrote:
>> Hi, i'm experimenting with the src attribute to reuse fsm. I'm having
>> some trouble with returning a value from an included fsm to the
>> calling state.
>>
>> I'm using this description at
>> http://shale.apache.org/shale-dialog-scxml/index.html, in particular
>> the section about subdialogs from which it seems possible to return a
>> value from an included scxml fsm.
>> However i have been unable to do so. I've tried several variants but
>> none with the expected outcome.
> <snip/>
>
> The Commons SCXML v0.9 release does not use a flat / global datamodel
> by default, therefore the value would need to be copied up to a
> datamodel with a superior position in the states topology (such as
> document root to be available across any other state). I will outline
> this approach using your example below.
>
> Alternatively, provide the SCXMLExecutor with a custom Evaluator
> implementation that returns the same context (the root context) on
> every Evaluator#newContext() call to obtain a flat datamodel. If you
> do this, there would be no changes required to the example below.
>
> Now, for the first approach with the default cascading datamodel, see below:
>
>
>> Here is the current variant:
>>
>> =============file a.scxml=====================================
>> <?xml version="1.0"?>
>> <scxml xmlns="http://www.w3.org/2005/07/scxml"
>> xmlns:cs="http://commons.apache.org/scxml"
>> version="1.0"
>> profile="ecmascript"
>> initial="s1">
>>
>> <!-- trivial 5 second microwave oven example -->
>> <!-- see http://commons.apache.org/scxml/guide/datamodel.html for
>> different way to access the datamodel -->
>> <datamodel>
>> <data id="cook_time" expr="10"/>
> <snap/>
>
> Define a global 'aaa' variable here, say like so (note different case
> used here, i.e. chose a different name of choice):
>
> <data id="AAA" />
>
>
>> </datamodel>
>>
>> <state id="s1">
>> <!-- off state -->
>> <transition target="s2"/>
>> </state>
>>
>> <state id="s2" src="b.scxml#s111">
>>
>> <!-- on/pause state -->
>>
>> <transition event="s2.done" cond="aaa eq 's3'" target="s3"/>
>> <transition event="s2.done" cond="aaa eq 's4'" target="s4"/>
>> <transition event="s2.done" target="s5"/>
>>
>> </state>
>>
>> <final id="s3"/>
>> <final id="s4"/>
>> <final id="s5"/>
>> </scxml>
>> =============end of file a.scxml==============================
>>
>> =============file b.scxml=====================================
>> <?xml version="1.0" encoding="us-ascii"?>
>> <scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml"
>> xmlns:cs="http://commons.apache.org/scxml" initial="s111">
>> <state id="s111">
>> <initial><transition target="s11"/></initial>
>> <datamodel><data id="aaa"/></datamodel>
>>
>> <state id="s11">
>> <transition target="s12">
>> <!--<cs:var name="aaa" expr="'s3'" />-->
>> <assign location="aaa" expr="'s3'"/>
> <snip/>
>
> Change the above to point to the variable defined in the parent
> document above like so:
>
> <assign location="AAA" expr="'s3'"/>
>
> Obviously, this would imply that b.scxml could only be executed when
> included in a.scxml since it references a datamodel variable in
> a.scxml. If that is not desired, the second approach i.e. the flat
> datamodel approach should be used.
>
>
>> </transition>
>> </state>
>>
>> <final id="s12">
>> </final>
>> </state>
>> </scxml>
>> =============end of file b.scxml==============================
>>
>> i tried to use also <var> instead of a previously defined variable in
>> the datamodel, without success.
>>
>> the simple way would be to use the donedata in a final state in the
>> included fsm but it doesn't seem that donedata is supported, is this
>> correct?
>>
> <snap/>
>
> Yes, not in v0.9, we will look to add it soon. You could open a JIRA
> issue as a reminder.
>
>
>> given that src is not going to be supported in the next standard, do
>> you have some pointer to examples/doc of how to use xinclude to do
>> what the src is supposed to do?
>>
> <snip/>
>
> Don't have a ready example, but the idea is to pull in as much of the
> document as needs to be reused using XInclude. See XInclude
> specification for more details. It certain cases, the XInclude
> approach requires more work but is favored since its a standard way to
> do includes.
>
> -Rahul
>
>
>> thanks,
>> fabrizio.
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]