スクリプト機能との連携

<< 目次を表示 >>

ページ位置:  その他の記法のモデリング > SOAとXML > スキーマコンポーザー >

スクリプト機能との連携

スキーマコンポーザーは、そのままでも利用できるように、さまざまな標準仕様に対応しています。さらに、スクリプト機能との連携機能を利用することで、標準では対応していない仕様についてもスキーマコンポーザーの機能を利用できます。スキーマコンポーザー内でスクリプト機能を利用して拡張するための方法は次の3つがあります。

 

 

 

スクリプトによるモデル変換

スキーマコンポーザーでは、対応しているフレームワークについての変換ルールが利用できます。スクリプト機能を利用して、独自のフレームワークのための変換ルールや既定の内容とは異なる結果を生成するルールを追加できます。

 

 

スクリプトで生成を実行

スキーマコンポーザー内で生成対象のメッセージを表示した状態で生成ボタンを押すと、生成する形式を選択するダイアログが表示されます。その選択肢の中に「カスタムスクリプトの実行」という項目が含まれます。

 

 

 

スクリプトでモデル変換を実行

スキーマコンポーザーはいくつかの既定のフレームワークに対応していますが、独自のフレームワークに対応するような変換ルールを追加し、そのルールの詳細をスクリプトで定義できます。

 

 

サンプルスクリプト

次の例は、スキーマコンポーザーで定義された内容を参照する、JScript形式のスクリプトです。最初に、スキーマコンポーザー機能を利用するためのインターフェースを取得し、その後スキーマで定義された内容を取得し、型とプロパティを出力しています。

 

/*

* Script Name: Example Schema Composer Script

* Author:  Sparx Systems

* Purpose: Demonstrate access to Schema Composer using automation and JavaScript

* Language: JavaScript

* Date:  2020

*/

function printType( xmlType, xmlns, uri)

{

var xmlProp as EA.SchemaProperty;

var xmlPropEnum as EA.SchemaPropEnum;

var xmlChoiceEnum1 as EA.SchemaTypeEnum;

var xmlChoiceEnum2 as EA.SchemaTypeEnum;

 

Session.Output("Type: " + xmlType.TypeName + " in namespace: "  + xmlns + ":" + uri);

xmlPropEnum = xmlType.Properties;

if(xmlPropEnum)

{

xmlProp = xmlPropEnum.GetFirst();

while(xmlProp)

{

if(xmlType.IsEnumeration())

{

Session.Output("   " + xmlProp.Name);

}

else

{

var sPropDesc = xmlProp.Name;

sPropDesc += "::"

if(xmlProp.IsPrimitive())

sPropDesc += xmlProp.PrimitiveType;

else

sPropDesc += xmlProp.TypeName;

 

if(xmlProp.IsByReference())

{

sPropDesc += "(by reference)";

}

if(xmlProp.IsInline())

{

sPropDesc += "(inline)";

}

Session.Output("   " + sPropDesc + ", cardinality: " + xmlProp.Cardinality);

 

xmlChoiceEnum1 = xmlProp.Choices;

xmlChoiceEnum2 = xmlProp.SchemaChoices;

var count = xmlChoiceEnum1.GetCount() + xmlChoiceEnum2.GetCount();

if(count>1)

{

Session.Output("   choice of: ");

xmlChoice = xmlChoiceEnum1.GetFirst();

while(xmlChoice)

{

Session.Output("     " + xmlChoice.TypeName);

xmlChoice = xmlChoiceEnum1.GetNext();

}

xmlChoice = xmlChoiceEnum2.GetFirst();

while(xmlChoice)

{

Session.Output("     " + xmlChoice.TypeName);

xmlChoice = xmlChoiceEnum2.GetNext();

}

}

}

xmlProp = xmlPropEnum.GetNext();

}

}

}

 

function main()

{

var schema as EA.SchemaComposer;

var xmlType as EA.SchemaType;

var xmlTypeEnum as EA.SchemaTypeEnum;

var xmlNamespaceEnum as EA.SchemaNamespaceEnum;

var xmlNS as EA.SchemaNamespace;

 

// Get SchemaComposer

schema = Repository.SchemaComposer;

 

// print the namespace references

xmlNamespaceEnum = schema.Namespaces;

if(xmlNamespaceEnum)

{

xmlNS = xmlNamespaceEnum.GetFirst();

while(xmlNS)

{

Session.Output( "xmlns:" + xmlNS.Name + " URI=" + xmlNS.URI);

xmlNS = xmlNamespaceEnum.GetNext();

}

}

// Get Schema Types Enumerator

xmlTypeEnum = schema.SchemaTypes;

xmlType = xmlTypeEnum.GetFirst();

while(xmlType)

{

var xmlns = schema.GetNamespacePrefixForType( xmlType.TypeID );

uri = schema.GetNamespaceForPrefix(xmlns);

printType(xmlType, xmlns, uri);

xmlType = xmlTypeEnum.GetNext();

}

}

 

main();

 

インテリセンス機能の利用

Enterprise Architectのスクリプトエディタでは、インテリセンス機能が利用できます。スキーマコンポーザーに関する内容を作成・編集する場合にも利用できます。

 

 

 

モデル変換におけるステレオタイプの利用

UMLプロファイルの拡張の仕組みを利用し、ある要素にステレオタイプを付加することで、既存の種類を拡張した独自の要素を定義できます。コアフレームワークからビジネスモデルやサブドメインに進むに従って、このステレオタイプを際割り当てする必要がある場合もあります。例えば、CCTSフレームワークを利用している場合に、生成したビジネスコンポーネントは自動的にステレオタイプが付加されます。この付加されるステレオタイプは、CCTSの仕様(例えばACCからABIE)で定義されています。

 

スキーマコンポーザーでモデル変換プロファイルを利用する場合に、このようなステレオタイプの変換をスクリプトで指定できます。スクリプトはプロパティウィンドウで指定できます。

 

 

スクリプトは、Javascript, JScript, VBScriptのいずれかで作成できます。それぞれの場合において、必要なメソッドのみを実装します。

 

function TranslateStereotype( srcStereo )

{

    var destStereo = srcStereo

    if (srcStereo == "BDT")

    {

         destStereo = "My_BDT"

    }

    return destStereo;

}

 

 

参照: