カテゴリー : Sparx EA

EAアドイン向けコードスニペットとテンプレートのサポートについて

ESECなどのドタバタに巻き込まれて、アナウンスが大変遅れてしまったのですが、私が公開しているEAアドイン向けのコードスニペット及びテンプレートのサポート場所として利用してた「Lingr」がサービスを終了します。(これはずいぶん前に各所のニュースでも取り上げられていたはずなので、ご存じの方も多いはず)

Lingrは、ユーザ登録なしで会話はもとより、過去ログの閲覧などもできるすばらしいサービスだったのですが、この景気悪化によりサービス終了になってしまったようです。
活発な会話が行われてたわけではないのですが、ずいぶん長い間利用させていただき、大変中の方には感謝しております。

さて、肝心の「では今後のサポートはどうなるのか」ですが、当面はこのブログ(該当記事)へのコメントで対応させていただこうと思います。
(これまでのサポート内容から、コメント相当で対応可能と思いますので。)
Privateにいろいろ意見を言いたい、という方(今までいらっしゃったことはないのですが:-))はEAのセミナーに時々参加しておりますので、その際にでもどうぞ。

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分前の私 :-)

アドインの道の第一歩はEA.Collection ?

EAアドインを公開して、スペシャリストパートナーという名前負けしそうな(既にしている…)肩書きを頂いているが、アドイン開発なら n 分で出来るわけでも、一般の方が知らない xxx な機能を使って…という訳ではない。ごく一般の方法で唯々開発している。

久しぶりにアドインの開発をしようと思ったら開発方法をすっかり忘れてしまい(!)、過去のアドインセミナー資料を見ながらコソコソ作ったのが「アドインプロジェクトテンプレート」である。
いつの間にやら、アドイン開発よりもテンプレート開発に目的が移ってしまい、テンプレート完成した今頃我に返って、アドイン作成中…。

ところで、アドインをAPIで開発している方なら、最初に躓くのが EA.Collection インタフェースではないだろうか。
EA.Collectionというは、ElementのAttributesや、 Methodsなど、複数形のプロパティでよく帰ってくるインタフェースである。

このEA.Collectionが辛いのは、何が帰ってくるのかよく分からない事にある。Attributesなら、Attributeインタフェースの集合が帰ってくるのだろうと予想がつくが、予想通りに行かないとキャストに失敗し、Exceptionが発生したりする。
単純な解決策といえば「ヘルプ(SDK)をちゃんと読め」 という素直な答えになるわけだが、EA.Collection毎にヘルプを見て確認…を繰り返すのは少々辛い。

最近、他のスペシャリストパートナーの方が、Frameworkのようなクラスライブラリを提供していたけれど、こういったちょっと使い勝手が…というメソッド類をラップしてくれると非常に助かると思う。(とはいっても、EAのAPI変更に追従するという負荷があって、私はあんまりやりたくない :-p)

話は、EA.Collectionに戻るが、EA.Collectionがちょっと嫌いな理由の一つに「追加」がある。
たとえば、ダイアグラム上にあるAというクラスが持つメソッドをBというクラスにも追加したい、といったケースの場合、EA.CollectionのAddNewメソッドを呼び出し、そのメソッドを変更するという手順で変更しなければならない。
EAのプロジェクトファイルは、DBだという事実を知っている方なら、あのテーブルの要素を増やして object_ID を変えるだけなのに!と思ってしまうんじゃないだろうか。(実際、セミナーに参加すると、メソッド使ってません。SQLでやってます。という人によく会う)

最近(とはいっても、ずいぶん前?)、RepositoryインタフェースにExecuteメソッドが追加されて、公式に上記のような離れ業を公式にサポートしてしまった。
サポート対象外なメソッドだけれど、この手のAPIを提供しちゃうあたりが本当の「EnterpriseArchitect」のすごさ、だと思うのだがあんまり評価されていない風ですよねぇ。

さて、引き続きアドイン作成しようっと。

EnterpriseArchitectアドイン向けプロジェクトテンプレートを公開しました。

 

EnterpriseArchitectアドイン作成向けのC#プロジェクトテンプレートを本日公開しました。

今回作成したテンプレートをご使用いただくと以下のような作業を自動的にテンプレートが設定・生成します。

  • EA_Connect, EA_Disconnectやメニュー項目の自動生成
  • COMの登録設定やデバッグ設定(外部プログラムの設定)
  • アドイン登録用のレジストリファイルの生成

これにより、アドインがよりスムーズに開発することができます。

続きを読む

正規表現が使える検索(アドイン検索)を作ってみた

昨日(時間帯では既に一昨日)、スパークスシステムズジャパンさん主催の「アドイン応用セミナー」に参加してきました。

セミナーで語られた濃いー話は語れませんが、「アドイン検索」というものを知りました。(これはヘルプに記載があるので喋ってOKなはず…)要するに検索をアドインを使ってカスタマイズできるという代物です。
EAの場合、ある程度はSQLカスタム検索で何でもやれてしまうのですが、正規表現の検索の場合はJETが未対応な為か標準では提供されていません。(一部のDBではSQLで記述可能な模様…MySQLとか)

そこで、アドイン検索を作ってみました。
一応、証拠として実際に動作させた画面を晒してみます。(EASample.eap で、最後に「書」がつく要素を検索したところ)

SimpleRegex.gif

しかし、SQLを使わずに全ての要素を検索することになるので遅い…。(中-大規模なプロジェクトにはおそらく適用不可。今回は、Repository.Modelsを回して作ったので、SQLQueryを発行してXML変換したほうが早いかもしれませんが、そんな余裕もなく…。)

開発の過程で、Elementを追加してToXMLTextメソッドを呼ぶとXMLフォーマットの文字列を返してくれる EASearchResult クラスという便利(そうな)クラスを作ってみたのですが、誰かに使っていただくにはもう少しメンテナンスが必要そう。

というわけで、もう少し仕事が落ち着いたら(試しなし)詳細を書こうと思いますので、もうしばらくお待ちを。

再見!(制作時間:調査込みで 2 – 3時間ぐらい)

スパークスシステムズジャパンさんが会社移転だそうで…

最近、忙しさが増してまして…たぶん一時のピンク・レディーほどではありませんが、上がり調子の芸人ぐらいの多忙度でございます。(なんか年齢詐称っぽくてごめんなさい)

久しぶりにこうのさんのブログを拝見したら、なんとこの度会社移転とのこと。おめでとうございます!(?)
移転場所は中川…ん?中野ではなくて??
ということで、GoogleMapで検索してみました。

これまでセミナーというと川崎で実施されていたのですが、小さなセミナールームもあるとの事。
でも、個人的にはちょっと遠いなぁ…。(残念)

 
大きな地図で見る

Sparx EAのピザパーティ(懇親会)に行ってきました。

仕事の関係でちょっと送れての参加となりましたが、十分楽しめました。
スパークスシステムズジャパンさんをはじめ参加者の皆さん、お疲れ様でした!

というわけで、簡単にご報告を。

続きを読む

アドイン用コードスニペット VisualStudio 2008対応

MicrosoftからVisualStudio2008の提供が開始から暫く立ちましたが、ようやく私の方でもインストールを行いましたので、「EnterpriseArchitect アドイン用コードスニペット」の動作確認を行いました。

結論から言いますと、「問題なく使えます」。
といいますか、コードスニペットとしては、VisualStudio 2005以降、バージョンアップしていないのです..。

VisualStudio 2008 Express Edition もMicrosoftからダウンロード可能ですので、是非お試しください。
コードスニペットのダウンロードは以下からどうぞ。

http://www.azukipochette.com/