Power Apps「ネットワークからデータを取得中にエラーが発生しました」対処法|DataverseリレーションとShowColumns関数

Power Appsでキャンバスアプリを作っていると、突然画面上部に現れる赤帯メッセージ「ネットワークからデータを取得中にエラーが発生しました」。

今回は、With関数やLookUpを使って、リレーションの「親の親(3階層目)」のデータを参照しようとした時にこのエラーが発生。

実はこれ、単なる通信エラーじゃなくて、内部的には「Could not find a property named…」という「プロパティが見つからない」エラーが発生していた。

この記事では、この厄介なエラーの発生条件と、ShowColumns関数を使って明示的に列を指定して解決するテクニックを解説。

この記事はこんな人向け

  • With関数内でLookUpを使用したら「ネットワークからデータを取得中にエラーが発生しました」と出た
  • モニター(エラーログ)を見たら Could not find a property named という英語のエラーが出ている
  • Dataverseで「孫 → 子 → 親」のような多階層のリレーションを辿りたい
スポンサーリンク

【現象】Dataverse参照時に「ネットワークからデータを取得中にエラーが発生しました」が発生

キャンバスアプリでDataverseのリレーションを扱っているとたびたびこのエラーが出る。

このエラーは「データ取得中に何かしらのエラーが発生した」というざっくりとしたエラーメッセージなので、原因はさまざま。

今回は確実にエラーが発生する1例があったので、その対処方法をメモ。

【シナリオ】With関数とLookUpで多階層リレーション(親の親)を取得する

こんな感じのテーブルとリレーションがDataverse上にあったとき、
「食事履歴」を画面上で選択したら、その「キャットフード」の「企業名(3階層親)」を画面に表示する、ということをやってみる。
ざっくり画面を作るとこんな感じ。

エラーが再現するPower Fx式(コード例)

順次レコードを取得するため、こんな感じで単純にWith関数で順次レコードを取得しようとすると、表題のエラーが発生する。

【解決策】ShowColumns関数で取得する列(論理名)を明示的に指定する

先に対処方法を書くと、こんな感じでShowColumns関数を使用して式内で使用する列を明示的に指定してあげること。

以下対処方法発見までの試行錯誤なので、興味のある方だけ。

真の原因は内部エラー「Could not find a property named…」

まず試したのは中間(テーブル「ブランド」)をすっ飛ばしたのがよくないのかな。。と思って、「ブランド」も取得してみたけど同じエラーが発生。
きちんと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.~」以外のエラーメッセージを見たことが何度かあって、今回のエラー以外のときはこの対処でいけるか微妙なので、また再現したときに対処を探ろうかと。。

【別解】SetやUpdateContext変数を使用すれば回避可能

今回みたいにWith関数とかで直接企業名を表示せず、一度変数に入れてしまえばエラーは発生しない。

ギャラリー選択とかボタンクリックとかのイベントがきちんとある場合は、上記の変数に入れる方法でも対処可能。

関連記事

コメント

タイトルとURLをコピーしました