I have a question about flow inheritance and flow XML definitions' validity.
I have some abstract - reusable and not directly executable - flows: let's say AbstractFlow_A, AbstractFlow_B, AbstractFlow_C.
Each abstract flow may contain many states.
Then I have other abstract and shared flows containing common end states and global transitions: let's say AbstractCommonStatesFlow_1 and AbstractCommonStatesFlow_2.
Now I need to compose some concrete flows - using flow level inheritance - like this:
- AbstractFlow_A + AbstractCommonStatesFlow_1 = ConcreteFlow_A_CS1 (parent = "AbstractFlow_A, AbstractCommonStates_1")
- AbstractFlow_B + AbstractCommonStatesFlow_1 = ConcreteFlow_B_CS1 (parent = "AbstractFlow_B, AbstractCommonStates_1")
- AbstractFlow_B + AbstractCommonStatesFlow_2 = ConcreteFlow_B_CS2 (parent = "AbstractFlow_B, AbstractCommonStates_2")
- AbstractFlow_C + AbstractCommonStatesFlow_2 = ConcreteFlow_C_CS2 (parent = "AbstractFlow_C, AbstractCommonStates_2")
These concrete flows are simply the result of a merge and DON'T define other own steps.
These concrete flows are used as sub-flows in other "high-level" flows (the ones actually executed by users):
- MainFlow_1, which uses ConcreteFlow_A_CS1 and ConcreteFlow_B_CS1 as sub-flows (notice that common end states - CS1 - are shared and this allows to jump backward and forward from any point of the main flow)
- MainFlow_2, which uses ConcreteFlow_B_CS2, ConcreteFlow_C_CS2 as sub-flows (notice that common end states - CS2 - are shared and this allows to jump backward and forward from any point of the main flow)
Everything works fine and flows are perfectly composed.
*** BUT ***, even if my app works properly, STS says that ConcreteFlow_A_CS1, ConcreteFlow_B_CS1, ConcreteFlow_B_CS2, ConcreteFlow_C_CS2 contain an error because a "start state is missing"; I've found two ways to avoid this warning:
1) adding an empty start-state attribute:
2) adding a start-state attribute containing the id of the parent flow's start-state
<flow... parent="AbstractFlow_A, AbstractCommonStates_1" start-state=""><!--no own states--></flow>
<flow... parent="AbstractFlow_A, AbstractCommonStates_1" start-state="id-of-AbstractFlow_A-start-state"><!--no own states--></flow>
- Can I use flow level inheritance to have a simple merge without other child flow's states?
- If a simple merge is allowed, have I anyway to declare a start state in child flow?
Thank you very much!