スクリプト機能との連携

<< 目次を表示 >>

ページ位置:  その他の記法・モデリング > 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;

}

 

 

参照: