次の方法で共有


複雑なビジネス ロジックを必要とするキャンバス アプリのパフォーマンスを最適化する

組織が Power Platform に依存してスケーラブルなデータドリブン アプリケーションを構築するようになったため、ビジネス ロジックを実装するための適切なアプローチを選択することが重要になります。 この参照アーキテクチャでは、Power Fx 関数と Dataverse カスタム API という 2 つのオプションを使用して、Power Apps キャンバス アプリケーションのパフォーマンスと保守性を最適化します。

Scenario

既定では、アプリケーションがデータを照会したり、複数の変更を実行したりすると、個々の HTTP ネットワーク要求が Dataverse に送信されます。 Dataverse はアプリケーションにデータを返し、アプリケーション ロジックによって処理されます。

この実装パターンにより、待機時間が発生します。特に、 ForAll 関数など、アプリが複数の要求を送信する場合です。 待機時間は、パフォーマンスとユーザー エクスペリエンスに悪影響を与えます。 たとえば、ForAll ループでアプリがデータを複数回取得して変換すると、全体的な待機時間が長くなり、ユーザー エクスペリエンスが遅くなり、非効率的になる可能性があります。

データの対話を最適化するには、Dataverse カスタム API または Power Fx 関数を使用して、ロジックとデータ取得操作をキャンバス アプリから Dataverse に移行します。 データ変更操作はトランザクション内で完了し、エラーが発生した場合のデータの一貫性を確保します。

ヒント

この記事では、Dataverse を使用するキャンバス アプリが複雑なビジネス ロジックを Dataverse カスタム API と Power Fx 関数に移行してパフォーマンスを向上させる方法を示す、シナリオの例と一般化されたアーキテクチャの例を示します。 アーキテクチャの例は、さまざまなシナリオや業界で変更できます。

アーキテクチャの図

この図では、Power Fx 関数を使用して、複雑なビジネス ロジックをキャンバス アプリから Dataverse に移行します。 Dataverse カスタム API を使用して、同じ結果を得ることもできます。 使用するオプションを決定するには 、「推奨事項」 を参照してください。

データ操作にキャンバス アプリの組み込み機能を使用することと Power Fx 関数を使用する場合の違いを示すアーキテクチャ図。

Workflow

  1. Power Apps キャンバス アプリケーションでは、Dataverse を使用してリソースの割り当てを管理します。 このアプリでは、組み込みのアクセス機能を直接使用するのではなく、大量のデータ操作に Power Fx 関数 (Dataverse カスタム API が同じ目的を果たします) を使用します。 このアプリでは、トランザクションのサポートを必要としない、少量のデータ操作とタスクに対して組み込みの Dataverse 機能が引き続き使用されます。

  2. Power Fx 関数 (Dataverse カスタム API を使用) は、呼び出し元アプリから入力パラメーターを渡し、定義された出力パラメーターを介して関数 (または API) から結果 (応答パラメーター) を受け取るために構成されます。 対象:

    • Power Fx 関数 (プレビュー): Power Apps Studio でロジックを実装します。 Power Fx 関数を使用することで、作成者はコーディングの専門知識がほとんどまたはまったくない複雑なロジックを構築できます。 詳細については、 Power Fx 関数を参照してください。

    • Dataverse カスタム API: Dataverse .NET プラグインを作成してロジックを実装します。 カスタム .NET プラグインでは、より多くのコーディング知識が必要ですが、制御と拡張性が向上します。 詳細については、 Dataverse カスタム API を参照してください

ケースの詳細を使用する

Power Apps を使用すると、組織はカスタム ユーザー エクスペリエンスを作成し、ビジネス ロジックを一元化できます。 Power Apps を使用すると、より効率的なデータ アーキテクチャを実現し、クライアント側のワークロードを削減できます。

次の例では、Power Apps キャンバス アプリケーションは、作成者がチームとタスクにリソースを効率的に割り当てるのに役立ちます。 このアーキテクチャ パターンは、キャンバス アプリケーションにデータ操作が含まれており、次のものが必要な同様のシナリオに適用できます。

  • キャンバス アプリ内の複数のループ。 同時実行関数 機能を使用して実現することはできません。
  • 複数のデータ変換に対する集中的な計算。
  • ループ内の項目数やユーザーのインターネット接続に関係なく、一貫した実行時間。
  • 複数のデータ変更操作間のデータ整合性。

