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

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