ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Process Management Business Process Composerユーザーズ・ガイド
11g リリース1(11.1.1.6.2)
B61410-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
 

B BPMNにインポートするためのプロセスの準備

この付録では、BPMNフロー・オブジェクトの各プロパティについて説明します。内容は次のとおりです。

B.1 BPMNプロセスとしてインポートするためのVisioファイルの準備

VisioファイルをBusiness Process Composerにインポートできます。Business Process Composerは、VisioMasterMap.xmlというマップファイルを使用して、Visioの要素をBPMNフロー・オブジェクトにマップします。

このファイルは、Visioの各要素をBPMNフロー・オブジェクトにマップする方法を定義します。JDeveloperホーム・ディレクトリの次のディレクトリにあります。

.../jdeveloper/jdev/extensions/tutor/xml.

注意:

このファイルは編集しないでください。VisioUserMap.xmlを作成および編集することによって、このファイルのマッピングをオーバーライドできます。


Business Process Composerは、VisioMasterMap.xmlを解析した後VisioUserMap.xmlファイルをチェックし、ルールを適宜変更します。ユーザー・マップはマスター・マップを拡張したりオーバーライドします。

Visioインポート・モジュールは、拡張性を提供できるように設計されています。ユーザーは別のVisioステンシルをサポートするXMLファイルを追加し、追加のVisioマスター・シェイプのBPMNオブジェクトへのマッピングを指定することができます。このファイルはVisioUserMap.xmlという名前で、VisioMasterMap.xmlファイルと同じディレクトリに置く必要があります。

このファイルは、VisioMasterMap.xsdへの参照など、指定されたVisioMasterMap.xmlファイルと同じルート要素を含んでいる必要があります。VisioUserMap.xmlは、参照として使用可能なマスター・マップと同じ形式である必要があります。ユーザー・マップに追加されたエントリは、マッピングを追加したり、メイン・マップにある既存のエントリをオーバーライドします。拡張されたエントリまたはオーバーライドされたエントリのみが含まれている必要があり、元のエントリすべてを繰り返すことはできません。

例B-1 VisioUserMap.xmlのエントリの例

<?xml version = '1.0' encoding = 'UTF-8'?>
<Masters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.oracle.com/oracle/tutor/visio/masterMapElements VisioMasterMap.xsd"
                 xmlns="http://www.oracle.com/oracle/tutor/visio/masterMapElements">
<!— custom <Master/> elements go here -- >
</Masters>

B.1.1 VisioUserMap.xmlの更新方法

この項では、VisioファイルをBPMNプロセスにインポートするための考えられるシナリオについて説明します。

VisioUserMap.xmlを更新するには:

このシナリオでは、ソースのVisioファイルに、データ・オブジェクトにマップするReportというシェイプが含まれていると仮定します。デフォルトでは、VisioMasterMapはこのシェイプを送信タスクにマップします。それを入力オブジェクトまたは出力オブジェクトとして厳密に使用すると、データ・オブジェクトへのマップがより正確になります。

  1. VisioMasterMap.xmlファイルで、次のように表示されるDataObjectのマスター定義を検索します。

    <Master Name="data object">
        <BPMNObject>DataObject</BPMNObject>
    </Master>
    

    この定義の後に、Like属性を使用して最初の定義をクローニングし追加のVisioオブジェクトをマップする、一連の追加のマスター要素が続きます。

    <Master Name="sequential data" Like="data object"/>
    <Master Name="data" Like="data object"/>
    
  2. VisioのReport要素のマッピングを追加または変更するには、VisioUserMap.xmlファイルに次のコードを追加します。

    <Master Name=”Report” Like=”data object”/>
    

例B-2は、Extends属性を使用して、追加または異なる属性とともに既存のBPMNオブジェクトにオブジェクトがどのようにマップされるかを示しています。

例B-2 Extends属性を使用したBPMNオブジェクトへのVisioオブジェクトのマッピング

<Master Name="flow">
    <BPMNObject>SequenceFlow</BPMNObject>
</Master>
 
<Master Name="conditional flow" Extends="flow">
    <Attributes>
      <Attribute Name="ConditionType" Value="Expression"/>
    </Attributes>
</Master>

この例では、Visioオブジェクトconditional flowがBPMNフロー・オブジェクトSequenceFlowにマップされ、属性ConditionTypeが値Expressionに追加されています。

B.1.2 BPMN要素の有効な値

<BPMNObject>要素の有効な値は次のとおりです。

  • タスク

  • サブプロセス

  • イベント

  • ゲートウェイ

  • DataObject

  • グループ

  • 注釈

  • レーン

  • プール

  • MessageFlow

  • SequenceFlow

  • アソシエーション

  • Null


注意:

Null値をVisioの要素に割り当てると、BPMNフロー・オブジェクトは作成されません。


B.1.3 BPMN要素の属性

次の表は、BPMNフロー・オブジェクトの基本的なBPMNタイプに基づいた、BPMN属性の有効な値を示しています。

タスクの属性と値

表B-1はBPMNタスクの有効な属性と値を示しています。

表B-1 タスクの属性と値

属性

TaskType

None、Script、Reference、Service、User、Manual、Send、Receive

LoopType

Standard、MultiInstance

isForCompensation

true、false


サブプロセスの属性と値

表B-2はBPMNサブプロセスの有効な属性と値を示しています。

表B-2 サブプロセスの属性と値

属性

isExpanded

true、false

isATransaction

true、false

LoopType

Standard、MultiInstance

isForCompensation

true、false

AdHoc

true、false


イベントの属性と値

表B-3はBPMNイベントの有効な属性と値を示しています。

表B-3 イベントの属性と値

属性

EventType

Start、Intermediate、End

Trigger

Trigger None、Message、Timer、Conditional、Signal、Multiple、Error、Cancel、Compensation、Link、Terminate


