プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Business Process Composerによるビジネス・プロセスの開発
12c (12.2.1.2.0)
E82843-01
目次へ移動
目次

前
前へ

D Oracle BPMにインポートするためのプロセスの準備

この付録では、Microsoft VisioやXPDL (プロセス定義言語)をサポートするツールで作成されたプロセス・モデルのインポート結果を向上させる方法について説明します。

この付録の内容は次のとおりです。

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

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

ただし、Visioのマッピングを変更できるのは、Oracle JDeveloper内のBusiness Process Management (BPM) Studioを使用した場合のみです。

この項では、BPM Studioに対するマッピングをカスタマイズする方法について説明します。モデルをBPM Studioにインポートした後、プロジェクトをエクスポートしてBusiness Process Composerにインポートすることにより、モデルをBusiness Process Composerに移動できます。

マッピング・ファイルでは、Visioの各要素に対応するBPMNフロー・オブジェクトが定義されています。これらのファイルは、Fusion Middlewareホーム・ディレクトリ内の次のディレクトリに保存されています。

.../soa/plugins/jdeveloper/extensions/oracle.bpm.converter.

注意:

ファイルVisioMasterMap.xmlはアップグレード中に上書きされる可能性があるため、直接編集しないでください。このファイル内のマッピングをオーバーライドするには、VisioUserMap.xmlという別のファイルを作成して編集します。

VisioMasterMap.xmlで定義されているデフォルトのマッピングを変更するには:

  1. VisioUserMap_SAMPLE.xmlというファイルを探し、ファイル名をVisioUserMap.xmlに変更します。
  2. 名前変更後のファイルを編集して変更を加えます。

    このファイルにより、マスター・マップが拡張またはオーバーライドされます。

    注意:

    このファイルは、VisioUserMap.xmlという名前を付けて、VisioMasterMap.xmlファイルと同じディレクトリに配置する必要があります。

  3. VisioMasterMap.xmlの解析後、Business Process ComposerはVisioUserMap.xmlが存在するかどうかを調べます。

    その後、ルールを適宜変更します。

    VisioUserMap.xmlには、VisioMasterMap.xmlファイルで定義されているデフォルトと同じルート要素(VisioMasterMap.xsdへの参照など)が含まれている必要があります。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>
    

    注意:

    VisioUserMap.xmlには、拡張されるエントリまたはオーバーライドされるエントリのみが含まれている必要があり、元のすべてのエントリを含めることはできません。

D.1.1 Visio図形のマッピング作業

Microsoft Visioは、あらゆる種類の図を描画できる作図ツールです。ただし、Business Process Composerにインポートできるのはプロセス・モデルのみです。Visioには各種のプロセス・モデリング・テンプレートやステンシルが含まれており、サード・パーティからも多数提供されているため、コンバータではVisioの各図形オブジェクト(四角形、線、多角形など) から対応するBPMNシンボルへのマッピングを試みます。これには、VisioMasterMap.xmlファイルとVisioUserMap.xmlファイルが使用されます。

ステンシルからVisioの図面ページに追加された各図形には、その作成元となったマスター・オブジェクトの名前がタグ付けされています。たとえば、VisioのユーザーがTaskという名前の複数の四角形の図形をステンシルからページ上にドラッグし、名前を変更しても、各図形にはTaskというマスター名が関連付けられています。これをVisioで確認するには、メニューから「Format」→「Special」を選択します。

注意:

メニュー・アイテムの「Format」→「Special」が表示されない場合は、「Tools」→「Options」→「Advanced」を選択し、「Run in developer mode」チェック・ボックスを選択します。このオプションがある場所は、ご使用のVisioのバージョンによって異なることがあります。

図形にマスターがない場合(「Drawing」ツールバーから直接描画された単純な四角形や円などのオブジェクトがこれに該当)、コンバータは図形の「Name」フィールドを参照します。このフィールドも「Format」→「Special」ダイアログで確認できます。

その後、Oracle Business Process Composerは、VisioUserMap.xmlとVisioMasterMap.xmlで図形のマスター名と一致するエントリを検索します。たとえば、図形のマスターがTaskならば、コンバータは次のマップ・エントリを探します。

  <Master Name="task">    <BPMNObject>Task</BPMNObject>  </Master>