リソースを割り当てるには、作成者は、場所、タスク、サブタスク、およびその他の関連する割り当てのメタデータを指定する必要があります。 キャンバス アプリの [リソースの概要] 画面には、次のような複数のレベルの相関データが表示されます。

  • リソース
    • 場所
      • タスク
        • サブタスク
          • Approval

この目標を達成するには、次のように Power Fx を使用してアプリケーション ロジックを実装できます。

ForAll(Resources,
    //Transformations
    ForAll(Location,
        //Transformations...
        ForAll(Tasks,
            //Transformations ...
        )
    )
)

このロジックでは、アプリケーションの実行時に Dataverse への複数の HTTP 呼び出しが生成されます。 ベスト プラクティスは、データを Dataverse ビューに統合するか、同時実行関数やその他の Power Fx 手法を使用することですが、このアプローチは常に可能であるとは限りません。また、パフォーマンス目標を満たすことはできません。

この問題に対処するには、データ変換 (データの処理と必要な結果) を 1 つの応答にシフトすることで、キャンバス アプリからの複数の HTTP 呼び出しを排除します。 この方法により、データ取得の待機時間が短縮され、キャンバス アプリの全体的なパフォーマンスが向上し、スムーズで応答性の高いユーザー エクスペリエンスが提供されます。 データ変換ロジックを一元化することで、サーバー側で一貫性のある効率的な処理を実現し、大量のデータや複雑な変換に対してソリューションをスケーラブルにします。

オプション

Dataverse カスタム API と Power Fx 関数の両方が、Dataverse のビジネス ロジックを拡張します。

Power Fx 関数

Power Fx 関数は、ロジックに Power Fx を使用できる Dataverse カスタム API 機能の抽象化を作成します。

Power Fx 関数は Dataverse のビジネス ロジックを拡張し、Power Apps キャンバス アプリ、Power Automate フローなどの Power Platform コンポーネント、および Microsoft Copilot Studio で作成されたカスタム エージェントからオンデマンドで呼び出すことができます。 この機能は、Dataverse の完全なカスタム API 機能を使用する必要があるほど複雑ではない、より基本的なロジックの実装をサポートします。

Dataverse カスタム API

Dataverse プラグインは、特定のイベントに応答して実行されるカスタム イベント ハンドラーです。 Dataverse カスタム API の場合、API を定義すると、アプリケーションが API を使用するときに発生するカスタム イベントが作成されます。 これらのプラグインは、.NET Framework アセンブリにコンパイルされたカスタム クラスとして実装し、Dataverse 内でアップロードして登録します。

プラグインは、レコードの作成、更新、削除、カスタム API を使用した直接呼び出しなど、特定のイベントが発生したときに実行するカスタム コードを開発者が記述できるようにすることで、Dataverse のビジネス ロジックを拡張します。 この機能では、Power Platform 内でのより複雑で調整されたビジネス プロセスの実装がサポートされ、キャンバス アプリや Power Automate との完全な統合が容易になります。

Power Fx 関数と Dataverse カスタム API の両方を使用することで、作成者は数式内で関数アクションを直接呼び出し、バインドされたアクションとバインドされていないアクションの両方をサポートできます。 また、Power Fx 環境言語オブジェクトをアプリに追加して、関数へのアクセスを有効にすることもできます。 Dataverse カスタム API を使用することで、作成者は入力と出力の両方の型指定されていないオブジェクト フィールドを処理できます。

推奨事項

Power Fx 関数と Dataverse カスタム API の両方が、トランザクションでデータ変更操作を完了します。

ユース ケースが次の条件を満たしている場合は、 Power Fx 関数 を選択します。

  • ロジック は過度に複雑ではなく 、Power Fx を使用して表現できます。
  • 作成者 (開発者以外) がロジックを構築して維持できるようにする必要があります。
  • Power Apps ポータルとシームレスに統合する ローコードアプローチ をお好みです。
  • トランザクション整合性は必要ですが、高度な .NET 機能は必要ありません。
  • .NET 開発者が関与することなく、アプリやフロー間で再利用するための ロジックを一元化 する必要があります。

詳細については、 Microsoft Dataverse の Functions (プレビュー) を参照してください。

ユース ケースで必要 な場合は、Dataverse カスタム API を 選択します。

  • Power Fx では表現できない複雑なビジネス ロジック
  • カスタム エラー処理、テレメトリ、外部システムとの統合などの高度な機能
  • .NET 開発の専門知識 は、ワークフローで利用でき、受け入れ可能です。
  • プラグインの登録や監視など、実行パイプラインを完全に制御できます。
  • テレメトリと診断、たとえば正常性追跡のためのApplication Insights