ゲートウェイの属性と値

表B-4はBPMNゲートウェイの有効な属性と値を示しています。

表B-4 ゲートウェイの属性と値

属性

GatewayType

Parallel、Inclusive、Exclusive、Complex

ExclusiveType

Event、Data

MarkerVisible

true、false


シーケンス・フローの属性と値

表B-5はBPMNシーケンス・フローの有効な属性と値を示しています。

表B-5 シーケンス・フローの属性と値

属性

ConditionType

None、Expression、Default


アソシエーションの属性と値

表B-6はBPMNデータ・オブジェクトの有効な属性と値を示しています。

表B-6 アソシエーションの属性と値

属性

Direction

None、One


プールの属性と値

表B-7はBPMNプールの有効な属性と値を示しています。

表B-7 プールの属性と値

属性

BoundaryVisible

true、false


B.2 XSL文書を使用したXPDLのインポートのカスタマイズ方法

多くの場合、ソースからターゲットへのモデルの変換は一般的な変換ルールに従い、ガイドラインと制約があります。XPDL文書をインポートして望ましくない結果が生じた場合、Business Process Composerが期待している形式とXPDL文書の形式が一致していない可能性があります。このような状況では、XSLT変換を使用すると、元のXPDLダイアグラムとBusiness Process Composerの結果をより一致させることができます。

次の手順では、XSLスタイル・シートを組み込んでOracle BPM変換の出力を変更する推奨方法について説明します。Oracle BPMには、XSLT開発者への例として役立ついくつかのXSLTファイルが同梱されています。

XSL文書を使用してXPDLのインポートをカスタマイズするには:

Business Process ComposerはXSLT変換を使用してXPDLファイルを解析し、データがBPMNに渡されダイアグラムとして表示される前に一致する形式を生成します。Business Process ComposerはXPDL文書に関連付けられた変換ファイルを検索します。

通常、XPDLファイルにはベンダー名を提供する<Vendor/>要素が含まれています。ベンダー名およびXSLファイルへのパスをOracle BPMのXSLFilePaths.xmlに追加することによって、ベンダー名が検索され、関連付けられた変換ファイルのパスが特定されます。

ファイル・パスが索引ファイルから取得され、Business Process ComposerはXSLT変換をXPDLファイルに適用します。

  1. カスタムのXSLTファイルを作成します。

    XMLエディタを使用して、新しいXSLTファイルを作成します。例を表示するには、付録3「XPDLのテクニカルな詳細」を参照してください。XSLFilePaths.xmlを含むXMLディレクトリにXSLTファイルを配置することが最適です。

  2. インポートするXPDLファイルを開き、<PackageHeader/>要素の下の<Vendor/>要素を検索し、その値を書き留めます。

    たとえば、XPDLが次のような場合:

    <Package xmlns="http://www.wfmc.org/2004/XPDL2.0alpha" Id="6" Name="Untitled Document 6">
        <PackageHeader>
    <Vendor>Global 360</Vendor>
    …
    </PackageHeader>
    …
    </Package>
    

    Vendor要素の値は“Global 360”になります。

  3. XSLFilePaths.xmlファイルを検索します。

    このファイルは、JDeveloperインストール・ディレクトリの下にネストされたXMLというフォルダ([JDeveloper install]\jdeveloper\jdev\extensions\tutor\xml)に配置されています。

  4. ベンダーの名前を含むVendor属性を使用して、新しい<XSLFilePath/>要素を追加し、XSLTファイルへの相対パスを値として指定します。

    例:

    <XSLFilePaths xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="filesPaths PatchFilesPaths.xsd" xmlns="filesPaths">
    …
    <XSLFilePath Vendor=”Global 360”>Global360Patch.xsl</XSLFilePath>
    </XSLFilePaths>
    

    注意:

    この例では、ファイル名Global360Patch.xslに追加のパス情報がありません。Business Process Composerは、XSLFilePaths.xmlファイルが含まれているのと同じフォルダ内でこのファイルを検索します。

    追加のパス情報がある場合には、Business Process Composerは\xmlフォルダからの相対パスでファイルを検索します。


  5. XPDLファイルをOracle BPMにインポートします。ファイルはカスタムXSLTファイルで指定したルールに従って変換および処理されます。

B.3 BPMNプロセスとしてインポートするためのXPDLファイルの準備

XPDL 2.1に準拠していないXDPLファイルまたはOracle BPMが期待する要素が欠落している可能性のあるXDPLファイルをインポートするために、XSLTを使用して変換を拡張することができます。カスタムXSLTを組み込んで最適な結果を得る方法については、B.1項「BPMNプロセスとしてインポートするためのVisioファイルの準備」を参照してください。この付録では、Oracle BPMユーザーがXPDLファイルをインポートする際に遭遇する可能性のある一般的な状況に対処するための、XSLTのサンプル・テンプレートをいくつか提供します。

Tutorを使用している場合、この付録で説明されているファイルは、Tutorインストール・ディレクトリにあるXMLというディレクトリに配置されています。BPMを使用している場合は、JDeveloperインストール・ディレクトリの下に配置されているため、/jdeveloper/jdev/extensions/tutor/xmlに移動してください。

ビジネス・プロセスをOracle BPMにインポートするための要件を次に示します。

B.3.1 ネームスペースの処理

XPDLをインポートする場合、XSLTにおけるネームスペースの処理について理解している必要があります。Oracle BPMで使用されるデフォルト・ネームスペースは次のとおりです。

http://www.wfmc.org/2008/XPDL2.1. 

場合によっては、ソース・ファイルがXPDL 2.1に準拠していても、Oracle BPMが必要とする要素が欠落している場合があります。この場合、XSLTを使用してそうした要素を追加することができます。このような変換への参照については、次のシナリオを参照してください。

