要素に独自の区画を表示

<< 目次を表示 >>

ページ位置:  Enterprise Architectの拡張 > 描画スクリプト > 描画スクリプトの作成 >

要素に独自の区画を表示

クラスなど四角形で表示される要素をダイアグラムに配置すると、要素の名前と、元々定義されているいくつかの区画が、設定に応じて表示されます。この区画には、属性や操作・ノートなどがあります。このような区画の形式で、独自の情報を追加して表示できます。例えば、接続されている他の要素の名前やポート・パートなどの子要素の情報を表示できます。こうした独自の区画を定義するためには、描画スクリプトを利用して定義する必要があります。描画スクリプトを適用するには、関係するステレオタイプを定義・適用する必要があります。

 

なお、独自の区画を表示するように定義した場合、その要素とノートリンクで結びつけられているノート要素に、その独自の区画の内容を表示させることもできます。

 

 

利用手順:

リボン

モデル > 要素 > サブウィンドウ > 属性 : ['_image'という名前の属性を作成] > 初期値欄の ボタンを押す

コンテキストメニュー

要素を右クリック | 属性・操作と付属要素 | 属性 : ['_image'という名前の属性を作成] > 初期値欄の ボタンを押す

キーボード

F9 : ['_image'という名前の属性を作成] > 初期値欄の ボタンを押す

その他

プロジェクト > リファレンス情報 > UMLに関連する定義 > ステレオタイプ: (対象のステレオタイプを選択) : 描画スクリプト > 割当

 

 

概要:

以下の内容は、要素に独自の区画を表示する方法の概要と例を紹介しています。

 

項目

説明

スクリプトの作成

描画スクリプトで区画を作成する場合には、子要素に対しての処理のみを行うことができます。

描画スクリプトを作成する場合に、shape main の代わりに shape ChildElement あるいは shape RelatedElement の定義を利用します。

なお、shape mainも定義できます。色などの描画を変更する場合に利用できます。なお、mainではDrawNativeShape()を呼び出し、標準の内容が表示されるようにしてください。このmain内で、他の描画スクリプトのコマンドを呼び出して、独自の描画内容にできません。

ChildElementの定義では、HasPropertyを利用して子要素のプロパティの値を調べ、その内容に応じて描画内容を定義します。

 

それぞれの区画が実際に表示されるかどうかは、ダイアグラムのプロパティの区画の表示設定に依存します。ChildElementの内容は既定値で表示され、利用者が非表示にできます。RelatedElementの内容は既定値では表示されず、利用者が明示的に表示するように指定すると表示されます。

ChildElementの区画の内容は、対象の要素がダイアグラム内に配置されている場合でもそうでない場合でも表示できますが、RelatedElementの区画は、対象の要素が同じダイアグラム内に配置されていない場合のみ表示されます。

区画の内容をノート要素に表示する

要素の区画に表示されている内容を、ノート要素に表示できます。以下の2つの方法があります。

 

  • 方法1 (対象の区画がダイアグラム内の表示されている場合) - 対象の区画内の項目を選択した状態で右クリックし、「選択項目にリンクしたノートを追加」を実行します。対象の区画は自動的に非表示となり、その区画の内容は新しく作成されるノート要素に表示されます。
  • 方法2 (対象の区画が非表示の場合も利用できます。) - 新規にノート要素を作成し、対象の要素とノートリンクで結びます。ノートリンクを右クリックして「ノートに要素のプロパティの内容を表示」を実行します。表示されるダイアログの「プロパティの種類」で、内容を表示したい区画の名前を指定します。

 

いずれの方法でも、区画の内容がノート要素に表示されます。

 

2番目の方法は、区画が非表示の場合も利用できますので、区画が非表示になっている場合にはこの方法が便利です。

区画の内容が変更になると、結びつけてあるノート要素の内容が更新されます。

例 1 - 親要素の調整を行わない場合

//子要素に対する区画の定義

shape ChildElement

{

//子要素がステレオタイプとしてpropertyの値を持つかどうかを調べます。この場合には、区画名をPropertiesとます。

     if(HasProperty("stereotype", "property"))

      {

              SetCompartmentName("Properties");

      }

 

     //子要素の可視性がpublicの場合には、+記号を追記します。

    if(HasProperty("scope", "public"))

     {

              AppendCompartmentText("+");

      }

 

     //子要素の名前を出力します。

    AppendCompartmentText("#NAME#");

}

 

