Dataverse ローコード プラグインの例 (プレビュー)
[このトピックはプレリリース ドキュメントであり、変更されることがあります。]
これらのサンプル プラグインの目的は、プラグインをアプリに統合して作業を開始できるようにすることです。 作成エクスペリエンスには、Power Fx 式がサポートする Microsoft Dataverse のカスタム API の作成が含まれており、Dataverse の内部または外部のアクションをトリガーできます。
重要
- これはプレビュー機能です。
- プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能を公式リリースの前に使用できるようにすることで、顧客が一足先にアクセスし、そこからフィードバックを得ることができます。
前提条件
データ イベントのサンプル プラグインを使用するには、Dataverse アクセラレータ アプリが環境にインストールされている必要があります。 詳細情報: ローコード プラグインを作成するための前提条件
注意
メール テンプレートは、特定のテーブルでのみ使用できます。 詳細情報: 電子メールのテンプレートを作成する
負以外の値を返す
この例では、Abs() 関数 を使用して負以外の引数の値を返します。 数値が負の場合は、Abs
は相当する正の値を返します。
Dataverse アクセラレータ アプリを再生し、コマンド バーで 新しいアクション > インスタント プラグイン を選択します。
数式名や説明などの表示名を入力します。
Out
パラメータを作成して、文字列などの意味があり予期される動作を検証します。必要に応じて、式で意味のある、テストを容易にする入力パラメータを使用します。数式エディターで、
Out
パラメータを中括弧で囲みます。{Out: "" }
数式をテストする式を入力します。
- intellisense が数式を受け入れることを検証します (テキストが水色に変わります)。
- たとえば、結果の検証に役立つ出力を指定する式を実装します。
{Out: "Abs(-5) = 5: " & Text( Abs(-5) = 5 ) }
次へ を選択してから、保存 を選択します。
テスト を選択して、式をテストします。 出力パラメータを使用して結果を検証します。
入力検証とカスタム エラー
重複データ検出
カスタム エラー メッセージをスローする重複エラー検出などのサーバー側の入力検証を実装します。
- Dataverse アクセラレータ アプリを再生し、コマンド バーで 新しいアクション > 自動化プラグイン を選択します。
- 名前ボックスに 重複確認 と入力します。
- Table には、連絡先 を選択します。
- 行の場合はこのプラグインを実行する では、作成済み を選択します。
- 数式 ボックス にこの数式を入力します。
If( !IsBlank(LookUp([@Contacts],'Last Name'=ThisRecord.'Last Name' && 'First Name'=ThisRecord.'First Name')),
Error("You have existing contacts with the same first name and last name")
)
- 保存 を選択します。
プラグインのテスト
- プラグインをテストするには、次の手順に従って連絡先テーブルを使用してキャンバス アプリを作成します。テーブルを指定する
- 連絡先行を作成する。
- 前の手順と同じ名前で別の連絡先を作成します。
- 重複レコードが見つかったことを示すメッセージが表示されます。 エラー メッセージ プロンプトで 無視して保存 を選択します。
次のカスタム エラー メッセージが表示されます: 姓名が同じ連絡先が 2 つあります。
データ検証
ErrorKind 列挙を使用して、特定の種類のエラーを表示します。
新しい自動化プラグインを作成します。
次の値を指定します。
- 名前: 入力検証
- 説明: 有効な日付をチェックし、無効な場合はエラーをスローします
- Table: 予定
- 行が次の状態の場合は、このプラグイン ルールを実行します: 更新済み
以下の数式を入力します。
If(ThisRecord.'Due Date' < Now(), Error({ Kind: ErrorKind.Validation , Message: "The due date cannot be in the past" }) );
詳細オプション で、いつ実行するか を 事前操作 に設定します。無効なデータを防ぐために、データが保存される前にこのルールを実行する必要があります。
保存 を選択します。
カスタム エラーに関する詳細は、Error() 関数 に移動してご覧ください。
データ イベントに基づいてメールを送信する
前提条件:
- 環境でサーバー側同期が設定されています。 詳細: メール、予定、連絡先、タスクのサーバー側同期の設定
- メール テンプレート。
メール テンプレートの例
SenMail ベースのデータ イベント用に作成できるメール テンプレートの例を次に示します。
- テンプレートの種類: グローバル
- 名前: 注文ありがとうございます
- 説明: このテンプレートを使用して、お客様に注文に対する感謝の意を表します。
- 件名:
Thank you for your order <orderconfirmation-{!salesorder:Order Number; }>
- 本文: このコードを使用します。
Hello {!Sales Order:First Name;},
Order Type: {! Sales Order: Order Type;},
Location Type: {! Sales Order: Location Type;},
Address1: {! Sales Order: Address 1;},
Address2: {! Sales Order: Address 2;},
Preferred Service Start Date 1: {! Sales Order: Preferred Service Start Date;},
Next Step- We take upto 48 hrs to schedule an in-person and will notify you as soon as we have a In-person Technician allocated at your site. For any questions, please contact us at 1-800-CON-SOLAR
Yours Sincerely,
Contoso Sales
自動化プラグインを作成する
- Dataverse アクセラレータ アプリを選択し、自動化されたプラグイン にある +新しいプラグイン を選択します。
- 次の情報を入力してください。
名前: SendEmailUponCreate
テーブル: 販売注文の論理テーブル名である SalesOrder を選択します。 このイベントは、販売注文テーブルに基づいています。
行が次の状態の場合は、このプラグインを実行します: 作成済み
数式: 以下のコードを 数式 ボックスに貼り付けます。 SendEmailFromTemplate 関数の詳細については、SendEmailFromTemplate アクション を参照してください。
XSendEmailFromTemplate( LookUp('Email Templates',StartsWith(title,"Order Thank You")).'Email Template', ThisRecord, LookUp(Users,'Primary Email'="sampleemail@sample.com"),[ThisRecord.Email] )
- 詳細 > 事後操作 を選択します。
- 保存 を選択します。
確認メッセージ プラグインは正常に保存されました が表示されます。
インスタント アクションに基づいてアプリ内通知を送信する
アプリ内通知により、作成者はモデル駆動型アプリでユーザー向けにコンテキストに応じたアクション可能な通知を構成できます。
アプリ内通知を送信するローコード プラグインを作成する
- Dataverse アクセラレータ アプリを再生し、インスタント プラグイン にある +新しいプラグイン を選択します。
- 次の情報を入力して、次へ を選択します。
- 名前: NotifyTechnican1
- 説明: このインスタント プラグインはアプリ ユーザーに通知します。
- 定義 ページで、次のデータ型を使用して入力パラメータを作成します。
- OrderID: 文字列
- TechnicianEmail: 文字列
- 数式。 数式 ボックスに、次のコードを貼り付けます。 この数式の詳細については、SendAppNotification アクション を参照してください。
XSendAppNotification( "New service", LookUp(Users,'Primary Email'=TechnicianEmail), "You have a new solar panel installation scheduled on "& LookUp('Scheduling Results','OrderId'=OrderID).'ServiceDate'&" in "& LookUp('Service Orders','Order Number'=OrderID).City &". Contact the coordinator with any questions.", [ XCreateSidePaneActionForEntity( "View order", OrderID, "Sales Order", "cr8b8_serviceorder1", LookUp('Service Orders','Order Number'=OrderID).'Service Order' ) ] )
- 次へ を選択します。
- 概要 ページで 保存 を選択します。
アプリ内通知インスタント アクションを呼び出す
- キャンバス アプリを選択してコマンド バーの 編集 を選択するか、新規作成 します。
- 左側のナビゲーション ウィンドウで画面を選択するか、新しい画面を作成します。
- 挿入 メニューで、テキスト 技術者に通知する を使用して ボタン をページに追加します。
- ボタンを選択し、fx 数式バーに次のように入力します。DataCardValue17 は、受注 ID を含む列で、DataCardValue15 は、技術者のメール アドレスを含む列です。 この例では、サービス注文アプリ という名前のキャンバス アプリが使用されます。
Environment.cr8b8_Notifytechnician1({ OrderID: DataCardValue17.Text, TechnicianEmail: DataCardValue15.Text }); Notify("The technician was notified!", NotificationType.Success, 2000);
- 変更を 保存 して 公開 します。
アプリで技術者に通知アクションが選択されると、サービス注文に割り当てられた技術者にアプリ内通知が送信されます。 通知に対するアクションを実行すると、サイド ウィンドウにサービス注文の詳細が表示されます。
MSN Weather コネクタを使用したインスタント プラグインのサンプル
このプラグインは、MSN Weather コネクタ を使用して、特定の場所の現在の天気を返します。
前提条件:
- ローコード プラグインを作成するための前提条件
- MSN Weather コネクタは環境内で許可されています
環境でまだ利用できない場合は、MSN Weather の接続参照を作成します:
スニペットのコピー:
intellisense を使用して式の編集を終了し、必要に応じてコネクタ応答プロパティを使用します:
保存
ヒント
応答に含まれる可能性のあるさまざまなプロパティにアクセスする場合は、With() 関数を使用して 1 つのアクションから応答全体をキャプチャします。 以下の例には、入力パラメーター Location
(文字列) と出力パラメーター Out
(文字列) があります。
With({ /* Capture current weather response from connector */
c: new_MsnWeather.CurrentWeather( Location, "Imperial" ).responses.weather.current
},{ /* Return concatenated weather details */
Out: "Current temp: " & c.temp & " degrees. Feels like " & c.feels & " degrees. Wind speed is " & c.windSpd & " mph."
})
ベスト プラクティス
自動化されたローコード プラグインでの無限ループ エラーの処理
パッチがプラグインと同じテーブルで発生する 'Update' イベント時に自動プラグインにパッチ ステートメントを記述しないでください。 これにより、無限ループやプラグインの実行エラーが発生します。
問題のあるパターン: Patch()
式を使用すると、別の更新プログラムをトリガーします。
推奨されるパターン: この問題を回避するには、代わりに Set()
式を使用します。