6. OnFault processing by 2 OnFaults (OnFault inside of OnFault)


Bpml Code:
<process name="default">
<sequence name="mainChildSequence">
<assign name="Assign" to="firstSequenceVar_1">1_1</assign>
<operation name="File System Adapter">
<participant name="FS_InstallValidation"/>
<output message="FileSystemInputMessage">
<assign to="." from="*"></assign>
<assign to="Action">FS_COLLECT</assign>
<assign to="filter">*.txt</assign>
<assign to="deleteAfterCollect">false</assign>
</output>
<input message="inmsg">
<assign to="." from="*"></assign>
</input>
</operation>
<assign name="Assign" to="firstSequenceVar_2">1_2</assign>
<!--You can find a nested OnFault below -->
<onFault>
<sequence name="Sequence Start">
<assign name="Assign" to="ERROR_ON_FAULT_1">Error processed by the FIRST OnFault</assign>
<operation name="Business Process Exception">
<participant name="BPExceptionService"/>
<output message="BPExceptionServiceTypeInputMessage">
<assign to="." from="*"></assign>
<assign to="exceptionCode">34</assign>
</output>
<input message="inmsg">
<assign to="." from="*"></assign>
</input>
</operation>
<onFault>
<sequence>
<assign to="ERROR_ON_FAULT_1">Error processed by the SECOND OnFault</assign>
</sequence>
</onFault>
</sequence>
</onFault>
</sequence>
</process>
BP flow:
We cannot see any step from any OnFault executed?!?!

Process Data:
There is no element in the Process Data that would be expected to be written from OnFault parts.
<?xml version="1.0" encoding="UTF-8"?>
<ProcessData>
<firstSequenceVar_1>1_1</firstSequenceVar_1>
<Prev_NotSuccess_Adv_Status>No files to collect</Prev_NotSuccess_Adv_Status>
<ERROR_SERVICE>
<WFD_NAME>TEST_onFault_in_OnFault</WFD_NAME>
<SERVICE_NAME>FS_InstallValidation</SERVICE_NAME>
<STEP_ID>2</STEP_ID>
<ADV_STATUS>No files to collect</ADV_STATUS>
<BASIC_STATUS>1</BASIC_STATUS>
<WFC_ID>lin2:node1:12728cff242:6619171</WFC_ID>
</ERROR_SERVICE>
</ProcessData>
Conclusion:
If we have OnFault in OnFault, seems that process will finish in Completed state, although any step from OnFault has not been executed at all. If we remove a 'child' OnFault, then it works as expected.
!!! Based on this result I would say that only one level of OnFault is permitted.