この描画スクリプトの内容は、すべての子要素に対して順次呼ばれます。まず、ステレオタイプpropertyが存在する場合には、SetCompartmentNameでPropertiesという区画を作成するようにします。

その後、可視性がpublicかどうか確認し、+マークを付加します。

最後に、子要素の名前を区画内に出力するように AppendCompartmentTextを呼び出します。

既に指定した名前の区画がSetCompartmentNameで定義されている場合には、同じ区画に指定した文字列が追加されます。

例 2 - 親要素の色を調整し、さらに子要素の区画を表示する場合

//親要素の描画

shape main

{

      //背景色の設定

      setfillcolor(255,0,0);

    //標準の描画内容で描画

      drawnativeshape();

}

 

//子要素についての描画定義

shape ChildElement

{

       if(HasProperty("stereotype", "part"))

       {

              SetCompartmentName("Parts");

        }

       else if(HasProperty("stereotype", "mystereotype"))

       {

             SetCompartmentName("My Stereotype");

        }

 

        AppendCompartmentText("#NAME#");

}

 

この例では、shape mainのセクションで、親要素の描画内容を変更しています。その後、子要素についての区画の定義を行っています。

この例では、複数の区画を定義しています。もし、子要素が2つあり、ステレオタイプがpartおよびmystereotypeの場合には、区画が2つ表示されることになります。

区画を表示するためには、AppendCompartmentTextを呼び出さなければなりません。

SetCompartmentNameおよびAppendCompartmentTextでは改行を出力できません。

例 3 - 現在のダイアグラムに存在しない要素のみ、表示する

shape childElement

{

//子要素がダイアグラムに配置されているかを確認

if(hasproperty("IsVisible", "false"))

{

        //パート要素のための区画を作成

        if(hasproperty("type", "part"))

        {

                SetCompartmentName("Parts");

        }

        //ポート要素のための区画を作成

        else if(hasproperty("type", "port"))

        {

                SetCompartmentName("Ports");

        }

 

        //区画に要素名を追加

        AppendCompartmentText("#NAME#");

}

}

 

このスクリプトは、ポートとパートについて、現在のダイアグラムに存在しない要素のみ、名前を表示します。

IsVisible のプロパティは、現在のダイアグラムに配置されている場合にtrueを返します。falseの場合は、配置されていないことを示します。

このプロパティを利用することで、ダイアグラム内に存在する要素の名前と図形を重複して表示することを防げます。

例 4: 依存の接続で結ばれている要素の情報を表示する

shape RelatedElement

{

//対象の接続の種類が依存可動か確認

if(HasProperty("Connector.Type", "Dependency"))

{

        //対象の要素がターゲット側かどうかを確認

        if(HasProperty("Element.IsTarget"))

        {

                //区画名を設定

                SetCompartmentName("dependsOn");

                if(HasProperty("Element.Stereotype", ""))

                {

                }

                else

                {

                AppendCompartmentText("«#Element.Stereotype#» ");

                }

                AppendCompartmentText("#Element.Name#");

        }

}

}

 

この例では、Class1にステレオタイプ'RelatedElement'が設定されていて、依存関係のソース側がClass1、ターゲット側がClass2の場合にdependsOnという区画にClass2の名前が表示されます。

例 5: 実現しているインターフェースの情報を表示

shape RelatedElement

{

//対象の接続の種類が実現かどうかを確認

if(HasProperty("Connector.Type", "Realization"))

{

        //対象の要素がターゲット側かどうかを確認

        if(HasProperty("Element.IsTarget"))

        {

                //要素の種類がインターフェースであれば区画を追加

                if(HasProperty("Element.Type", "Interface"))

                {

                        SetCompartmentName("realizedInterfaces");

                        AppendCompartmentText("#Element.Name#");

                }

        }

}

}

 

対象のClass 1がインターフェース要素Interface 1との実現の接続を保持している場合に、Interface 1がClass1の区画realizedInterfacesに表示されます。

 

注意:

  • 区画名にカンマを含む場合には、カンマが含まれない形で表示されます。例えば、 Ports, Parts and Properties と指定した場合には、Ports Parts and Properties となります。
  • 追加した個々の区画については、「区画の表示設定」機能から調整できます。
  • 上記の'RelatedElement'の描画スクリプトは、対象の要素が持つ接続の、反対側の要素の情報を取得することができる方法を利用しています。この方法の場合、要素の区画に情報を表示する以外の目的では利用できません。(例えば、実現で結ばれている要素がある場合に、要素の外見を変えるなど、区画への情報追加以外の処理はできません。)

 

 

参照: