次の方法で共有


SQL Server のデータにアクセスする

データ ソースの追加

直接アクセス:

アプリの作成時に データから開始 オプションを選択した場合、ギャラリーの アイテム プロパティには、データベース テーブルを直接指すデータ ソース名を含む Power Fx 数式が含まれます。

たとえば、BOOKLENDING テーブルがある場合、次の数式が表示されます。

Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)

ビューとストアド プロシージャ:

一般的な専門的なデータ アクセス パターンは、直接アクセスを許可するのではなく、ビューを使用し、その後で作成、更新、削除のためのストアドプロシージャを使用することです。 ビューまたはストアド プロシージャを使用する場合は、サンプルの数式を変更する必要があります。 同様に、レコードのためのフォームでも、SubmitForm() 式の組み込みの直接的なアプローチは使用されません。

トリガー:

データベース パターンの 1 つは、テーブルでトリガーを使用することです。 テーブルにトリガーがある場合、作成、更新、削除のための直接パターン Submit() は使用できません。 Submit() は、SQL トリガーの処理と、同じ出力パラメータを使用する組み込みの Power Apps 動作との間に競合があります。

ただし、クエリの目的でテーブルに直接アクセスすることはできますが、CreateUpdate、または Delete を処理するには、ストアド プロシージャを呼び出す必要があります。

[!注意]

SQL Server コネクターは、リレーショナル・データを処理するすべてのコネクターと同様に、表に主キーがあることを前提としています。 主キーは、更新する特定のレコードを見つけるために重要です。 SQL Server テーブルに主キーがない場合、データは読み取り専用として扱われます。 SQL Server テーブルへのアクセス権と編集権限がある場合は、自動生成されたキーを追加することを検討してください。

ビューを使用する

ビュー は、単一のデータ テーブルとして表示される保存されたクエリです。

ビューは、データ ソースを追加するときに選択できるテーブルのリストに表示されます。 ビューはクエリのみをサポートし、更新はできません。 更新には ストアド プロシージャ を使用する必要があります。

Start with data オプションを使用してテーブルを作成すると、ギャラリーとフォームでレコードを表示する画面と数式が得られます。 作成、編集、削除のための数式と機能を確認できます。 ただし、ビューを使用する場合は、ギャラリーとフォームの表示画面のみが表示されます。

ビューには、Start with data から自動生成された画面を使用したい場合があります。

この自動生成されたオプションの場合:

  1. 基本テーブルStart with data を選択します。
  2. テーブル データ ソースを削除して置き換えます。

:

たとえば、BOOKLENDINGVIEW テーブルがあり、それを Power Apps のデータ ソースとして追加した場合、数式は次のようになります。

BOOKLENDINGVIEW

他の作成、更新、削除の数式をビュー データ ソースとストアド プロシージャ呼び出しに置き換えることもできます。

ストアド プロシージャを使用する

アプリに SQL Server 接続を追加すると、ストアド プロシージャを追加して Power Fx で直接呼び出すことができます。

注意

この機能は、安全な暗黙的接続でも機能します。

アプリに追加できるテーブル、ビュー、ストアド プロシージャのリストを示すスクリーンショット。

ストアド プロシージャを選択すると、子ノードが表示され、ストアド プロシージャを ギャラリーやテーブルに安全に使用できる として指定できます。

特定のシナリオで望ましくない可能性のあるアクションを実行しない場合、ストアド プロシージャは 安全 です。 たとえば、ストアド プロシージャが特定の都市のすべてのアカウントを収集し、それらにメールを送信するとします。 ストアド プロシージャが呼び出されるたびにメールが送信されることを必ずしも望まない場合があります。 したがって、ストアド プロシージャは安全とマークされるべきではありません。

ストアド プロシージャを安全と判断するのは以下の場合のみです:

  1. この手順をオンデマンドで呼び出しても 副作用はありません

    このプロシージャは、Power Apps がコントロールを更新するたび、または複数回呼び出すことができるはずです。 ギャラリーまたはテーブルの品目プロパティで使用される場合、Power Apps はシステムが更新が必要であると判断するたびにストアド プロシージャを呼び出します。 ストアド プロシージャがいつ呼び出されるかを制御することはできません。

  2. ストアド プロシージャでは適度な量のデータが返されます。

    ストアド プロシージャなどのアクション呼び出しでは、取得される行数に制限はありません。 テーブルやビューなどの表形式のデータ ソースのように、100 レコード単位で自動的にページングされることはありません。

    ストアド プロシージャが返すデータが多すぎる場合 (数千件のレコード)、アプリの速度が低下したりクラッシュしたりする可能性があります。 パフォーマンス上の理由から、レコード数は 2,000 件未満にしてください。