このエントリは、マスターがTaskの図形をすべてBPMNのTaskシンボルとしてインポートするようコンバータに指示しています。

注意:

マスター名は大文字と小文字が区別されません。したがって、taskはVisioのtask、TaskおよびTASKマスターと一致します。

マスター・マップ・エントリでは、追加のBPMNプロパティも定義できます。次のエントリは、VisioのgatewayというマスターをBPMNのGatewayシンボルにマッピングしていますが、BPMN属性値もいくつか設定しています。

  <Master Name="gateway">    <BPMNObject>Gateway</BPMNObject>    <Attributes>      <Attribute Name="ExclusiveType" Value="Data"/>      <Attribute Name="GatewayType" Value="Exclusive"/>      <Attribute Name="MarkerVisible" Value="false"/>    </Attributes>  </Master>

属性は、BPMN標準の要件に基づいてテキスト、数値、またはブール値(true/false)に設定できます。

属性値を、Visio図形自体で定義されているプロパティから導出することも可能です。Visio 2010 BPMNステンシルのタスク図形に対する次のマスター・マップ・エントリでは、BPMN属性のTaskTypeImplementationを対応する図形プロパティから設定しています。

  <Master Name="Vis2010 Task" Extends="Vis2010 Activity">    <BPMNObject>Task</BPMNObject>    <Attributes>        <Attribute Name="TaskType" Value="Prop.BpmnTaskType" SrcType="visio" />        <Attribute Name="Implementation" Value="Prop.BpmnImplementation" SrcType="visio" />    </Attributes>  </Master>

XML属性の「srcType」は、属性値の解釈の仕方をコンバータに指示します。srcTypeをvisioに設定すると、値がVisioオブジェクトの「シェイプシート」で定義されていることを示します。Visio図形のシェイプシートを表示するには、図形を選択し、「Window」→「Show ShapeSheet」を選択します。最もよく使用されるプロパティは、「Custom Properties」と「User-defined Cells」のセクションで定義されています。これらは、接頭辞のPropとUserにそれぞれ対応しています。プロパティ名は、*.vdx形式で保存したVisioファイルのXMLタグ階層から導出することもできます。

D.1.1.1 条件付きマッピング

マスター・マップ・ファイルは、条件付きマッピングもサポートしています。これが有効なのは、2つの異なるVisioステンシルで同じマスター名を使用しながらも、異なるVisioプロパティを使用してBPMN属性値を格納する場合です。たとえば、次のエントリでは、TrisoTech BPMNステンシルのIntermediate Event図形がThrowingイベントかCatchingイベントかを、条件を使用して調べています。

  <Master Name="Intermediate Event" Extends="Triso Object">    <BPMNObject>IntermediateCatchEvent</BPMNObject>    <Conditions>      <Condition Name="Direction" Value="Prop.direction" SrcType="visio" Equals="Catching" />    </Conditions>    <Attributes>      <Attribute Name="Trigger" Value="Prop.IntermediateEvent_trigger" SrcType="visio" />    </Attributes>        </Master>

NotNull (大文字/小文字は区別されません)という特殊な条件属性を使用すると、特定のVisioプロパティの有無を検査できます。次のマスター・マップ・エントリは、マスター名がStart Eventであり、Prop.StartEvent_Triggerというプロパティが含まれている場合に一致します。

  <Master Name="Start Event">    <BPMNObject>Event</BPMNObject>    <Conditions>      <!-- this condition confirms that this is from Trisotech stencil -->      <Condition Name="Is Triso shape" Value="Prop.StartEvent_Trigger" SrcType="visio" Equals="NotNull" />    </Conditions>    <Attributes>      <Attribute Name="EventType" Value="Start" SrcType="bpmn" />      <Attribute Name="Trigger" Value="Prop.StartEvent_Trigger" SrcType="visio" />      <Attribute Name="isInterrupting" Value="Prop.StartEvent_Interrupting" SrcType="visio" />    </Attributes>        </Master>

同名のマスター・マップ・エントリが複数ある場合は、最初に見つかった、条件がすべて真のエントリが使用されます。どの条件付きエントリも一致しない場合は、そのマスター名に対する最初の無条件マスター・マップ・エントリが使用されます。VisioUserMap.xmlファイルが先に処理されます。したがって、一致するマスター・マップ・エントリがこのファイルにあれば、VisioMasterMap.xmlにある同名の他のエントリはすべて無視されます。