XPDL文書のその他のデフォルト・ネームスペースは、インポート時にXPLD 2.1に準拠している要素および属性として処理されますが、良い結果が得られない可能性があります。XPDL 2.1に準拠していないXPDLソース文書は、XSLを使用してXPDL 2.1の結果文書に変換する必要があります。

次のシナリオが考えられます。

  • ソースXPDLの要素がデフォルト・ネームスペースを使用し、XPDL 2.1に準拠している。このシナリオの処理例として、スタイルシートBizAgiPatch.xslを参照してください。

  • ソースXPDLの要素はデフォルト・ネームスペースに存在するが、XPDL 2.1に準拠していない。このシナリオの処理例として、スタイルシートpatch.xslを参照してください。

  • ソースXPDLの要素はデフォルト・ネームスペースに存在せず、XPDL 2.1に準拠していない。このシナリオの処理例として、スタイルシートALBPMPatch.xslを参照してください。

  • 4. ソースXPDLの要素はデフォルト・ネームスペースに存在しないが、XPDL 2.1に準拠している。このシナリオの処理例として、スタイルシートTibcoPatch.xslを参照してください。

例B-3は、ソース文書のローカル・ネームスペースを使用して記述された要素を、結果文書のデフォルト・ネームスペースにコピーするXSLを示しています。


注意:

ローカル・ネームスペースは、スタイルシートのルート要素に追加されます。ソースXPDL文書の要素と一致する場合は、ローカル・ネームスペースの接頭辞が一致している必要があります。この例ではANY_LOCAL_NAMESPACEを使用しています。


例B-3 ローカル・ネームスペースの要素のデフォルト・ネームスペースへのコピー

<xsl:stylesheet version = "1.0" 
                                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" 
                                xmlns:ANY_LOCAL_NAMESPACE = "http://www.someURI" >
        <xsl:output method = "xml" indent = "yes"/>
        <xsl:template match="@*|node()">
                <xsl:copy>
                        <xsl:apply-templates select="@*|node()"/>
                </xsl:copy>
        </xsl:template>
        <xsl:template match = “ANY_LOCAL_NAMESPACE:Activity”>
        …………
        </xsl:template>
</xsl:stylesheet>

B.3.2 相対座標の処理

XPDL文書には、相対または絶対として定義されるオブジェクト座標が含まれる場合があります。絶対座標を使用したXPDL文書では、すべての座標が絶対座標としてインポートされます。

相関座標を使用してXPDL文書をOracle BPMにインポートする場合、次の条件に注意する必要があります。

  • プール座標は絶対座標である

  • レーン座標は親プールに対する相対座標である

  • サブプロセスに含まれないノード座標は、絶対座標である

  • 埋込みサブプロセス(拡張または縮小)に含まれるノード座標は、サブプロセスの左上隅に対する相対座標である

  • サブプロセスに含まれるノードを接続するシーケンス・フロー・パス座標は、サブプロセスの左上隅に対する相対座標である

  • その他すべてのフローは絶対座標である

