見出し画像

10. Twin Graph の更新 ~ Relationship のリンク・アンリンク

前回の記事                        次回の記事

はじめに

今回の記事では、Twin Graph の Relationship のリンク作成・削除、リンクを辿った Twin のクエリを試してみます。

テスト環境用アプリの GUI 見直し

さてと…、Relationship のリンク・アンリンクのシナリオを改めて脳内シミュレーションすると、前回まで紹介していた GUI では無理じゃね?ってことに気付き、

Relationship お試し用の改良

の様に変更することにしました。リストボックスが超増えたので、名前も付けてみました。以降の解説でリストボックスを指すときにこの名前を使うので、誤解のなきよう。

前回までに作りこんだ実装に今回のお試し用のロジックを追加していきます。

Relationship のリスト表示

前回まででは、リストボックス2 で Twin を選択した時に、リストボックス3に編集用の Property を表示するだけでしたが、Twin 選択時に、選択した Twin の Twin Model で定義されている Relationship のリストを表示する機能を追加します。これは簡単で、Twin のリストを表示する際に選択した Twin Model の DTInterfaceInfo は、selectedInterfaceInfo という member 変数に保持しているので、その Contents から、DTEntityKind.Relationship  の EntityKind を持つコンテント(DTRelationshipInfo 型)を探して、その Id の AbsolutePath を使ってリストボックス2の ItemsSource にバインドされた、ObservableCollection<string> 型の relationshipsForSelectedInterface のリスト変数に値を追加すれば リストボックス4に表示されます。
リストボックス4で Relationship が選択されたら、選択した Id に該当する Relationship の定義の Target property に Relationship の反対側の Twin Model のモデル Id が入っているので、それの値を使って、前回の記事で解説した、モデル Id を使った Twin の取り出しのクエリロジックを使って取り出して、リストボックス6の ItemsSource にバインドされた candidateTwinsForRelationship リスト変数に追加してやれば、リスト6の表示が変わります。

Model Parser のバグだよね…やはり

この修正作業と確認過程でも、何故か Model Id や Relationship Id の先頭の 'dtmi:'が抜け落ちているんですよね。これ、明らかに ModelParser のバグじゃないんですかね。後ほど、Issue 登録しておこうと思います。直った時に実装を変更しなくて良いように、Azure Digital Twins にクエリかける時に指定する Id 系の変数で、頭に ’dtmi:’ がついていない時には追加するというようなコードにしています。

ここから先は

20,226字 / 17画像

2022年3月にマイクロソフトの中の人から外の人になった Embedded D. George が、現時点で持っている知識に加えて、頻繁に…

この記事が気に入ったらサポートをしてみませんか?