<< 目次を表示 >> ページ位置: その他の記法のモデリング > 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;
}
参照: