Skip to main content

Nested Scopes, Outer Fault Handler Has Catch

Nested Scopes, Outer Fault Handler Has Catch

Suppose you have the following BPL (partially shown):

Partial BPL diagram with nested scopes

The rest of this BPL is as follows:

Partial BPL diagram with the following elements in order: trace, catch, catchall, join, trace, and end

This BPL business process does the following:

  1. The first <trace> element generates the message before outer scope.

  2. The first <scope> element starts the outer scope.

  3. The next <trace> element generates the message in outer scope, before inner scope.

  4. The second <scope> element starts the inner scope.

  5. The next <trace> element generates the message in inner scope, before throw.

  6. The <throw> element throws a specific, named fault ("MyFault").

  7. Control now goes to the <faulthandlers> defined within the inner <scope>. A <catch> exists, but its fault value is "MismatchedFault". There is no <catchall> in the inner scope.

  8. Control goes to the <faulthandlers> block in the outer <scope>. It contains a <catch> whose fault value is "MyFault".

  9. The next <trace> element generates the message in outer scope catch faulthandler for 'MyFault'.

  10. The second <scope> ends.

  11. The last <trace> element generates the message after outer scope.

Event Log Entries

The corresponding Event Log entries look like this:

Event log with entries for inner and outer scope elements

XData for This BPL

This BPL is defined by the following XData block:

XData BPL
{
<process language='objectscript'
         request='Test.Scope.Request'
         response='Test.Scope.Response' >
  <sequence>
    <trace value='"before outer scope"'/>
    <scope>
      <trace value='"in outer scope, before inner scope"'/>
      <scope>
        <trace value='"in inner scope, before throw"'/>
        <throw fault='"MyFault"'/>
        <trace value='"in inner scope, after throw"'/>
        <faulthandlers>
          <catch fault='"MismatchedFault"'>
            <trace value=
    '"In inner scope catch faulthandler for &apos;MismatchedFault&apos;"'/>
          </catch>
        </faulthandlers>
      </scope>
      <trace value='"in outer scope, after inner scope"'/>
      <faulthandlers>
        <catch fault='"MyFault"'>
          <trace value=
            '"In outer scope catch faulthandler for &apos;MyFault&apos;"'/>
        </catch>
      </faulthandlers>
    </scope>
    <trace value='"after outer scope"'/>
  </sequence>
</process>
}
FeedbackOpens in a new tab