詳細については、 カスタム API の作成と使用に関するページを参照してください

ソリューションをメーカーがアクセス可能で保守可能な状態に保ちながら、キャンバス アプリのパフォーマンスを合理化することが目的の場合は、Power Fx 関数が適しています。 ミッション クリティカルで高度にカスタマイズされたバックエンドを構築する場合は、Dataverse カスタム API を検討してください。

Alternatives

このパターンのもう 1 つの方法は、データ操作とロジックを REST API に移行し、Power Apps から操作を使用できるようにカスタム コネクタを実装することです。 このアプローチとの違いは、ロジックとデータ操作が実行される場所にあります。 この場合、Azure 関数などの REST API を実装するコンピューティング リソースで実行されます。

これらは Dataverse ランタイム サンドボックス内で実行されないため、データ操作はクライアントの操作よりも高速ですが、Dataverse 内で実行される操作よりも遅くなります。 同様に、ロジックは Dataverse トランザクションのコンテキスト内では実行されません。 特別な手順を実行しない限り、各データ操作は独立しており、トランザクション単位として完了しません。

詳細については、「 REST API を使用してキャンバス アプリの機能を拡張する」を参照してください。

考慮事項

これらの考慮事項は、ワークロードの品質を向上させる一連の基本原則である Power Platform Well-Architected の柱を実行します。 詳細については、Microsoft Power Platform Well-Architected を参照してください。

Reliability

不要な複雑さを避けるためにワークロードを設計する: キャンバス アプリからデータ操作とロジックを移行すると、アプリの不要な複雑さが回避されます。 この方法では、組織内の他のアプリケーションで使用できるように、ロジックも一元化されます。 さらに、Power Apps の作成者は、アプリに複雑さを加えることなく、パフォーマンスの向上の恩恵を受けることができます。

回復性と可用性のテスト: キャンバス アプリから Dataverse カスタム API または Power Fx 関数にロジックを移動すると、アプリとは別に API または関数をテストできます。

正常性インジケーターの測定と発行 (Dataverse カスタム API):Dataverse カスタム API は、.NET プラグインを介して高度な監視とテレメトリを提供します。 適切な追跡を確保するには、 Application Insights ログの使用を 検討してください。

オペレーショナル エクセレンス

安全なデプロイ プラクティスを採用する: パイプラインなどの自動化されたデプロイ プロセスを使用して、Power Apps アプリケーションへの変更のデプロイを標準化します。 変更をテストした後にのみ、アプリケーションを本番環境に昇格させてください。 ソリューション コンポーネントとして、Dataverse カスタム API と Power Fx 関数は、同じ Dataverse ソリューション内にある場合にアプリと共にデプロイされます。 この方法により、環境での同期外コンポーネントのリスクが最小限に抑えられます。

デプロイエラー軽減戦略を実装する: アプリと Dataverse カスタム API または Power Fx 関数を一緒にデプロイすると、アプリと同じロールバックまたは修正戦略に従うため、軽減戦略が簡略化されます。

パフォーマンス効率

パフォーマンス要件を満たす設計: ソリューションのパフォーマンスとデータ ボリュームの要件を評価します。 アプリがデータにアクセスする方法と、各データ ストアに送信される個々の要求の待機時間が原因で、異なるデータ ソースを使用する Power Apps のパフォーマンスが低下するかどうかを確認します。 たとえば、データ ソース内の多数の行でアプリのロジックが機能する場合、すべてのネットワーク トラフィックをカスタム API または関数にシフトできます。 カスタム API または関数との対話を 1 回に減らすと、Dataverse との通信が処理され、操作がより効率的になります。

ロジックの最適化 (Dataverse カスタム API): キャンバス アプリでロジックが複雑になるにつれて、Dataverse カスタム API を使用すると、そのロジックを一元化された再利用可能なサービスにオフロードできます。

テスト パフォーマンス: 機能と障害のテストと共に、パフォーマンスのベースラインをテストおよび開発します。 Dataverse カスタム API または Power Fx 関数が作業時間の変更に影響を受ける場合は、リリース サイクル中にこのベースラインを評価します。

貢献者達

Microsoft では、この記事を保持しています。 次の共同作成者がこの記事を書きました。

主要な著者: