Возобновление весеннего потока из состояния действия - PullRequest
0 голосов
/ 23 мая 2019

Есть ли возможность в весеннем веб-потоке возобновить поток из состояния действия или состояния решения? Поток, который мне нужно реализовать, требует от него перепрыгнуть, чтобы перейти по какой-либо ссылке в письме. У меня есть контроллер, который обрабатывает ссылку электронной почты, и я пытаюсь возобновить предыдущий поток, но не из последнего состояния просмотра. У меня есть что-то вроде этого

<view-state id="start>
    <transition on="submit" to="handleStep1"/>
</view-state>

<action-state id="handleStep1"/>
    <evaluate expression="a.something()"/>
    <transition on="emailSent" to="show-email-sent"/>
    <transition on="changeSomething" to="show-change"/>
</action-state>

<view-state id="show-email-sent" view="emailSentPage">
</view-state>

<view-state id="show-change" view="showChangePage">
</view-state>

Когда состояние действия решает отправить электронное письмо, пользователь показывает страницу отправленного электронного письма. Теперь он нажмет на ссылку в электронном письме и вернется к состоянию действия, которое решит, что теперь он может перейти на страницу «показать-изменить». Я могу возобновить поток, получив flowRequestContext.getFlowExecutionUrl(), а затем использовать его в контроллере, который обрабатывает щелчок электронной почты, но этот URL-адрес всегда перенаправляет в состояние просмотра (в зависимости от того, когда я сохраняю его значение, он указывает на начальный вид - состояние или состояние просмотра, отправленное по электронной почте. Как я могу возобновить поток из состояния действия? Или, может быть, другая идея, как обрабатывать такой случай?

1 Ответ

1 голос
/ 23 мая 2019

Вы можете добавить параметр в ссылку в своем электронном письме, например, http://yoursite.com/yourflow?resume=true

, затем добавить необязательный ввод в свой поток:

<input name="resume" required="false" type="boolean"/>

добавить состояние принятия решениячтобы справиться с этим:

<decision-state id="resumeOrNotResume">
    <if test="resume == null || !resume" then="start" else="showChange"/>
</decision-state>

и установить его в качестве начального состояния:

<flow start-state="resumeOrNotResume">
...