PowerAppsモデル駆動型アプリで「非同期データ取得」を活用しよう
目次
概要
本記事では、PowerAppsモデル駆動型アプリにおける非同期データ取得とその利点について解説します。 非同期処理を活用することで、ユーザーがデータ取得中もスムーズに操作を続けられるようになり、アプリの使い勝手が向上します。 この記事では、顧客データの非同期取得を具体例として、処理の流れと実装方法について詳しく説明します。
PowerAppsでの非同期データ取得の重要性
PowerAppsでは、サーバーからデータを取得して表示するシーンが頻繁にあります。 もしデータ取得が同期処理で行われると、取得が完了するまでユーザーの操作が一時的に止まり、快適な操作が妨げられます。 非同期処理を利用することで、データ取得の完了を待たずに他の操作が可能になり、アプリの応答性が向上します。
非同期処理のメリット
- 応答性の向上: データ取得中も操作を続けられるため、ユーザーエクスペリエンスが向上します。
- 効率的なリソース利用: 複数のデータ取得を同時に行うことで、リソースを効率的に使用できます。
- エラーハンドリングが容易: 非同期処理では、エラー時の対応が簡素化され、安定性が向上します。
具体例:顧客データの非同期取得
ここでは、顧客データを非同期で取得し、ユーザーがデータ取得完了を待たずに操作を続けられる実装を紹介します。
データ仕様
- テーブル名:
contact
- 列名とデータ型:
fullname
: テキストemail
: メールアドレスphone
: 電話番号
実装例とコードの比較
非同期処理を使わない場合
function getContactDataSync() {
var contactId = "some-contact-id";
var result = Xrm.WebApi.retrieveRecord("contact", contactId, "?$select=fullname,email,phone");
console.log("顧客名:", result.fullname);
console.log("メールアドレス:", result.email);
console.log("電話番号:", result.phone);
}
問題点: このコードはデータ取得が完了するまで操作が止まってしまいます。同期処理では、ユーザーの待機時間が発生し、使い勝手が悪くなります。
非同期処理(async/await
を使用)を使ったコード
async function getContactDataAsync() {
var contactId = "some-contact-id";
try {
const result = await Xrm.WebApi.retrieveRecord("contact", contactId, "?$select=fullname,email,phone");
console.log("顧客名:", result.fullname);
console.log("メールアドレス:", result.email);
console.log("電話番号:", result.phone);
} catch (error) {
console.error("データ取得エラー:", error.message);
}
}
メリット: 非同期でデータ取得が行われ、操作がスムーズに行えるようになります。await
により、データ取得の完了を待ちながらも、他の操作が可能です。
関連メソッドと構文
非同期処理で利用する主なメソッドと構文について説明します。
メソッド一覧
Xrm.WebApi.retrieveRecord
: 指定したテーブルとIDでデータを取得します。
使用例:Xrm.WebApi.retrieveRecord("contact", contactId, "?$select=fullname,email,phone");
async/await
: 非同期関数と、その完了を待つためのキーワード。
注意点: await
はasync
関数内でのみ使用可能です。
技術的な豆知識と制限事項
豆知識
- async/await: 非同期処理を同期的に見せる記法で、コードが読みやすくなります。
制限事項
- 通信が不安定だとデータ取得が遅延する可能性があります。
コード全体の流れ
この記事で使われているコードは、PowerAppsモデル駆動型アプリで、**「顧客データを非同期で取得して表示する」**という内容です。同期と非同期の2つの方法を使って、データの取得がアプリの動作にどう影響するかを説明しています。では、それぞれのコードの流れを順を追って見ていきましょう。
同期処理の流れ:getContactDataSync()
まず、同期処理を使った例について説明します。この関数は、PowerAppsの「Xrm.WebApi.retrieveRecord」メソッドを使ってデータを取得しますが、処理の仕方に問題があります。
処理の流れ
-
関数が呼び出される
getContactDataSync()
関数は、データ取得が必要になったときに呼ばれます。ここで実行が開始されます。 -
変数
contactId
にデータIDを指定
顧客データを取得するためのID(例:"some-contact-id"
)がcontactId
に代入されます。このIDを使って、特定の顧客データをサーバーから引き出します。 -
Xrm.WebApi.retrieveRecord
メソッドでデータを取得Xrm.WebApi.retrieveRecord("contact", contactId, "?$select=fullname,email,phone");
を使ってサーバーからデータを取得します。ここで、「contact」テーブルから、contactId
で指定した顧客の「名前」「メールアドレス」「電話番号」が取り出されます。- ただし、同期的に動作するため、このデータ取得が完了するまで他の処理ができなくなります。
-
データの表示
データが取得できたら、それぞれのフィールド(「名前」「メールアドレス」「電話番号」)をコンソールに出力します。この処理が終わるまで、他の操作は止まったままです。
データの流れ
- まず
contactId
を通じて特定のデータが指定されます。 - 次に、
Xrm.WebApi.retrieveRecord
メソッドがデータベースからこのデータを取得し、結果がresult
に返されます。 - 最後に、取得したデータがコンソールに出力され、処理が終了します。
非同期処理の流れ:getContactDataAsync()
次に、非同期処理を使った方法を見ていきましょう。非同期処理を使うことで、データの取得が終わる前でも他の操作が可能になります。
処理の流れ
-
関数が呼び出される
getContactDataAsync()
関数が呼ばれると、この非同期処理が開始されます。最初に変数の設定や準備を行います。 -
変数
contactId
にデータIDを指定
同期処理と同じように、取得したいデータのID(例:"some-contact-id"
)を変数contactId
に代入します。 -
await
でデータ取得を待つ
次に、await Xrm.WebApi.retrieveRecord("contact", contactId, "?$select=fullname,email,phone");
と書かれた行に進みます。このawait
は、データの取得が終わるのを待つことを指示しています。await
の処理は、データ取得中も他の操作が可能であることを意味しています。つまり、このデータ取得が終わるまで他の処理を中断する必要がありません。
-
エラー処理
try-catch
ブロックでエラー処理も追加しています。データ取得がうまくいかなかった場合、catch
でエラーメッセージが表示されます。 -
データの表示
データが無事に取得できた場合、各フィールドの内容(「名前」「メールアドレス」「電話番号」)をコンソールに出力します。同期処理と異なり、この間にユーザーが他の操作を行っても問題がありません。
データの流れ
- 同期処理と同じく、
contactId
でデータが指定されます。 Xrm.WebApi.retrieveRecord
メソッドがサーバーにリクエストを送信し、データがresult
に返されます。- 結果のデータがコンソールに出力され、処理が終了します。
同期処理と非同期処理の違い
ここで、同期処理と非同期処理の違いを簡単にまとめます。
項目 | 同期処理 | 非同期処理 |
---|---|---|
処理中の操作 | 他の操作が止まる | 他の操作が可能 |
処理の待機 | 取得が終わるまで待機 | 処理中も他の作業が可能 |
ユーザー体験 | 操作が中断される | 操作がスムーズ |
子どもにもわかる例え話
非同期処理を、図書館で本を借りる例にたとえてみましょう。
- 同期処理の場合:本を借りるために図書館に行き、受付で自分の順番が来るまで待ちます。前の人がたくさんの本を借りていると、自分が本を借りられるまで時間がかかってしまいます。
- 非同期処理の場合:図書館に行って本を借りる手続きを始めますが、受付に「準備ができたら連絡してください」とお願いし、自分はほかのことをして待ちます。そうすれば、手続きが完了するまで、時間を無駄にしません。
コードの解説
最後に、コードの中で使われたメソッドについても詳しく説明します。
-
Xrm.WebApi.retrieveRecord
このメソッドは、特定のIDを持つレコードをデータベースから取得するために使います。取得したいテーブルの名前とID、そして取り出したいフィールド(例:fullname
,email
,phone
)を指定します。- 構文:
Xrm.WebApi.retrieveRecord("テーブル名", レコードID, "取得フィールド");
- 構文:
-
async/await
async
関数内で使えるawait
は、特定の非同期処理が終わるまで待機するよう指示するキーワードです。await
が使えるのは、必ずasync
関数内です。非同期処理が完了したら次の処理に進みます。 -
try-catch
ブロックtry-catch
は、エラー処理を行うための構文です。例えば、データ取得がうまくいかなかったとき、catch
内でエラー内容をログに表示させることができます。これにより、エラーが発生してもアプリ全体が停止するのを防ぎます。
まとめ
非同期処理を使うことで、データ取得中も他の操作が可能となり、アプリがスムーズに動作するようになります。このコードの理解を通して、PowerAppsモデル駆動型アプリの開発がより効果的に進むことでしょう。
実践問題
問題: 以下の条件を満たす関数getAccountData
を作成してください。
- 条件: 顧客データを非同期で取得し、取得したデータをコンソールに表示。
この記事では、PowerAppsモデル駆動型アプリでの非同期データ取得の活用について解説しました。非同期処理を理解して、アプリのパフォーマンスを向上させましょう。