11. 调用子流

一个流可以调用另一个流作为子流。 流等待子流返回并响应子流结果。spring-doc.cadn.net.cn

11.1. 该子流态元素

子流态元素调用另一个流作为子流,具体如下:spring-doc.cadn.net.cn

<subflow-state id="addGuest" subflow="createGuest">
    <transition on="guestCreated" to="reviewBooking">
        <evaluate expression="booking.guests.add(currentEvent.attributes.guest)" />
    </transition>
    <transition on="creationCancelled" to="reviewBooking" />
</subflow-state>

前述示例称createGuest流淌,等待它回归。 当流返回时guestCreated结果,新嘉宾被加入预订的嘉宾名单。spring-doc.cadn.net.cn

11.1.1. 传递子流输入

输入元素将输入传递给子流,具体如下:spring-doc.cadn.net.cn

<subflow-state id="addGuest" subflow="createGuest">
    <input name="booking" />
    <transition to="reviewBooking" />
</subflow-state>

11.1.2. 子流输出映射

当子流完成时,其终点状态ID会作为事件返回给调用流,用于继续导航。spring-doc.cadn.net.cn

子流还可以创建输出属性,调用流程在结果转换中可引用这些属性,具体如下:spring-doc.cadn.net.cn

<transition on="guestCreated" to="reviewBooking">
    <evaluate expression="booking.guests.add(currentEvent.attributes.guest)" />
</transition>

在上述例子中,客人是由guestCreated结果。spring-doc.cadn.net.cn

11.2. 检查点:调用子流

你应该查看调用子流程的示例预订流程:spring-doc.cadn.net.cn

<flow xmlns="http://www.springframework.org/schema/webflow"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/webflow
                          https://www.springframework.org/schema/webflow/spring-webflow.xsd">

    <input name="hotelId" />

    <on-start>
        <evaluate expression="bookingService.createBooking(hotelId, currentUser.name)"
                  result="flowScope.booking" />
    </on-start>

    <view-state id="enterBookingDetails">
        <transition on="submit" to="reviewBooking" />
    </view-state>

    <view-state id="reviewBooking">
        <transition on="addGuest" to="addGuest" />
        <transition on="confirm" to="bookingConfirmed" />
        <transition on="revise" to="enterBookingDetails" />
        <transition on="cancel" to="bookingCancelled" />
    </view-state>

    <subflow-state id="addGuest" subflow="createGuest">
        <transition on="guestCreated" to="reviewBooking">
            <evaluate expression="booking.guests.add(currentEvent.attributes.guest)" />
        </transition>
        <transition on="creationCancelled" to="reviewBooking" />
    </subflow-state>

    <end-state id="bookingConfirmed" >
        <output name="bookingId" value="booking.id" />
    </end-state>

    <end-state id="bookingCancelled" />

</flow>

流现在称为createGuest子流程用于向宾客名单添加新嘉宾。spring-doc.cadn.net.cn