相関座標を含むXPDL文書は、上述の条件を満たすために変換する必要があります。次の情報は、必要に応じて座標を相関から絶対に、またはその逆に変換する場合に役立ちます。

  • プール座標

    プール座標は絶対座標である必要があります。プール用に提供されている座標が相対座標の場合は、OBPCは互いに重複するすべてのプールをレンダリングします。OBPCは、プールに含まれている座標が絶対座標であると想定しています。これを上書きするには、プール座標を絶対座標に変換します。

  • レーン座標

    レーン座標は親プールに対する相対座標である必要があります。場合によっては、レーンに絶対座標が含まれていて、モデルには相対座標が含まれていることがあります。この場合、レーン座標は次のように変換することができます。レーンのX座標は、レーンのX座標と親プールのX座標との差異とみなされます。同じロジックがY座標にも適用されます。

    次のXSLの例は、この変換の実行方法について示しています。

    <xsl:template match = "xpdl2:Lane/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates">
     
            <xsl:copy>
                <xsl:copy-of select = "@*[name() != 'XCoordinate' and name() != 'YCoordinate']"/>
                <xsl:attribute name = "XCoordinate">
                    <xsl:value-of select = “ancestor::xpdl2:Pool/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@XCoordinate - @XCoordinate"/>
                </xsl:attribute>
                <xsl:attribute name = "YCoordinate">
                    <xsl:value-of select = "ancestor::xpdl2:Pool/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@YCoordinate - @YCoordinate"/>
                </xsl:attribute>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:template>
    
  • サブプロセスに含まれないノード座標

    サブプロセスに含まれないノード座標は、絶対座標である必要があります。ノード座標が親レーンまたは親プールに対する相対座標である場合は、絶対座標に変換します。親プールに関連するアクティビティの座標は、プール座標をアクティビティ座標に追加することによって、絶対座標に変換できます。親プールに対する相対座標である親レーンに関連するアクティビティの座標は、アクティビティ、親レーンおよび親プールの座標の合計をアクティビティ座標に割り当てることによって、絶対座標に変換できます。

    次の例は、アクティビティ座標が親レーンに対する相対座標で、レーン座標が、プール座標が絶対座標である親プールに対する相対座標である場合の、アクティビティ座標の計算方法について示しています。

    <xsl:template match="xpdl2:Activity/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates">
            <xsl:copy>
                <xsl:copy-of select="@*[name()!='YCoordinate' and name()!='XCoordinate']"/>
                <xsl:variable name="LaneId">
                    <xsl:value-of select="ancestor::xpdl2:NodeGraphicsInfo/@LaneId"/>
                </xsl:variable>
                <xsl:variable name="PoolId">
                    <xsl:value-of select="//xpdl2:Lane[@Id=$LaneId]/ancestor::xpdl2:Pool/@Id"/>
                </xsl:variable>
                <xsl:attribute name="YCoordinate">
                    <xsl:value-of select="//xpdl2:Pool[@Id=$PoolId]/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@YCoordinate 
                    + //xpdl2:Lane[@Id=$LaneId]//xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@YCoordinate
              +
    @YCoordinate"/>
                </xsl:attribute>
                <xsl:attribute name="XCoordinate">
                    <xsl:value-of select="//xpdl2:Pool[@Id=$PoolId]/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@XCoordinate 
                    + //xpdl2:Lane[@Id=$LaneId]//xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@XCoordinate
      +
    @XCoordinate"/>
                </xsl:attribute> 
            </xsl:copy>
        </xsl:template>
    
  • 埋込みサブプロセスに含まれるノード座標

    埋込みサブプロセス(拡張または縮小)に含まれるノード座標は、サブプロセスの左上隅に対する相対座標である必要があります。サブプロセスの子ノードの座標は親サブプロセスに対する相対座標です。サブプロセスの子ノードの座標が親サブプロセスに対する相対座標でない場合は、その座標が親レーンまたは親プールに対する相対座標であるかどうかを確認する必要があります。ノード座標をサブプロセスに対する相対座標にするには、適切なサブプロセス座標をノード座標から減算して、結果値をノード座標に割り当てます。次に示すスタイルシートのサンプル・テンプレートでは、サブプロセスの子ノードの座標を計算しています。このテンプレートは、子ノードの座標がサブプロセスに対する相対座標でない場合に役立ちます。

    <xsl:template match = "xpdl2:ActivitySet/xpdl2:Activities/xpdl2:Activity/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates">
            <xsl:variable name = "ActivitySetId">
                <xsl:value-of select = "ancestor::xpdl2:ActivitySet/@Id"/>
            </xsl:variable>
            <xsl:copy>
                <xsl:copy-of select = "@*[name() != 'XCoordinate' and name() != 'YCoordinate']"/>
                <xsl:attribute name = "XCoordinate">
                    <xsl:value-of select = "@XCoordinate  –
     //xpdl2:Activity[@Id = $ActivitySetId]/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@XCoordinate"/>
                </xsl:attribute>
                <xsl:attribute name = "YCoordinate">
                    <xsl:value-of select = "@YCoordinate – 
    //xpdl2:Activity[@Id = $ActivitySetId]/xpdl2:NodeGraphicsInfos/xpdl2:NodeGraphicsInfo/xpdl2:Coordinates/@YCoordinate"/>
                </xsl:attribute>
            </xsl:copy>
        </xsl:template>
    
  • シーケンス・フロー・パス座標

    サブプロセスに含まれるノードを接続するシーケンス・フロー・パス座標は、サブプロセスの左上隅に対する相対座標である必要があります。

    XSLで、シーケンス・フロー・パス座標がサブプロセスに対する相対座標であるかどうかを確認する必要があります。そうでない場合は、サブプロセスの左上隅に対する相対座標に変換します。

    単純なプログラム論理を使用して、相対座標に変換することができます。このような論理では、シーケンス・フロー・パス座標からサブプロセス座標を減算します。その他すべてのフローは絶対座標である必要があります。

    またXSLコードで、座標が相対座標であるか絶対座標であるかを確認する必要があります。絶対座標でない場合には、変換します。変換するには、親プール座標をフロー座標に追加するための論理を含んでいて、これらの値をフロー座標に割り当てるテンプレートをスタイルシートに追加してください。座標が親プールまたは親レーンに対する相対座標である場合には、次の点に注意することが重要です。

    • シーケンス・フローが親プールに対する相対座標である場合は、プール座標をフロー座標に追加します。

    • シーケンス・フローが親レーンに対する相対座標である場合は、親プール座標と親レーン座標をフロー座標に追加します。

B.3.3 拡張属性の処理

XPDLファイルを解析するために、Business Process Composerによって2つの拡張属性が使用されます。これらの拡張属性はオプションですが、フローに相対座標を使用したXPDL文書で作業する場合に非常に役立ちます。それらの属性は次のとおりです。

  • redrawConnections

  • isRelativeObjectCoordinates

これらの拡張属性は標準のXPDL要素ではありませんが、フロー座標を相対座標から絶対座標に、または絶対座標から相対座標に変換するのに必要な作業量を軽減するために使用することができます。<ExtendedAttributes>要素はXPDL文書の多くの要素内で見つかりますが、Oracle BPMは<Package/>要素の下で検索します。<ExtendedAttributes>要素は、Oracle BPMによって見つけられるように、<Package/>要素の下に配置してください。

B.3.4 redrawConnectionsの処理

この属性をtrueに設定すると、Oracle BPMは元の座標を使用するかわりにフロー接続を再描画できます。これは、フローの座標を相対座標または絶対座標に変換する必要がある場合に便利です。フローの座標を相対座標または絶対座標に変換することが難しい場合は、この属性をtrueに設定すると、Oracle BPMはフローの座標を再作成できます。

この属性がtrueに設定されていると、座標を絶対座標または相対座標に変換する必要がありません。Oracle BPMはフローの元の座標を考慮せず、フローに最適な座標を作成します。

ExtendedAttributeがXPDLファイルに含まれていない場合、またはfalseに設定されている場合には、Oracle BPMは元の座標を使用します。

したがって、この属性の使用は、元のモデルのレイアウトの保持が開発時間の短縮よりも重要でない場合に検討する必要があります。

例B-4はこの属性の設定方法について示しています。

例B-4 redrawConnectionsを処理する場合のExtendedAttributeの設定

