キャンバスアプリでDataverseのリレーションを扱っているとたびたび「ネットワークからデータを取得中にエラーが発生しました」が発生するので、その対処方法をメモ。
ネットワークからデータを取得中にエラーが発生しました
キャンバスアプリでDataverseのリレーションを扱っているとたびたびこのエラーが出る。
このエラーは「データ取得中に何かしらエラーがあったよ」というざっくりとしたエラーメッセージなので、原因はさまざま。
今回は確実にエラーが発生する1例があったので、その対処方法をメモ。
やろうとしたこと
こんな感じのテーブルとリレーションがDataverse上にあったとき、
「食事履歴」を画面上で選択したら、その「キャットフード」の「企業名(3階層親)」を画面に表示する、ということをやってみる。
ざっくり画面を作るとこんな感じ。
「食事履歴」から「企業」まで一気にアクセスしようとすると、「多対一リレーションの未サポート」エラーが発生するので、LookUpでレコードを順次取得していく。
Power Apps 「多対一のリレーションシップの複数レベルの展開はサポートされていません」対処|Dataverse
キャンバスアプリで「多対一のリレーションシップの複数レベルの展開はサポートされていません」というメッセージが出たので、その原因と対処方法をメモ。親レコードへのアクセスキャンバスアプリでDataverseを扱うとき、「.(ドット)」でつなぐこ...
エラーが発生する式
順次レコードを取得するため、こんな感じで単純にWith関数で順次レコードを取得しようとすると、表題のエラーが発生する。
対処方法
先に対処方法を書くと、こんな感じでShowColumns関数を使用して式内で使用する列を明示的に指定してあげること。
以下対処方法発見までの試行錯誤なので、興味のある方だけ。
試行錯誤
まず試したのは中間(テーブル「ブランド」)をすっ飛ばしたのがよくないのかな。。と思って、「ブランド」も取得してみたけど同じエラーが発生。
きちんとAsで指定してあげればいけるかなと思ったけど、それでもだめ。
ここで初めてエラーログを確認したところ、「Could not find a property named ‘cr861_brand’ on type ‘Microsoft.Dynamics.CRM.cr861_brand」というプロパティが見つかりませんエラーが発生している。
テーブル「ブランド」内に論理名「cr861_brand」の列は確かに存在しないので(指定したい列は「cr861_brandid」)、
式の書き方が悪いのかと思い全て論理名で指定したけど、それでもダメ。。
ということで対処方法にもある「ShowColumnsで明示的に列を指定する」方法に行き着く。
「Could not find a property named ~ on type ‘Microsoft.Dynamics.CRM.~」以外のエラーメッセージを見たことが何度かあって、今回のエラー以外のときはこの対処でいけるか微妙なので、また再現したときに対処を探ろうかと。。
おまけ:一度変数に入れればエラーは発生しない
今回みたいにWith関数とかで直接企業名を表示せず、一度変数に入れてしまえばエラーは発生しない。
ギャラリー選択とかボタンクリックとかのイベントがきちんとある場合は、上記の変数に入れる方法でも対処可能。
コメント