「*」という特殊なマスター・マップ・エントリ名を使用すると、すべてのマスターに一致します。これは必ず条件と一緒に使用してください。これは、図形を図に追加した後でBPMNオブジェクト・タイプを(たとえば、タスクからサブプロセスへ)変更できるVisioテンプレートで便利です。このシナリオでは、図形が別のシンボルに見えるように変更されても、図形マスターは元のマスターに設定されています。たとえば、次のエントリでは「*」ワイルドカードを使用し、図形のプロパティ値にのみ基づいてエントリと一致させています。

  <Master Name="*" Extends="Vis2010 Task">    <Conditions>        <Condition Name="Activity Type" Value="Prop.BpmnActivityType" SrcType="visio" Equals="Task" />    </Conditions>  </Master>  <Master Name="*" Extends="Vis2010 Subprocess">    <Conditions>        <Condition Name="Activity Type" Value="Prop.BpmnActivityType" SrcType="visio" Equals="Sub-Process" />    </Conditions>  </Master>

Visioのマスター名または図形名がVisioUserMap.xmlまたはVisioMasterMap.xmlにあるどのエントリにも一致しない場合は、図形の属性を調べてBPMNオブジェクト・タイプが判断されます。基本ルールは次のとおりです。

  • 図形がコネクタの場合(通常、他の図形の接続には線が使用されます)、SequenceFlowとしてインポートされます。

  • テキストを含む四角形の図形で、枠と塗りつぶしの色がないものは、テキスト注釈としてインポートされます。

  • 円または楕円の図形はイベントとしてインポートされます。

  • 他の図形を囲む四角形は、その図形の境界を横断するシーケンス・フローがなければ、拡張サブプロセスとしてインポートされます。

    四角形の境界内の図形にシーケンス・フローがつながっている場合は、BPMNのGroupシンボルとして扱われますが、Oracle BPMではGroupシンボルがサポートされていないため無視されます。

  • 前述のルールに一致しない図形はタスクとしてインポートされます。

注意:

Visioの「Group」コマンドを使用して図形を組み合せるときは注意が必要です。これはVisioで複数の図形を移動して並べ変えるときに便利な機能ですが、図形のグループはインポート時に単一のオブジェクトとして扱われ、マスターがないため、コンバータが混乱し、単一のタスクとしてインポートされる可能性が高くなります。

D.1.2 Visioのモデリングに関するヒント

Visioファイルの作成時には次のヒントを考慮に入れてください。

  • 適切なステンシルを使用する。

  • すべての図形がマスター図形に基づくようにする。

  • 他の図形とのコネクタはすべて両端で接合させる。

  • 短い線をつなぎ合わせてフローを作成しない。

    フローごとに1本の連続したコネクタを使用する。

  • オブジェクトを手動でグループ化しない。

  • 図形と線には、選択と入力によって必ずラベルを付ける。

    独立したテキスト・ボックスを作成しない。

  • BPMNオブジェクトに正確に対応付けられない新しいシンボルを作成しない。

  • 使用するすべてのマスターがVisioMasterMap.xmlまたはVisioUserMap.xmlで定義されていることを確認する。

  • オンページ・コネクタ、オフページ・コネクタ、リンク・イベントを使用しない。

    これらはBPMでサポートされていません。

D.1.3 VisioUserMap.XMLの更新

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

VisioUserMap.xmlを更新する手順は次のとおりです。

この例では、マスターがReportの図形が、元のVisioファイルに含まれており、これをSendタスクにマップします。Reportは現在VisioMasterMap.xmlでマッピングされていないため、この図形は抽象タスクとしてインポートされます。デフォルトでは、VisioMasterMap.xmlはこの図形をSendタスクにマップします。それを入力オブジェクトまたは出力オブジェクトとして厳密に使用すると、BPMNデータ・オブジェクトへのマップがより正確になります。

  1. VisioMasterMap.xmlファイルで、次のようなマスター定義を検索します。
    <Master Name="document" Extends="task">
        <Attributes>
          <Attribute Name="TaskType" Value="Send"/>
        </Attributes>
      </Master>
    

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

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

次に示すように、Extends属性を使用して、オブジェクトを追加の属性または異なる属性とともに既存のBPMNオブジェクトにマップできます。