<xsl:template match="xpdl:Package/xpdl:ExtendedAttributes">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xpdl:ExtendedAttribute Name="redrawConnections" Value="true"/>
                <xsl:apply-templates/>                                
            </xsl:copy>
        </xsl:template>
        <xsl:template match="xpdl:Package">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:if test="not(child::xpdl:ExtendedAttributes)">
                    <xpdl:ExtendedAttributes>
                        <xpdl:ExtendedAttribute Name="redrawConnections" Value="true"/>
                    </xpdl:ExtendedAttributes>
                </xsl:if>
                <xsl:apply-templates/>
            </xsl:copy>            
        </xsl:template>

上のテンプレートでは、redrawConnectionsというExtendedAttributeが<ExtendedAttributes/>要素に< Package/>の子として追加されています。

B.3.5 isRelativeObjectCoordinatesの処理

拡張属性isRelativeObjectCoordinatesは、XPDLファイルのオブジェクト座標が相対座標であるか絶対座標であるかをOracle BPMに通知するために使用されます。

ソースXPDLファイルにすべてのオブジェクト座標が絶対形式(すべての座標はダイアグラムの左上隅にある(0,0)の位置から測定される)で示されている場合には、この属性を使用して、その値をfalseに設定する必要があります。

この拡張属性をtrueに設定すると、上で指定したOracle BPMの相対座標のルールに従って、ソースXPDLファイルのすべての座標が相対座標であることがOracle BPMに通知されます。

Oracle BPMではデフォルトで、入力ドキュメントのすべての座標が上述のOracle BPMの相対座標のルールに準拠していると想定します。この属性がtrueに設定されているか省略されている場合は、すべての座標がOracle BPMの相対座標のルールを満たしていることを確認してください。それ以外の場合は、このドキュメントで指定された相対座標のルールに準拠させるためのテンプレートをスタイルシートに追加してください。

例B-5は、次に示される<Package/>要素の子である<ExtendedAttributes/>要素に<ExtendedAttribute/>要素を含める方法について示しています。

例B-5 ExtendedAttributes要素にExtendedAttributeを含める

<xsl:template match="xpdl21:Package/xpdl21:ExtendedAttributes">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xpdl21:ExtendedAttribute Name="isRelativeObjectCoordinates" Value="false"/>
                <xsl:apply-templates/>                                
            </xsl:copy>
        </xsl:template>
        <xsl:template match="xpdl21:Package">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:if test="not(child::xpdl21:ExtendedAttributes)">
                    <xpdl21:ExtendedAttributes>
                        <xpdl21:ExtendedAttribute Name="isRelativeObjectCoordinates" Value="false"/>
                    </xpdl21:ExtendedAttributes>
                </xsl:if>
                <xsl:apply-templates/>
            </xsl:copy>            
        </xsl:template>

B.3.6 非表示要素の削除

Oracle BPMでは、ソースXPDLファイルのすべてのグラフィカル要素は、その可視性がfalseに設定されている場合でも表示要素とみなされます。したがって、以前は非表示であった要素が現在は表示要素になっているなどの違いがある場合があります。

この問題を解決する唯一の方法は、例B-6に示すように、XSLスタイルシートのいくつかのテンプレートを使用して、XPDLからそれらの要素を削除することです。

例B-6 非表示要素の削除

<xpdl:Activity Name="ProcessGroup" Id="ProcessGroup">
        <xpdl:NodeGraphicsInfos>
                        <xpdl:NodeGraphicsInfo ToolId="XYZ" LaneId="PMCoE" IsVisible="false">
                            <xpdl:Coordinates XCoordinate="7740.0" YCoordinate="80.0"/>
                        </xpdl:NodeGraphicsInfo>
                    </xpdl:NodeGraphicsInfos>
        …………………..
</xpdl:Activity>

ここで、アクティビティの可視性をfalseに設定して、このモデルをOracle BPMにインポートした場合も、このアクティビティは表示されたままです。非表示要素を削除するには、それらを削除するためのテンプレートをスタイルシートに追加してください。

例B-7は非表示アクティビティの削除方法について示しています。

例B-7 非表示アクティビティの削除

<xsl:template match="xpdl:Activity">
        <xsl:variable name="isVisible">
            <xsl:choose>
                <xsl:when test="xpdl:NodeGraphicsInfos/xpdl:NodeGraphicsInfo/@IsVisible = 'false'">
                    <xsl:text>false</xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:text>true</xsl:text>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:if test="$isVisible = 'true'">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

B.3.7 方向属性の処理

方向は多くのXPDL文書で見つかる属性で、モデルの方向を指定します。この属性にはHORIZONTALまたはVERTICALの値を指定する必要があります。一部のツールで生成されたXPDL文書には、モデルが実際には垂直方向または水平方向であっても水平方向とみなす座標が含まれている場合があります。

モデルの方向に関して、モデルに適切な座標が含まれていることを確認してください。

モデルに不適切な座標が含まれている場合には、座標を入れ替えるためのテンプレートをスタイルシートに追加してください。

モデルの方向属性は、Oracle BPMがプールやレーンのディメンションを計算する(このドキュメントの後半で説明)ためにも重要です。方向属性はプール要素で見つかることがあります。この属性がXPDL文書で見つからない場合は、Oracle BPMによってモデルは水平方向であるとみなされます。

方向属性がツール固有のネームスペースに存在する場合は、方向属性をプール要素に作成して、それらの値をツール固有のネームスペースにある属性に設定することによって、Oracle BPMで利用できるようにする必要があります。

例B-8はプールの方向の設定方法について示しています。このテンプレートではプールの方向を見つけようとしています。見つからない場合は、方向属性はHORIZONTALに設定されます。

例B-8 プールの方向の設定

<xsl:template match="xpdl:Pool">
        <xsl:variable name="orientation">
            <xsl:choose>
                <xsl:when test="not(@Orientation)">
                    <xsl:text>HORIZONTAL</xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="@Orientation"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="Orientation">
                <xsl:value-of select="$orientation"/>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

