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

Mirjana's picture
 
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.