Fabrizio-

from what ive read in the scxml doc you need to configure the datamodel and 
their respective data node children directly under the scm root node e.g.
<scxml xmlns="http://www.w3.org/2005/07/scxml";
               version="1.0"
               initialstate="init-travel-plan">

      <datamodel>
        <data name="airlineticket">
//you can use the Data macro to reference the current value of the requested 
parameters e.g.
//Commons SCXML defines a Data()
   function for use in JEXL or EL expressions, for example:
    <var name="arrival" expr="Data(hotelbooking, 'hotel/stay/arrival')" />

//   The above expression extracts the arrival date from the hotelbooking
//   data in the documents datamodel and stores it in a scratch space variable
//   named "arrival". The first argument is value of the name attribute of the
//   <data> element and the second is the String value of the XPath
//   expression. If more than one matching nodes are found, the first one
//   is returned.   //this is different from your current implementation which 
uses data elements associated with a state e.g.
     <scxml xmlns="http://www.w3.org/2005/07/scxml";
               version="1.0"
               initialstate="airline-ticket">

      <state id="airline-ticket">
        <datamodel>
          <data...>
the association of this data would be to airline-ticket and could not be used 
in hotel or restaurant
a complete scxml tutorial is available at
http://commons.apache.org/scxml/guide/datamodel.html

HTH
Martin Gainty 
______________________________________________ 
Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger 
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung 
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem 
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. 
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung 
fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le 
destinataire prévu, nous te demandons avec bonté que pour satisfaire informez 
l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est 
interdite. Ce message sert à l'information seulement et n'aura pas n'importe 
quel effet légalement obligatoire. Étant donné que les email peuvent facilement 
être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité 
pour le contenu fourni.




> From: fmorb...@gmail.com
> Date: Thu, 6 May 2010 10:24:17 -0700
> Subject: Re: [scxml] templating/src/xinclude and returning a value(through    
> datamodel/donedata)
> To: user@commons.apache.org
> 
> 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 <rahul.akol...@gmail.com> wrote:
> > On Thu, May 6, 2010 at 11:34 AM, Fabrizio Morbini <fmorb...@gmail.com> 
> > 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: user-unsubscr...@commons.apache.org
> > For additional commands, e-mail: user-h...@commons.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
> For additional commands, e-mail: user-h...@commons.apache.org
> 
                                          
_________________________________________________________________
The New Busy think 9 to 5 is a cute idea. Combine multiple calendars with 
Hotmail. 
http://www.windowslive.com/campaign/thenewbusy?tile=multicalendar&ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_5

Reply via email to