<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に追加されています。

D.1.4 BPMN要素の有効な値

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

  • Task:

    • UserTask

    • ManualTask

    • ReceiveTask

    • SendTask

    • ServiceTask

    • ScriptTask

    • BusinessRuleTask

  • Subprocess:

    • AdHocSubprocess

    • CallActivity

  • Event:

    • StartEvent

    • EndEvent

    • IntermediateCatchEvent

    • IntermediateThrowEvent

    • BoundaryEvent

  • Gateway:

    • ExclusiveGateway

    • InclusiveGateway

    • ParallelGateway

    • ComplexGateway

    • EventBasedGateway

  • DataObject:

    • DataObjectReference

  • Group:

  • Annotation

    • TextAnnotation

  • Lane

  • Pool:

    • Participant

  • MessageFlow

  • SequenceFlow

  • Association

  • null

注意:

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

D.1.5 BPMN要素の属性

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

タスクの属性と値

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

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

属性

TaskType

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

LoopType

Standard、MultiInstance

isForCompensation

true、false

Implentation

任意のテキスト

OperationRef

任意のテキスト

サブプロセスの属性と値

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

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

属性

isExpanded

true、false

isATransaction

true、false

LoopType

Standard、MultiInstance

isForCompensation

true、false

AdHoc

true、false

IsCollapsed

true、false

SubprocessType

Embedded、Reusable、Reference

ExpandedWidth

数値

ExpandedHeight

数値

ModelReference

テキスト

CalledElement

テキスト

TriggeredByEvent

true、false

LoopMaximum

数値

LoopCounter

数値

LoopCondition

テキスト

MultiInstanceCondition

テキスト

MultiInstanceIsSequential

true、false

イベントの属性と値

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

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

属性

EventType

Start、Intermediate、End

Trigger

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

EventDirection

Throw、Catch

IsInterrupting

true、false

CancelActivity

true、false

TimeCycle

テキスト

TimeDate

テキスト

ゲートウェイの属性と値

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

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

属性

GatewayType

Parallel、Inclusive、Exclusive、Complex

ExclusiveType

Event、Data

MarkerVisible

true、false

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

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

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

属性

ConditionType

None、Expression、Default

ConditionExpression

テキスト

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

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

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

属性

Direction

None、One、Both

AssociationDirection

None、One、Both

プールの属性と値

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

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

属性

BoundaryVisible

true、false

IsHorizontal

true、false

レーンの属性と値

表D-8はBPMNレーンの有効な属性と値を示しています。

表D-8 レーンの属性と値

属性

BoundaryVisible

true、false

IsHorizontal

true、false

D.1.6 外部テキストの処理

Business Process Composerは、Visioファイルをインポートするとき、ソース・ファイルで見つかったプールごとに別々のプロセスを作成します。BPMNモデルでは可視のプール境界がないプロセスも表現できるため、Visioのプールやレーンの内側にない図形(凡例、タイトルなど)も個別のプロセスに追加されます。このため、プロセス・オブジェクトではない外部要素のみがBPMプロセスに格納される場合があります。このような図形が変換されないようにするには、該当する図形マスターをnullにマッピングするエントリをVisioUserMap.xml fileに追加します。これにより、コンバータに図形を無視させることが可能です。図形にマスターがない場合、コンバータはVisioの「Format Special」ダイアログで定義されている図形名と一致するエントリを探します。たとえば、VisioファイルにSheetNameという名前のオブジェクトが含まれている場合、その値をVisioUserMap.xmlでnullにマッピングすれば、インポート時に無視されます。

<Master Name="SheetName">
    <BPMNObject>null</BpmnObject>
</Master>

D.2 XSLTを使用したXPDLインポートのカスタマイズ

XPDLとは、Workflow Management Coalitionが策定した、ワークフロー自動化ツール間でプロセス・モデル情報を交換するための互換形式です。BPMでは、XPDLバージョン1.0、2.0、2.1および2.2のインポートをサポートしています。

