掲示板一覧   -   トピック一覧
   EA API
     接続の追加・削除が反映されない


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2007-5-31 15:46

接続の追加・削除が反映されない

接続線を追加や削除した場合、Diagram.DiagramLinksにこの
変更が直ぐに反映される場合と、されない場合があるようです。
これは正しい動作なのでしょうか?

現状、調べた結果は以下の通りです。

変更が反映される
- 変更後、ファイルを保存
- 接続線を選択後、Deleteボタンを押して削除オプション画面
を表示し削除

変更が反映されない
- 接続線を追加し、未保存
- コンテキストメニューから接続を削除後、未保存
sugimoto
投稿日時: 2007-5-31 16:55
EA Administrator
投稿: 1895

Re: 接続の追加・削除が反映されない

ご指摘いただきましてありがとうございます。

現在の最新版EA6.5ビルド805で確認したところ、
ご指摘の通りの動作になっていました。

接続の削除に関しましては、現状、操作方法によって、
Diagram.DiagramLinksに反映される場合とされない場合が
ありますが、こちらは次バージョンEA7.0で修正され、
操作によらず「反映される」ようになります。

なお、接続の追加に関しましては、現状と同様に
保存まで反映されません。


EAではモデル記述時に処理が重くなることを防ぐために、
基本的には変更のたびにデータベースを更新することは
行っておりません。
そのため、現在の最新の情報をAPIで取得する場合は、
該当するダイアグラムの保存など対応が必要になります。

ご確認のほど、よろしくお願いいたします。

未登録ゲスト
投稿日時: 2007-5-31 17:07

Re: 接続の追加・削除が反映されない

引用:

基本的には変更のたびにデータベースを更新することは
行っておりません。

とありますが、データベースとは何を指すのでしょうか?
プロジェクトファイルの事でしょうか?
APIで取得する情報はメモリ上の情報だと思っていたのですが、
どうやら違うみたいですね。

削除では反映されるけど、追加では反映されないという仕様には
違和感があるように思います。
どちらかに統一した方が良いのではないでしょうか?
sugimoto
投稿日時: 2007-5-31 17:54
EA Administrator
投稿: 1895

Re: 接続の追加・削除が反映されない

引用:

とありますが、データベースとは何を指すのでしょうか?
プロジェクトファイルの事でしょうか?
APIで取得する情報はメモリ上の情報だと思っていたのですが、
どうやら違うみたいですね。


説明が不足しており、申し訳ございません。

ご認識の通り、データベースとはモデルを格納するデータベースを
指しておりましたので、プロジェクトファイルのことになります。
また、APIで取得する情報に関しましても、ご認識の通り、メモリ上
ではなく、保存されたデータベース上の情報を返却しています。


引用:

削除では反映されるけど、追加では反映されないという仕様には
違和感があるように思います。
どちらかに統一した方が良いのではないでしょうか?


DiagramLinkに関する説明が不足しており、申し訳ございません。

ダイアグラムへ「要素」を描画する場合は、DiagramObjectが存在
しなければならないのに対し、DiagramLinkはその情報がなくても
関係する2つのDiagramObjectの情報があれば描画可能です。
そのため、DiagramLinkは常に存在することは保証されません。
これは操作の高速化を図るための一環となっております。
(そのため、DiagramLinkが存在することを前提にする実装は
お勧めできません。)

こういった状況ですので、接続を削除した場合はそのタイミングで
現在のDiagramLinkの情報を更新しておかないと、後々、メモリ上の
情報とデータベース上の情報に不一致が発生する可能性があるため、
削除の場合は、そのタイミングで情報を更新しています。


EAではUndoが効く操作については、基本的にその場でデータベースに
保存をせず、メモリ上に情報を格納しますが、DiagramLinkなど一部
情報は上記理由から例外的にその場で保存するようになっています。

ご理解いただけますと助かります。
未登録ゲスト
投稿日時: 2007-5-31 18:34

Re: 接続の追加・削除が反映されない

詳細な回答ありがとうございました。

何となく、内部の実装上の問題なんだろうとは思っていましたが
その理由を教えていただけたので、良かったです。

引用:

DiagramLinkが存在することを前提にする実装は
お勧めできません

とありますが、他にダイアグラム内の接続情報を取得する
方法はあるのでしょうか?
sugimoto
投稿日時: 2007-6-1 10:34
EA Administrator
投稿: 1895

Re: 接続の追加・削除が反映されない

引用:

他にダイアグラム内の接続情報を取得する
方法はあるのでしょうか?


現状、確実にダイアグラム内の接続情報を取得するためには、
DiagramからDiagramObjectを取得し、取得したDiagramObjectの
ElementIDから得たElementのConnecorsにて、各要素の接続の
情報を取得します。Connectorの相手の要素がダイアグラム上に
存在する場合は、その接続情報はダイアグラムにあるものと判断
することが確実な方法です。

但し、この方法は手間が掛かります。

以前はDiagramLinkにて、ダイアグラム内の接続情報をすべて取得
できたのですが、操作の高速化に重きを置いたため、現在はすべて
の情報が取得できなくなっております。

しかし、この状況ですと実質DiagramLinkは使用する場面がなくなって
しまいますので、以下のいずれかで対応できるようAPIの改善を検討します。

1) DiagramLinkとConnectorの情報が一致していない場合は、DiagramLink
 が呼ばれたタイミングでAPI内で情報(データベース)を書き換え、
 ダイアグラム内の接続情報を必ず返すようにする。

2) 確実にダイアグラム内の接続情報をすべて取得できるAPIを追加する
 (例えば、Diagram.ConnectorsのようなAPI)
未登録ゲスト
投稿日時: 2007-6-1 10:55

Re: 接続の追加・削除が反映されない

改善の検討をしていただけるとの事、非常にうれしく思います。

こちらでは、当面は"アドイン実行前は必ず保存する"という
ことで対応したいと思います。

ありがとうございました。
sugimoto
投稿日時: 2007-6-1 11:35
EA Administrator
投稿: 1895

Re: 接続の追加・削除が反映されない

補足になりますが、
現在ダイアグラムで編集中の接続につきましては、ダイアグラムを
保存したタイミングで、情報がDiagramLinkに保存されますが、
例えば、クラスを複数のダイアグラムで使用している場合に、
ある1つのダイアグラムでクラス間へ接続を追加しますと、
そのダイアグラムのDiagramLinkは存在しますが、別のダイアグラム
の同クラス間のDiagramLinkは存在しないという状況になります。

アドインの内容にもよりますが、この点に御注意下さい。


なお、弊社ではAPIを利用してアドインなどを作成されている方向けの
サービスを行っております。

「Enterprise Architect関連開発サポートサービス」
https://www.sparxsystems.jp/advanced.htm#addin

よろしければ、本サービスのご利用をご検討下さい。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