B.3.8 サブプロセスのビュー・タイプの指定

<BlockActivity/>要素および<Subflow/>要素のビュー属性は、サブプロセスが拡張サブプロセスか縮小サブプロセスかを指定します。Oracle BPMでは、サブプロセス要素のデフォルト・ビュー・タイプをCOLLAPSEDと想定しています。したがって、モデルに拡張サブプロセス要素が含まれていても、XPDLファイルでビュー・タイプが指定されていない場合には、Oracle BPMはこの要素を縮小サブプロセス要素とみなします。


注意:

XPDLファイルのサブフロー要素は子要素も一緒にOracle BPMにレンダリングすることはできないため、サブフロー要素のみがインポートされたモデルで見つかります。サブプロセスはビュー・タイプに応じて識別することができます。サブフローが拡張サブフローの場合には、Oracle BPMはこの要素を拡張サブフロー要素とみなします。


次の例では、ビュー・タイプが指定されていない<BlockActivity/>要素と<Subflow/>要素が示されています。Oracle BPMによる対応する解釈の結果、縮小サブプロセスとなります。

<xpdl2:BlockActivity ActivitySetId="_gJ5DQeE3Ed6tmt0cZVxmlA"/>
<xpdl2:SubFlow Id="_swKUEGyzEd6oxIP3ZfQL-g" PackageRef="ProcessPackage"/>

ビュー属性が<BlockActivity>要素に見つからない場合は、ツール固有のネームスペースに存在している可能性があります。その場合には、<BlockActivity>要素または<Subflow>要素にビュー属性を作成するためのテンプレートをXSLに含めてください。

例B-9は、ビュー属性を<Subflow>要素に追加するのに使用するスタイルシートを示しています。このテンプレートはBizAgiで生成されたXPDLファイルに役立ちます。

例B-9 サブフロー要素へのビュー属性の追加

<xsl:template match="xpdl21:SubFlow">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:attribute name="View">
                    <xsl:choose>
                        <xsl:when test="ancestor::xpdl21:Activity/xpdl21:NodeGraphicsInfos/xpdl21:NodeGraphicsInfo/@Expanded='false'">
                            <xsl:text>COLLAPSED</xsl:text>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:text>EXPANDED</xsl:text>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:attribute>
            </xsl:copy>
        </xsl:template>

例B-10は、ビュー属性を<BlockActivity>要素に追加するスタイルシートのサンプル・テンプレートを示しています。このテンプレートはOracle BPM StudioのXPDLで生成されたファイルに役立ちます。また、このテンプレートは、ツール固有のネームスペースからビュー属性値にアクセスすることによって、<BlockActivity>要素にビュー属性を作成する方法について示しています。

例B-10 BlockActivity要素へのビュー属性の追加

<xsl:template match="xpdl:Activity/xpdl:BlockActivity">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:choose>
    <xsl:when test="ancestor::xpdl:Activity/xpdl:Extensions/albpm:ALBPMExtensions/albpm:FeatureSet/albpm:BooleanFeature[@ name='collapsed']/@value='true'">
     <xsl:attribute name="View">
      <xsl:text>COLLAPSED</xsl:text>
     </xsl:attribute>
    </xsl:when>
    <xsl:otherwise>
        <xsl:attribute name="View">
          <xsl:text>EXPANDED</xsl:text>
        </xsl:attribute>     
    </xsl:otherwise>
   </xsl:choose>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>

B.3.9 オブジェクト・ピンの処理

一部のツールでは、アクティビティに提供される座標がアクティビティ・オブジェクトの左上隅に指定されているのに対し、ほかのツールでは、座標がアクティビティ・オブジェクトの中心に基づいています。これらの座標はオブジェクト・ピンとして機能します。

アクティビティの中心にオブジェクト・ピンを含むXPDL文書をOracle BPMにインポートする場合、期待する位置と異なる位置でアクティビティが発生する可能性があります。これは、アクティビティのオブジェクト・ピンが中心にあるのに対し、Oracle BPMではオブジェクト・ピンが左上隅にあることを期待しているためです。この矛盾を解決するには、アクティビティ座標を再計算する必要があります。

このような座標の計算は、アクティビティの幅の半分をX座標から減算し、アクティビティの高さの半分をY座標から減算するなどの単純な論理を使用して行うことができます。

例B-11は、この再計算を行うスタイルシートのテンプレートを示しています。このテンプレートは、アクティビティに幅、高さ、X座標およびY座標が指定されている場合にのみ有効であることに注意してください。

例B-11 オブジェクト・ピンの位置の再計算

<xsl:template match = "xpdl:Activity/xpdl:NodeGraphicsInfos/xpdl:NodeGraphicsInfo/xpdl:Coordinates">        <xsl:copy>
            <xsl:copy-of select = "@*[name() != 'XCoordinate' and name() != 'YCoordinate']"/>
            <xsl:attribute name = "XCoordinate">
                <xsl:value-of select = "@XCoordinate - ancestor::xpdl:NodeGraphicsInfo/@Width div 2 "/>
            </xsl:attribute>
            <xsl:attribute name="YCoordinate">
                <xsl:value-of select = "@YCoordinate - ancestor::xpdl:NodeGraphicsInfo/@Height div 2"/>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template> 

B.3.10 アクティビティの高さと幅の変更

ツールの中には、XPDLファイルにアクティビティの高さと幅が提供されていないものがあります。ただし、XPDLファイルをOracle BPMにインポートするには、アクティビティの座標とディメンションが必要です。したがって、アクティビティおよびレーンの高さと幅を設定するテンプレートをXSLスタイルシートに追加してください。XPDLファイルにアクティビティの高さと幅が含まれていない場合は、いくつかのデフォルト・ディメンションを設定します。たとえば、タスクと縮小サブプロセスには幅が80で高さが40、イベントとゲートウェイには幅が30で高さが30を設定します。

