On Thu, May 6, 2010 at 1:24 PM, Fabrizio Morbini <[email protected]> wrote: > 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). > <snip/>
Ah, too much cut and paste. Since this assignment isn't necessarily using a location expression, use: <assign name="AAA" expr="'s3'"/> For details, see: http://commons.apache.org/scxml/guide/datamodel.html#assign Alternatively, the <data> could be made to store XML content (like the travel reservation example at the above URL), and the location attribute could then be used in a portable way. -Rahul > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
