カテゴリー : C#

EAアドインでブックマークを使用する方法

EnterpriseArchitectには「ブックマーク」という機能があるのをご存じだろうか。
ブックマークは、「Shiftキー+スペースキー」 で設定することが出来る。(メニューからはElementを選択状態でメニューバーの「編集」から選択)
私はこれを知らずに一年ほど使っていて、展示会で(ちょうど二年前ぐらい)中の人に教えて貰った。

BookmarkedClassImage

ブックマークは検索時の条件にも使用できる為、 アドインとの相性が非常に良いと個人的には思う。
たとえば、社内ルールに違反しているクラスに対してブックマークを設定しておき、検索を使用してその中から条件でふるいにかける という事にも利用可能だ。
(正直、ブックマークが一種類(赤)しか無い為、複数欲しいとは思う。せめて黄色があれば、WarningとErrorを表現できるのに!)

さて、そんなブックマーク機能だが残念ながらAPIが提供されていない。
これはとってももったいない話なので、C#3.0の拡張メソッドを使用して Repositoryインタフェースを拡張してみた。 (なぜ Elementインタフェースじゃないのかは後述)

public static class RepositoryExtension
{
    public static void SetBookmark(this EA.Repository repository, EA.Element element)
    {
        Bookmarked(repository, element, 1);
    }

    public static void ClearBookmark(this EA.Repository repository, EA.Element element)
    {
        Bookmarked(repository, element, 0);
    }

    private static void Bookmarked(EA.Repository repository, EA.Element element, int tagged)
    {
        string query = String.Format(@"update t_object set Tagged = {0} where ea_guid = ""{1}""",
                                     tagged, element.ElementGUID);
        repository.Execute(query);
    }
}

このコードを利用すると、次のようにしてElementに対してブックマークを設定/解除することが出来る。

repository.SetBookmark(element);    // ブックマークを設定する
repository.ClearBookmark(element);  // ブックマークを解除する

なんでElementインタフェースじゃないの?と思う人もいるかと思うが、コードをみてお分かりの通り、実際の設定/解除処理はRepository.Executeを使用している為、Repositorのインスタンスを渡さなければならない。
Elementインタフェースにぶら下げてRepoisitoryインタフェースを渡すよりは「個人的に」気持ち悪くなかった、という理由だけである。お好みに応じて変更頂きたい。

なお、このコードは未サポートのメソッドを使用している為、この拡張メソッドを利用して発生した問題については全くサポートされないと思って良い。
アドインを利用している以上、ある程度は自己責任だというのはご承知だとは思うが、 一応念のため。

あ、そうそう。呼び出したのに反映されないぞ、と思ったアナタ。 Repository.ReloadDiagram の呼び出しをお忘れ無く。(10分前の私 :-)