Hi Josselin,
In this test case, an event is defined so two submissions are to be sent synchronously, one after one, according to a condition which should be true for one only. The first one will send again the same event producing a submission loop effect. But the first one is also altering the loop condition and it appears that, at the end, the 2 submissions are sent for the same event just before the latest event being caught.
The easiest way to control this is to invert the order of the submissions: the one to be activated at the end is to be tested before the one to be activated repeatedly.
<xf:action ev:event="submission">
<xf:send if="not(instance('sub')/xpr:person[@localType='new'])" submission="submitBio"/>
<xf:send if="instance('sub')/xpr:person[@localType='new']" submission="submitNewPerson"/>
</xf:action>
Thank you for your feedback!
--Alain
Le 06/02/2021 14:42, Josselin Morvan <[email protected]> a écrit :
Hi Steven, Hi Alain,_______________________________________________ Xsltforms-support mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/xsltforms-support
I made a short and simple sample to show you how my form works, what it does, and the error I get with the submission.
Because I run it with BaseX, I added a little Xquery script that creates the db and allows the saving of the submissions.If you want to use it, just put the form file into basex/webapp/static folder and the Xquery file into basex/webapp/ folder. It is a little REST application, just run basexhttp, then go to http://localhost:8984/xforms/install to create the db, and to http://localhost:8984/static/xsltforms/submissionLoop.xml to access the form.
You can access the files on my Github Gist : https://gist.github.com/sardinecan/64451cf122095178159804e1ea13b4e5
As you’ll see, I have two submissions, one for the added persons, which is looping as long as there are new persons, and a second one for the main instance which is running when all the new persons have been submitted.
I use the dispatch method, with the xforms-submit-done event, and a @delay :
<xf:action ev:event="xforms-submit-done">
<xf:dispatch name="submission" targetid="model" delay="1"/>
</xf:action>
Then I have a "if" rule to select the submission to run :
<xf:action ev:event="submission">
<xf:send if="instance('sub')/xpr:person[@localType='new']" submission="submitNewPerson"/>
<xf:send if="not(instance('sub')/xpr:person[@localType='new'])" submission="submitBio"/>
</xf:action>
Like Steven suggests, I think now that there is a submission activated twice, as the submission#submitBio is running two time and it shouldn’t, but maybe I’m doing something wrong ?
Thanks a lot for your help,Best,Josselin.
Le 5 févr. 2021 à 10:54, Steven Pemberton <[email protected]> a écrit :Although submissions are by default asynchronous, a submission element may only be activated once at a time. I'm surprised that all the event values are empty; they really shouldn't be for an xforms-submit-error event.
There is a difference in semantics between a dispatch with and without a delay, even if the delay is 0, so try making the delay 0, it should still work. The fact that it works with my original dispatch method suggests that the problem is indeed with a submission being activated twice, but my reading of the spec is that it should be possible once submit-done has been dispatched. I will raise this with the working group.
Best wishes,
Steven
On Thursday 04 February 2021 23:42:37 (+01:00), Josselin Morvan wrote:
Hi Steven,
Thank you for your quick response. Unfortunately, all the error events are empty.So, I tried your method with the dispatch element. At first it didn’t work either, then I added a delay to the dispatch and… it works!As I said, when the submission is done, I update my instance with the server’s response (@xml:id and @localType value, etc.) and then I perform the next submission, maybe all these actions are asynchronous or performed simultaneously, and it produces a conflict? The @delay would allow to really execute the next submission at the end of the entire process?
Best,Josselin.
Le 4 févr. 2021 à 22:25, Steven Pemberton <[email protected]> a écrit :<message>Submission error. error-type: <output value="event('error-type')"/> error-message: <output value="event('error-message')"/> response-status-code: <output value="event('response-status-code')"/> response-reason-phrase: <output value="event('response-reason-phrase')"/> resource-uri: <output value="event('resource-uri')"/> </message>
--
_______________________________________________ Xsltforms-support mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/xsltforms-support