現在、XPDLをサポートしているプロセス・モデリング・ツールは多数ありますが、すべてのツールでこの標準が同じように実装されているわけではありません。Oracle BPMでは、公式のXPDL仕様(http://www.xpdl.orgから入手可能)に厳密に準拠したXPDLファイルをサポートしており、非準拠の形式についてはExtensible Stylesheet Language Transformation (XSLT)を使用してBPMの所定の形式に変換します。XPDLインポータは様々な拡張属性も認識します。これにより、一般的な相違に応じた特別な変換ロジックがトリガーされるので、複雑なXSLTロジックは必要ありません。

D.2.1 一般的な変換要件

最も一般的な変換内容は次のとおりです。

  • オブジェクトの座標を親コンテナに対する相対座標から図面ページの左上隅に対する相対座標に調整する。

  • オブジェクトの左上隅を表すようにオブジェクト座標を調整する。

  • シーケンス・フローのルーティングを再作成する。

  • 欠けている要素と属性を作成する。

  • 要素を削除する。

  • 要素と属性の値をベンダー固有の名前空間からXPDL名前空間に移動する。

D.2.2 変換ロジックの概要

この項では、いくつかの一般的な要件を処理する手順について説明します。ここに示す例は、何か他の要件が発生した場合にそれを処理する独自の変換ルールを作成する際の参考になります。

BPM Studioを使用してXPDLファイルをインポートするとき、インポート・プロセスは次のフォルダにある特殊なファイルを使用します。

ORACLE_HOME>/soa/plugins/jdeveloper/extensions/oracle.bpm.converter

XSLFilePaths.xmlファイルは、各種のベンダー形式と変換用の適切なXSLファイルの間のマッピングとして機能します。次に、このファイルのエントリの例を示します。

<XSLFilePath Vendor="Bizagi Process Modeler">BizagiPatch.xsl</XSLFilePath>

Vendor属性は、ソース・ファイル内のXML要素/Package/PackageHeader/Vendorと一致する必要があります。次に、上の行に一致するBizagi XPDLファイルの断片を例示します。

<?xml version="1.0" encoding="utf-8"?><Package xmlns:xsd=http://www.w3.org/2001/XMLSchema      xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance      Id="bf8a25f5-275d-4546-8d07-dfa02666c51d"           Name="Sample" xmlns="http://www.wfmc.org/2009/XPDL2.2">  <PackageHeader>    <XPDLVersion>2.2</XPDLVersion>    <Vendor>Bizagi Process Modeler</Vendor>    <Created>2013-07-29T19:17:31.931003-07:00</Created>    <ModificationDate>2013-07-29T19:18:53.207857-07:00</ModificationDate>    <Description>Phases</Description>    <Documentation />  </PackageHeader>

Vendor属性のかわりにCondition属性を指定して、有効なXPATH式を記述することもできます。ソース・ファイルの式の評価結果が真ならば、対応するXSLファイルが使用されます。次にCondition条件の使用例を示します。

<XSLFilePath Condition="substring(/Package/PackageHeader/Vendor/text(), 0, 22)='Metastorm ProVision 6'">ProvisionPatch.xsl</XSLFilePath>

この式では、Vendor属性の最初の22文字を文字列「Metastorm ProVision 6」と比較しています。この手法は、たとえばVendorとVersionの組合せを照合するときなどに利用できます。

特定のXSLファイルが識別されると、インポータはソース・ファイルに対してXSLT変換を適用してから、変換後のXMLをインポートします。ソース・ファイルと一致するVendorまたはConditionがない場合、インポータはpatch.xslファイルを使用します。

D.2.3 特殊な属性

XPDLインポータは、XPDLの拡張性機能を使用して定義されたオプションの属性を検索します。これらの属性は、XSLTとしてのコーディングが困難な特殊ケースを処理するための、インポータに対する指示として機能します。これらの属性は、次のように/Package/ExtendedAttributesセクションに配置されている必要があります。

<Package>       <Extended Attributes>              <ExtendedAttribute Name="attribute name" Value="value" />       <Extended Attributes></Package>

表D-9 拡張属性と有効な値

属性名 有効な値 デフォルト値 説明

redrawConnections

true、false

false

シーケンス・フローのパス属性を無視し、新しいパスをプログラムによって作成します。

activitiesObjectPin

Upperleft

Lowerleft

中央

Upperleft

アクティビティ(フロー・ノード)のXY座標がシンボルの四角形の境界の左上角、左下角または中心のいずれに対応しているかを示します。

lanesRelativeToPools

true、false

false

レーン・オブジェクトのXY座標がその親プールに対する相対座標であることを示します。

activitiesRelativeToLanes

true、false

false

アクティビティのXY座標がその親レーンに対する相対座標であることを示します。

activitiesRelativeToPools

true、false

false

アクティビティのXY座標がその親レーンに対する相対座標であることを示します。注意: activitiesRelativeToLanesとactivitiesRelativeToPoolsを両方ともtrueには設定できません。

subProcessChildPositionRelative

true、false

false

サブプロセスの内側にあるアクティビティのXY座標がそのサブプロセスに対する相対座標であることを示します。

recalculatePoolsAndLanesPositions

true、false

false

プールおよびレーンのXY座標を先行するプールおよびレーンの位置と高さに基づいて計算するようインポータに要求します。ソース・モデルにプールとレーンの位置座標が含まれていない場合は、この属性をtrueに設定する必要があります。

D.2.3.1 オブジェクト座標

XPDL仕様書には、すべてのオブジェクト座標は、オブジェクトの境界を示す四角形の左上角を、ページの左上角を起点(0,0)とするページ座標系で指定すると明記されています。次の例では、図D-1のプール1の高さを100単位、プール2の高さを200単位、プール2内の各レーンの高さを100単位とします。

図D-1 BPMNプロセスの例

この図については周囲のテキストで説明しています。

XPDL仕様のグローバル座標系を使用すると、図中の各オブジェクトのXY座標は次のようになります。

  • プール 1 - (0,0)
  • プール 2 - (0, 200)
  • レーン 1 - (40, 200)
  • レーン 2 - (40, 300)
  • タスク 1 - (175, 15)
  • タスク 2 - (175, 215)
  • タスク 3 - (325, 315)

すべての座標がページの左上角を基準としているので、これらの座標を指定しているソース・ファイルは、変換の必要なく正しくBPMにインポートされます。

XPDLに保存されるオブジェクト座標がその親プールおよびレーンに対する相対座標であるツールについて考えてみましょう。この場合、各座標は次のように表されます。

  • プール 1 - (0,0)
  • プール 2 - (0, 200)
  • レーン 1 - (40, 0)
  • レーン 2 - (40, 100)
  • タスク 1 - (175, 15)
  • タスク 2 - (175, 15)
  • Task 3 - (325, 15)

プール2の中のレーン1のY座標が0であることに注目してください。このツールではレーンの位置を親プールに対する相対座標として保存するため、0という値はレーンの上端がプールの上端と一致することを示しています。同様にレーン2のY座標は100ですが、これはプールの上端から100単位下に位置することを示しています。

また、各タスクのY座標は15ですが、これは左上角がそれぞれのレーンの上端より15単位下にあることを示しています。

この図を正しくOracle BPMにインポートするには、次の拡張属性値を設定する必要があります。

D-10 拡張属性値

属性名

lanesRelativeToPools

true

activitiesRelativeToLanes

true

これらの属性をXPDLに追加するXSLTコードは次のとおりです。

  <xsl:template match="Package/ExtendedAttributes">
    <xsl:copy>        <xsl:copy-of select="@*"/>                <ExtendedAttribute Name="lanesRelativeToPools" Value="true"/>	        <ExtendedAttribute Name="activitiesRelativeToLanes" Value="true"/>        <xsl:apply-templates/>                                    </xsl:copy>  </xsl:template>

少し異なるバリエーションとして、レーンは親プールに対する相対座標であるが、アクティビティは親レーンではなく親プールに対する相対座標である場合が考えられます。この場合、オブジェクト座標は次のようになります。

  • プール 1 - (0,0)
  • プール 2 - (0, 200)
  • レーン 1 - (40, 0)
  • レーン 2 - (40, 100)
  • タスク 1 - (175, 15)
  • タスク 2 - (175, 15)
  • タスク 3 - (325, 115)

プール 1 - (0, 0)

タスク3のY座標が15でなく115である点のみが異なります。この場合は、拡張属性を次のように設定する必要があります。

表D-11 拡張属性と値

属性名

lanesRelativeToPools

true

activitiesRelativeToPools

true

D.2.3.2 アクティビティのローカル座標系

XPDL仕様では、アクティビティの位置は、ページ座標系上の境界を示す四角形の左上隅の位置であると規定されています。しかし、ツールの中には、オブジェクトの中心をページ上の位置とするものもあります。これはオブジェクトのローカル座標系と呼ばれます。

これを理解する最も簡単は方法として、絵はがきをコルク版に画鋲で留めるところを想像してみてください。画鋲がコルク版に開ける穴がコルク版上のはがきの位置を表します。コルク版の左端から画鋲までの距離を測るとX座標が得られ、コルク版の上端から画鋲までの距離を測るとY座標が得られます。ただし、画鋲をはがきに刺す位置そのものも、はがきの正確な位置決めに影響してきます。画鋲をはがきの左上角に刺した場合と、はがきの中心に刺した場合とでは、位置が異なるでしょう。

図D-1のBPMNの例で言えば、アクティビティの中心をローカルの画鋲位置とするXPDLツールでは、タスクの座標が次のようになります。

  • タスク 1 - (220, 50)
  • タスク 2 - (220, 250)
  • タスク 3 - (370, 350)

X座標が右へ45単位シフトしており (タスクの枠の幅は90単位)、Y座標は各レーンの縦方向の中心に位置しています(高さは00単位)。

インポータではすべての座標は左上隅の位置を示すと想定しているため、XPDLツールがアクティビティのページ上の位置基準をアクティビティの中心としている場合、BPMへのインポート後に、アクティビティはその幅の半分右へ、高さの半分下へシフトされます。この補正を行うには、次の属性を設定する必要があります。

activitiesObjectPin CENTER

このためのXSLTコードは次のとおりです。

  <xsl:template match="Package/ExtendedAttributes">    <xsl:copy>        <xsl:copy-of select="@*"/>                <ExtendedAttribute Name="activitiesObjectPin" Value="CENTER"/>        <xsl:apply-templates/>                                    </xsl:copy>  </xsl:template>

D.2.3.3 非表示要素の削除

Oracle BPMでは、ソースXPDLファイルのすべてのグラフィカル要素は、その可視性がfalseに設定されている場合でも表示要素とみなされます。したがって、次に示すアクティビティ要素のように、以前は非表示になっていた要素が変換後のBPMNプロセスでは表示されるという違いが見つかることがあります。

<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にインポートすると、このアクティビティが表示されます。非表示要素を削除するには、それらを削除するためのテンプレートをスタイルシートに追加してください。

<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>

D.2.3.4 独自の名前空間の処理

XPDLツールの中には、標準のXPDL名前空間のほかに独自の名前空間を使用するものもあります。これは多くの場合、ツールの特殊な機能や属性をサポートするためのものですが、XPDL名前空間に保存されるべき情報が独自の名前空間に保存されることがあります。

次のXPDLファイル・ヘッダーでは複数の名前空間を定義しています。

    <?xml version="1.0" encoding="UTF-8"?>    <Package Id="1"     xsi:schemaLocation="http://www.wfmc.org/2004/XPDL2.0alpha http://www.wfmc.org/standards/docs/TC-1025_bpmnxpdl_24.xsd"     xmlns="http://www.wfmc.org/2004/XPDL2.0alpha"     xmlns:xs="http://www.w3.org/2001/XMLSchema"     xmlns:xpdl="http://www.wfmc.org/2004/XPDL2.0alpha"     xmlns:ix="http://www.igrafx.com/2007/igrafx-document"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:igxpdl="http://www.igrafx.com/2008/igrafx-xpdl2">

XMLドキュメントの本文では、標準XPDL要素のデフォルトの名前空間を使用していますが、ドキュメント・ページの定義にigxpdlという名前空間を使用しています。

<igxpdl:Page Name="Update Spreadsheet" ID="Page1" IgnorePools="true">      <PageLayout xmlns:i="http://www.igrafx.com/2007/igxmldoc" xmlns="http://www.igrafx.com/2007/igrafx-document">        <Page UseDocumentSettings="false" Orientation="Landscape" Width="16837" Height="11905">          <FitTo PagesWide="1" PagesTall="1" />        </Page>      </PageLayout>    </igxpdl:Page>    <igxpdl:Page Name="Submit Instructions" ID="Page2" IgnorePools="true">      <PageLayout xmlns:i="http://www.igrafx.com/2007/igxmldoc" xmlns="http://www.igrafx.com/2007/igrafx-document">        <Page UseDocumentSettings="false" Orientation="Landscape" Width="16837" Height="11905">          <FitTo PagesWide="1" PagesTall="1" />        </Page>      </PageLayout>    </igxpdl:Page>  </igxpdl:Pages>

XPDLインポータは、XPDL名前空間以外の名前空間を認識せず、その名前空間にPages要素が存在することを要求します。この要件に対応するには、独自の名前空間の要素から情報をコピーしてXPDLのPages要素を作成するXSLTテンプレートを作成します。

<xsl:template match="//xpdl21:Package">            <xsl:copy>                <xsl:copy-of select="@*"/>                <xsl:if test="child::igxpdl:Pages">                    <xsl:element name="Pages">                        <xsl:for-each select="//igxpdl:Pages/igxpdl:Page">                            <xsl:element name="Page">                                <xsl:attribute name="Id">                                    <xsl:value-of select="./@ID"/>                                </xsl:attribute>                                <xsl:attribute name="Name">                                    <xsl:value-of select="./@Name"/>                                </xsl:attribute>                            </xsl:element>                        </xsl:for-each>                    </xsl:element>                </xsl:if>                <xsl:apply-templates/>            </xsl:copy>        </xsl:template>

結果として、デフォルトの名前空間に次のような新しいセクションが追加されます。

<Pages>      <Page Id="Page1" Name="Update Spreadsheet" />      <Page Id="Page2" Name="Submit Instructions" /></Pages>

D.2.3.5 複数のXPDLバージョンのサポート

新バージョンのXPDLをサポートするためにアップグレードしたツールを使用している場合、様々なXPDL形式で保存したモデルが混在することがあります。複数のXPDLバージョンに対応したXSLTテンプレートを作成するには、場合によっては名前空間ごとにルールを組み込む必要があります。

たとえば、あるツールでファイルをXPDL 2.1形式で保存した後、XPDL 2.2形式で保存したとします。名前空間には、それぞれxpdl21xpdl22という異なる値が使用されています。XSLTファイルでは、両方の名前空間を定義する必要があります。これらの名前空間は、ツールのXPDLファイルに出現するものと一致していることが必要です。

<xsl:stylesheet version="1.0"                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                xmlns:xpdl21="http://www.wfmc.org/2008/XPDL2.1"                xmlns:xpdl22="http://www.wfmc.org/2009/XPDL2.2">  

その後、名前空間ごとに別々のテンプレートを定義します。次に例を示します。

   <!-- Set extended Attribute for xpdl 2.1 -->     <xsl:template match="xpdl21:Package/xpdl21:ExtendedAttributes">    <xsl:copy>        <xsl:copy-of select="@*"/>                <xpdl21:ExtendedAttribute Name="subProcessChildPositionRelative" Value="true"/>        <xpdl21:ExtendedAttribute Name="activitiesObjectPin" Value="CENTER"/>        <xsl:apply-templates/>                                    </xsl:copy>  </xsl:template>    <!-- Set extended Attribute for xpdl 2.2 -->    <xsl:template match="xpdl22:Package/xpdl22:ExtendedAttributes">    <xsl:copy>        <xsl:copy-of select="@*"/>                <xpdl22:ExtendedAttribute Name="redrawConnections" Value="true"/>        <xpdl22:ExtendedAttribute Name="subProcessChildPositionRelative" Value="true"/>        <xpdl22:ExtendedAttribute Name="activitiesObjectPin" Value="CENTER"/>        <xsl:apply-templates/>                                    </xsl:copy>  </xsl:template>

各XPDL形式のロジックは、要件次第で同じであっても違っていてもかまいません

D.2.3.6 XSLTのテストとデバッグ

XSLTの検証や対話型実行をサポートするOracle JDeveloperなどのプログラミングIDE (Interactive Development Environment)を使用してカスタムXSLTを作成し、テストすることを強くお薦めします。これにより、出力されたXPDLを確認しながら、簡単に問題を解決できます。Oracle JDeveloperでのXSLTの編集およびデバッグ方法を説明したデモを視聴するには、ブラウザで次のリンク先を参照してください。

http://www.oracle.com/technetwork/developer-tools/jdev/xml-viewlet-swf-089240.htmlhttp://www.oracle.com/technetwork/developer-tools/jdev/xml-viewlet-swf-089240.html