<BlockActivity>拡張要素にも別の<BlockActivity>拡張要素が含まれている場合があるため、<BlockActivity>および<Subflow>拡張要素に高さと幅を設定することが特に難しいことがあります。ここで、最も内側のBlockActivityの高さと幅を最初に計算してから、親BlockActivityの計算を行う必要があります。この再帰は、最上位の<BlockActivity>までバブル・アップする必要があります。この再帰プロセスをXSLでコーディングすることは難しい場合があります。このため、Oracle BPMは拡張サブプロセスの高さと幅を計算する機能を備えています。この機能を使用するには、XSLテンプレートを使用して、<BlockActivities>の高さと幅をそれぞれ0と0に設定してください。

例B-12は、高さと幅が定義されていないイベント要素です。

例B-12 高さと幅が定義されていないイベント要素

<xpdl:Activity Name="Begin" Id="Begin">
                    <xpdl:Event>
                <xpdl:StartEvent Trigger="None"/>
                    </xpdl:Event>
           ……………………………..
              <xpdl:NodeGraphicsInfos>
                        <xpdl:NodeGraphicsInfo LaneId="Accounting" IsVisible="true">
                            <xpdl:Coordinates XCoordinate="36.0" YCoordinate="110.0"/>
                        </xpdl:NodeGraphicsInfo>
                    </xpdl:NodeGraphicsInfos>
 </xpdl:Activity>

例B-13は、アクティビティの高さと幅を設定するのに使用するスタイルシートのサンプル・テンプレートを示しています。このテンプレートは、XPDL文書でアクティビティの高さと幅が指定されていない場合に使用できます。この例では、タスク要素と縮小BlockActivityにディメンション80(幅) x 40(高さ)、ルートとゲートウェイにディメンション30 x 30、拡張BlockActivityにディメンション0 x 0が設定され、Oracle BPMはこれらのBlockActivity拡張要素のディメンションを計算できるようになります。このテンプレートはBPM Studio XPDLファイルに役立ちます。

例B-13 アクティビティの高さと幅の設定

<xsl:template match = "xpdl:Activity/xpdl:NodeGraphicsInfos/xpdl:NodeGraphicsInfo">
        <xsl:variable name = "activityType">
            <xsl:choose>
        <xsl:when test = "ancestor::xpdl:Activity/xpdl:Implementation/xpdl:SubFlow">
                    <xsl:text>SubFlow</xsl:text>
                </xsl:when>
                <xsl:when test = "ancestor::xpdl:Activity/xpdl:Implementation">
                    <xsl:text>Task</xsl:text>
                </xsl:when>
                <xsl:when test = "ancestor::xpdl:Activity/xpdl:Event">
                    <xsl:text>Event</xsl:text>
                </xsl:when>
                <xsl:when test = "ancestor::xpdl:Activity/xpdl:Route">
                    <xsl:text>Route</xsl:text>
                </xsl:when>
                <xsl:when test = "ancestor::xpdl:Activity/xpdl:BlockActivity">
                    <xsl:choose>
                        <xsl:when test = "ancestor::xpdl:Activity/xpdl:Extensions/albpm:ALBPMExtensions/albpm:FeatureSet/albpm:BooleanFeature[@ name = 'collapsed']/@value != 'true'">
                            <xsl:text>ExpandedBlockActivity</xsl:text>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:text>CollapsedBlockActivity</xsl:text>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:when>
            </xsl:choose>
      </xsl:variable>
      
      <xsl:copy>
        <xsl:copy-of select = "@*"/>
            <xsl:attribute name = "Width">
                <xsl:choose>
                    <xsl:when test = "$activityType = 'Task' or $activityType = 'CollapsedBlockActivity' or $activityType = 'SubFlow'">
                        <xsl:text>80</xsl:text>
                    </xsl:when>
                    <xsl:when test = "$activityType = 'Route' or $activityType = 'Event'">
                        <xsl:text>30</xsl:text>
                    </xsl:when>
                    <xsl:when test = "$activityType = 'ExpandedBlockActivity'">
                        <xsl:text>0</xsl:text>
                    </xsl:when>
                </xsl:choose>
            </xsl:attribute>
            <xsl:attribute name = "Height">
                <xsl:choose>
                    <xsl:when test = "$activityType = 'Task' or $activityType = 'CollapsedBlockActivity' or $activityType = 'SubFlow'">
                        <xsl:text>40</xsl:text>
                    </xsl:when>
                    <xsl:when test = "$activityType = 'Route' or $activityType = 'Event'">
                        <xsl:text>30</xsl:text>
                    </xsl:when>
                    <xsl:when test = "$activityType = 'ExpandedBlockActivity'">
                        <xsl:text>0</xsl:text>
                    </xsl:when>
                </xsl:choose>
            </xsl:attribute>
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>

B.3.11 レーンの高さと幅の変更

多くのXPDL文書では、レーンのディメンション(高さや幅)は親プールの方向に応じて指定されます。たとえば、親プールの方向が水平の場合、XPDL文書にレーンの幅は見つかりますが高さは見つからない可能性があります。前述したように、Oracle BPMがグラフィカル要素のサイズを決定するには、レーンおよびアクティビティの高さと幅が必要です。XPDL文書にレーンの高さや幅が見つからない場合は、これらの属性が含まれているすべての要素を保持するのに十分な値に設定してください。

レーンの高さは指定されているが幅が指定されていない場合には、単純な論理を使用してレーンの幅を設定できます。X座標にアクティビティの幅を足した最大の合計を求め、この値をすべてのレーンの幅に設定します。レーンの幅がすべての要素を保持できる場合は、X座標と幅の最大合計を持つアクティビティの右境界線から引かれているレーン右境界線が見られることがあります。また、レーンをその他のオブジェクトのコンテナとして表示できるよう拡張するために、小さいパディング値を最大合計に追加することもできます。

