次の方法で共有


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

データ ソースの追加

直接アクセス:

アプリの作成時に [ データで開始 ] オプションを選択した場合、ギャラリーの Items プロパティは、データベース テーブルを直接指すデータ ソース名を持つ 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 テーブルへのアクセス権と編集権限がある場合は、自動生成されたキーを追加することを検討してください。

ビューを使用する

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

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

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

ビューの Start with data から自動生成された画面が必要になる場合があります。

この自動生成されたオプションを使用するには:

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

:

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

BOOKLENDINGVIEW

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

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

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

注意

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

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

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

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

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

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

    このプロシージャは、Power Apps がコントロールを更新するたびに複数回呼び出すことができます。 ギャラリーまたはテーブルの Items プロパティと共に使用すると、システムが更新が必要であると判断するたびに、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 で安全と宣言した後、ギャラリーの Items プロパティのストアド プロシージャにアクセスします。 データ ソース名と ResultSets が後に続くストアド プロシージャ名を参照します。 表 1、表 2 など、返される一連のテーブルを参照して、複数の結果にアクセスします。

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

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 フロー