MigrateMsgsToGlobalMbx business process

The MigrateMsgsToGlobalMbx business process moves messages from traditional to Global Mailbox mailboxes. You invoke this business process as part of the migration process from Sterling B2B Integrator to IBM® Global High Availability Mailbox.

The MigrateMsgsToGlobalMbx business process completes the following actions:
  • Takes a traditional mailbox export file as the primary document. For more informaiton, see Before using MigrateMsgsToGlobalMbx.
  • Parses the mailboxes that were selected during export, and already migrated over to Global Mailbox
  • Loops through the mailboxes
  • For each mailbox, finds all extractable traditional messages
  • Migrates each message to Global Mailbox
  • Updates each traditional (migrated) message to be unextractable
  • Creates a human readable report summarizing all activities in a new primary document

The initial primary document is a Sterling B2B Integrator export file containing mailboxes specifically selected for message migration. The final primary document contains a report detailing migration activity. Only extractable traditional messages are migrated, and they are set to unextractable in the traditional mailbox after migration. The business process can be executed again safely (such as after error resolution) without risking duplicate migration. The migrated Global Mailbox messages retain the original extractability of the corresponding traditional message. Global Mailbox event rules are not executed for the migrated Global Mailbox messages.

The following BPML code makes up the MigrateMsgsToGlobalMbx business process:
<process name="MigrateMsgsToGlobalMbx">
  <rule name="More Mailboxes?">
    <condition>MailboxIndex &lt;= MailboxCount</condition>
  </rule>
  <rule name="More Messages?">
    <condition>MessageIndex &lt;= MessageCount</condition>
  </rule>
  <rule name="ExtractableExists?">
    <condition>boolean(QueryResults/Message[number(/ProcessData/MessageIndex/text())]/Extractable/node())</condition>
  </rule>
  <rule name="ExtractableCountExists?">
    <condition>boolean(QueryResults/Message[number(/ProcessData/MessageIndex/text())]/ExtractableCount/node())</condition>
  </rule>
  <rule name="ExtractableUntilExists?">
    <condition>boolean(QueryResults/Message[number(/ProcessData/MessageIndex/text())]/ExtractableUntil/node())</condition>
  </rule>

  <sequence name="Main">

    <sequence name="ParseMailboxes">
      <assign to="MailboxPaths" from="DocToDOM(PrimaryDocument,'false','false','//BASEPATH')" append="true" />
      <operation name="ReleasePrimaryDocument">
        <participant name="ReleaseService"/>
        <output message="outmsg">
          <assign to="TARGET">/ProcessData/PrimaryDocument</assign>
        </output>
        <input message="inmsg"/>
      </operation>
      <operation name="AppendReportHeader">
        <participant name="TextDocAppender"/>
        <output message="DocAppendInputMessage">
          <assign to="appendString" from="concat('Message Migration Report','&#xD;&#xA;')"/>
          <assign to="." from="*"/>
        </output>
        <input message="inmsg">
          <assign to="." from="*"/>
        </input>
      </operation> 	
    </sequence>
	
    <sequence name="ProcessMailboxes">
      <assign to="MailboxIndex">1</assign>
      <assign to="MailboxCount" from="count(/ProcessData/MailboxPaths/DocToDOMResults/*[local-name()='BASEPATH']/text())" />
      <operation name="AppendReportMailboxCount">
        <participant name="TextDocAppender"/>
        <output message="DocAppendInputMessage">
          <assign to="appendString" from="concat(' Beginning processing of ', MailboxCount, ' mailbox(es)', '&#xD;&#xA;')"/>
          <assign to="." from="*"/>
        </output>
        <input message="inmsg">
          <assign to="." from="*"/>
        </input>
      </operation>         
      <choice name="ProcessMailboxLoop">
        <select>
          <case ref="More Mailboxes?" activity="ProcessMailbox"/>
        </select>

        <sequence name="ProcessMailbox">
          <assign to="CurrentMailbox" from="/ProcessData/MailboxPaths/DocToDOMResults/*[local-name()='BASEPATH'][number(/ProcessData/MailboxIndex)]/text()" append="false" />
          <operation name="Mailbox Query Service">
            <participant name="MailboxQuery" />
            <output message="QueryRequest">
              <assign to="MailboxPath" from="CurrentMailbox/text()"/>
              <assign to="MessageExtractable">YES</assign>
              <assign to="." from="*"/>
            </output>
            <input message="inmsg">
              <assign to="QueryResults" from="*"/>
            </input>
          </operation>
          
          <sequence name="OuterCopyMessageAndUpdate">
            <assign to="MessageIndex">1</assign>
          	<assign to="MessageCount" from="count(QueryResults/Message)"/>
          	
            <operation name="AppendReportMessageCount">
              <participant name="TextDocAppender"/>
              <output message="DocAppendInputMessage">
                <assign to="appendString" from="concat('  Migrating ', MessageCount ,' message(s) from mailbox: ',CurrentMailbox,'&#xD;&#xA;')"/>
                <assign to="." from="*"/>
              </output>
              <input message="inmsg">
                <assign to="." from="*"/>
              </input>
            </operation>           	
          	
            <choice name="ProcessMessages">
              <select>
                <case ref="More Messages?" activity="CopyMessageAndUpdate" />
              </select>

              <sequence name="CopyMessageAndUpdate">
                <choice name="handleExtractabilityPolicy">
                  <select>
                    <case ref="ExtractableExists?" activity="SetExtractable" />
                    <case ref="ExtractableCountExists?" activity="SetExtractableCount" />
                    <case ref="ExtractableUntilExists?" activity="SetExtractableUntil" />
                  </select>
                  <sequence name="SetExtractable">
                    <assign to="Extractable">YES</assign>
                  </sequence>
                  <sequence name="SetExtractableCount">
                    <assign to="ExtractableCount" from="QueryResults/Message[number(/ProcessData/MessageIndex/text())]/ExtractableCount/text()"/>
                  </sequence>
                  <sequence name="SetExtractableUntil">
                    <assign to="ExtractableUntilUnformatted" from="QueryResults/Message[number(/ProcessData/MessageIndex/text())]/ExtractableUntil/text()"/>                    
                    <assign to="ExtractableUntil" from="concat(substring(ExtractableUntilUnformatted,1,4),substring(ExtractableUntilUnformatted,6,2),substring(ExtractableUntilUnformatted,9,2),'T',substring(ExtractableUntilUnformatted,12,2),substring(ExtractableUntilUnformatted,15,2))"/>
                  </sequence>
                </choice>

                <operation name="Mailbox Add Service">
                  <participant name="MailboxAdd" />
                  <output message="MailboxAddServiceTypeInputMessage">
                    <assign to="DocumentId" from="QueryResults/Message[number(/ProcessData/MessageIndex/text())]/DocumentId/text()"/>
                    <assign to="MailboxPath" from="CurrentMailbox/text()"/>
                    <assign to="MessageName" from="QueryResults/Message[number(/ProcessData/MessageIndex/text())]/MessageName/text()"/>
                    <assign to="UseGlobalMailboxes">true</assign>
                    <assign to="." from="*"/>
                  </output>
                  <input message="inmsg">
                    <assign to="DistMbxAddResult" from="*"/>
                  </input>
                </operation>

                <operation name="Release Extractable">
                  <participant name="ReleaseService" />
                  <output message="outmsg">
                    <assign to="TARGET">/ProcessData/Extractable |
                      /ProcessData/ExtractableCount |
                      /ProcessData/ExtractableUntilUnformatted |
                      /ProcessData/ExtractableUntil
                    </assign>
                    <assign to="." from="*"/>
                  </output>
                  <input message="inmsg" />
                </operation>

                <operation name="Mailbox Update Service">
                  <participant name="MailboxUpdate" />
                  <output message="MailboxUpdateServiceTypeInputMessage">
                    <assign to="." from="*"/>
                    <assign to="Extractable">NO</assign>
                    <assign to="MessageId" from="QueryResults/Message[number(/ProcessData/MessageIndex/text())]/MessageId/text()"/>
                  </output>
                  <input message="inmsg">
                    <assign to="." from="*"/>
                  </input>
                </operation>

                <operation name="AppendReportMessageMigrated">
                  <participant name="TextDocAppender"/>
                  <output message="DocAppendInputMessage">
                    <assign to="appendString" from="concat('   Migrated message ',QueryResults/Message[number(/ProcessData/MessageIndex/text())]/MessageName/text(),' with size ', QueryResults/Message[number(/ProcessData/MessageIndex/text())]/MessageSize/text(), '&#xD;&#xA;')"/>
                    <assign to="." from="*"/>
                  </output>
                  <input message="inmsg">
                    <assign to="." from="*"/>
                  </input>
                </operation> 

                <assign to="MessageIndex" from="MessageIndex + 1"/>
                <repeat ref="ProcessMessages" />

              </sequence>
            </choice>
          </sequence>

          <operation name="Release Query Result">
            <participant name="ReleaseService" />
            <output message="outmsg">
              <assign to="TARGET">/ProcessData/QueryResults</assign>
              <assign to="." from="*"/>
            </output>
            <input message="inmsg"/>
          </operation>

          <assign to="MailboxIndex" from="MailboxIndex + 1"/>
          <repeat ref="ProcessMailboxLoop"/>
        </sequence>
      </choice>
    </sequence>
    <onFault>
      <sequence>
        <operation name="AppendReportMainError">
          <participant name="TextDocAppender"/>
          <output message="DocAppendInputMessage">
            <assign to="appendString" from="concat('ERROR in service [', ERROR_SERVICE/SERVICE_NAME,'] : [', ERROR_SERVICE/ADV_STATUS,'], see status report of step ',ERROR_SERVICE/STEP_ID,' for details.','&#xD;&#xA;')"/>
            <assign to="." from="*"/>
          </output>
          <input message="inmsg">
            <assign to="." from="*"/>
          </input>
        </operation>             
      </sequence>
    </onFault>  
  </sequence>
</process>