上述の論理は、すべてのアクティビティに高さと幅の値が含まれている場合に有効です。ただし、アクティビティに高さと幅の値が含まれていない場合もあります。そのような場合、レーンの高さや幅を計算する前に各アクティビティの高さと幅を計算する必要があるため、上述の論理でXSLTを使用してレーンの幅を計算することは困難です。この問題を解決するために、Oracle BPMはレーンの高さや幅を設定する機能を備えています。

この機能を使用するには、XSLTを使用して欠落しているレーンのディメンションを0に設定してください。この機能では、レーンに1つのディメンションが指定されていると想定しています。

B.3.12 プールの高さと幅の変更

プールに高さと幅が指定されている場合、Oracle BPMはそれらのディメンションを使用します。これらの値が指定されていない場合は、Oracle BPMは計算を試みます。ディメンションが1つしか指定されていない場合でも、Oracle BPMは両方のディメンションを計算します。この機能を回避するには、ソースXPDL文書にプールの両方のディメンションが含まれている必要があります。

B.3.13 アクティビティの位置

XPDLファイルで座標とディメンションが指定されている場合、Oracle BPMはそれらの値を操作せずに使用します。レーンのディメンションやサブプロセスのディメンションなど、一部のディメンションが欠落している場合は、Oracle BPMはそうしたディメンションの計算を試みます。ディメンションの計算プロセスで、Oracle BPMはモデルをより良くするためにディメンションにいくつかのパディングを追加しますが、アクティビティの周りにスペースがある場合には、このモデルは問題ありません。そうでない場合は、インポートされたモデルに、ほかのアクティビティまたはレーンの上部に引かれているアクティビティまたはレーンの境界線が含まれていることがあります。この問題を回避するには、アクティビティの周りにスペースを持たせるように配置してください。

複数のレーンまたはアクティビティに重複するIDを含むモデルをOracle BPMにインポートする際に、問題が発生することがあります。Oracle BPMは同じ名前で複数のレーンまたはアクティビティを作成することはできません。ソースから1つのみのレーンまたはアクティビティが作成され、その結果は元のモデルに正しく反映されません。

この問題を回避するには、一意のIDでモデル要素を作成してください。

B.3.14 欠落要素を含める

XPDLソース文書に、Oracle BPMが適切に変換を行うのに必要な要素や属性が欠落している場合には、XSLTを使用してそうした要素や属性を追加します。

たとえば、XPDLに8つのタイプのタスクがあります。Oracle BPMがこれらのタスク・タイプを認識するためには、<Task>要素に、タスクがサービス・タスクであるか受信タスクであるかなどを指定する別の子要素が含まれている必要があります。これらの子要素が<Task>ソース要素に見つからない場合は、その<Task>要素はデフォルトの<Task>要素に変換されます。

たとえば、次に示す<Task>要素は<TaskUser>子要素を含んでいないユーザー・タスクです。したがって、Oracle BPMによってデフォルトのタスク要素とみなされます。

<Implementation>
            <Task />
 </Implementation>

アクティビティがOracle BPMにユーザー・タスクとして識別されるには、次のように、<TaskUser>要素をタスク要素の下に追加する必要があります。

<Implementation>
        <Task>
                <TaskUser>
....
                    </TaskUser>
</Task>
</Implementation>

前述のように、多くの属性がツール固有のネームスペースの下に指定されている可能性があります。タスク・タイプがXPDLネームスペースの下に見つからない場合は、ツール固有のネームスペースで検索して、それらの要素をタスク要素の下に含めるためのテンプレートをスタイルシートに追加してください。

例B-14では、自動タスク要素が検出された場合は常に、<TaskService>要素を<Task>要素の子として含める方法について説明しています。このテンプレートはOracle BPM Studioで生成されたXPDLソース・ファイルに役立ちます。

例B-14 TaskService要素をタスク要素の子として含める

<xsl:template match="xpdl:Activity/xpdl:Implementation/xpdl:Task">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
       <xsl:if test="ancestor::xpdl:Activity/xpdl:Extensions/albpm:ALBPMExtensions/albpm:FeatureSet/albpm:StringFeature[@name='type']/@value='AUTOMATIC'
and not(child::xpdl:TaskService)">
     <xpdl:TaskService/>
    </xsl:if>
     <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>

B.3.15 アクティビティの正確性の確認

アクティビティをソース・ツールからXPDLとしてエクスポートする場合に、ソースXPDLにアクティビティを表す適切な要素が含まれていることを確認してください。たとえば、イベント・アクティビティが含まれているモデルをXPDLにエクスポートする際に、ツールがそのイベント・アクティビティに<Route>要素や<Task>要素を作成した場合、この要素を正確にイベント・アクティビティを表す要素で置き換える必要があります。

次に示すXPDL要素について考えます。アクティビティは開始イベントで、<Activity>要素の下にイベント要素ではなく<Route>要素が置かれています。このモデルをOracle BPMにインポートすると、このアクティビティはイベント・アクティビティとしてではなく、ルート・アクティビティに変換されます。

例B-15 アクティビティの正確性の確認

<xpdl:Activity Name="Group$Begin" Id="Group$Begin">
                            <xpdl:Route GatewayType="XOR" MarkerVisible="true"/>
                …………………..
</xpdl:Activitiy> 
The correct notation for the above element should be: 
<xpdl:Activity Name="Group$Begin" Id="Group$Begin">
        <xpdl:Event>
                        <xpdl:StartEvent Trigger="None"/>
                …………………..      
               </xpdl:Event>
            ……………………….
</xpdl:Activity>

ソースXPDLでこの問題が見つかった場合は、不適切な要素を適切な要素で置き換えるためのテンプレートをスタイルシートに追加してください。