ストアド プロシージャを安全とマークすると、ストアド プロシージャを、アプリで使用するテーブルのギャラリー内の Items プロパティとして割り当てることができます。

重要

ストアド プロシージャの戻り値のスキーマは、呼び出し間で値が変わらないように 静的 である必要があります。 たとえば、ストアド プロシージャが 2 つのテーブルを返す場合、常に 2 つのテーブルが返されます。 型付けされた結果または型付けされていない結果のいずれかを操作できます。

結果の構造も静的である必要があります。 たとえば、結果のスキーマが 動的 である場合、結果は型指定されず、それらを Power Apps で使用するためには型を指定する必要があります。 詳細については 型指定されていない結果を参照してください。

ストアド プロシージャ名の前に付加された SQL 名前空間

プロシージャを保存する SQL Server 名前空間名が、ストアド プロシージャ名の先頭に付加されます。 たとえば、'DBO' SQL Server 名前空間内のすべてのストアド プロシージャの名前の先頭には、'dbo' があります。

たとえば、ストアド プロシージャを追加すると、プロジェクトに複数のデータ ソースが表示される場合があります。

SQL データ ソースを示すスクリーンショット。

ストアドプロシージャの呼び出し

Power Apps でストアド プロシージャを使用するには、ストアド プロシージャ名の前に、それに関連付けられたコネクタの名前を付け、その後にストアド プロシージャ名を続けます (例: Paruntimedb.dbonewlibrarybook)。

ヒント

Power Apps がストアド プロシージャを取り込まれると、名前空間とプロシージャ名が連結され、dbo.newlibrarybookdbonewlibrarybook になります。

引数は、名前付き値のペアを持つ Power Apps レコードとして渡されます。

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

チップ

Power Appsのテキスト値から読み取っているため、ストアド プロシージャに値を渡すときに必要に応じて値を変換することを忘れないでください。 たとえば、SQL で整数を更新する場合は、Value() を使用してフィールド内のテキストを変換する必要があります。

以下は、OnSelect プロパティにストアド プロシージャを割り当てる場合の例です。

キー/値のペアとドット表記を使用してストアド プロシージャを直接呼び出す方法を示すスクリーンショット。

変数とすべてのストアド プロシージャ

ギャラリーの 品目 プロパティに対するストアド プロシージャは、UI に対して安全であることを宣言した後にアクセスすることができます。 データ ソース名と ResultSets が後に続くストアド プロシージャ名を参照します。 テーブル 1、テーブル 2 など、返されたテーブルのセットを参照することで、複数の結果にアクセスできます。

たとえば、テーブル Paruntimedb に名前 dbo.spo_show_all_library_books() が付けられたストアド プロシージャは次のようになります。

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

このクエリはギャラリーにレコードを充填します。 ただし、ストアド プロシージャは、表形式モデル上の アクション 動作です。 Refresh() は、表形式のデータ ソースでのみ機能し、ストアド プロシージャでは使用できません。 レコードが作成、更新、または削除されたときは、ギャラリーを更新する必要があります。

ヒント

表形式のデータ ソースのフォームで Submit() を使用すると、内部で Refresh() を効果的に呼び出し、ギャラリーが更新されます。

画面の OnVisible プロパティで変数を使用し、ストアド プロシージャを変数に設定します。

Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

そうすると、ギャラリーの Items プロパティを変数名前に設定できます。

SP_Books

ストアド プロシージャを呼び出してレコードを作成、更新、または削除した後、変数を再度設定してギャラリーを更新します。

Paruntimedb.dbonewlibrarybook({   
  book_name: DataCardValue3_2.Text, 
  author: DataCardValue1_2.Text,
    ...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

Power Automate を使用してストアドプロシージャを呼び出す

Power Automate は、非同期アクションを最適に処理します。 ビジネス プロセス内の一連の呼び出しの一部としてストアド プロシージャを呼び出すことができます。

ストアド プロシージャへの呼び出しの前に Power Automate を呼び出すには、フローの一部として入力変数を作成します。

Power Automate 入力を示すスクリーンショット。

次に、入力変数をストアド プロシージャの呼び出しに渡します。

ストアド プロシージャの実行

この Power Automate フローをアプリに追加して呼び出します。 オプションの引数はレコード「{ …」として渡されます。 }”. 次の例には、すべてのオプションの引数があります。

Power Automate フロー