【API紹介】formContext.ui編
こんにちは。
前回の記事では、『formContext.data.entity』の中から5つの関数を紹介しましたが、今回は『formContext.ui』から4つの関数をご紹介します。
- formContext.ui の概要
- フォーム単位に通知を行う (setFormNotification)
- フォーム単位の通知を削除する (clearFormNotification)
- フォームを閉じる (close)
- フォームの種類を取得する (getFormType)
formContext.ui の概要
Microsoft社のAPI一覧では、以下の様に説明されています。記載内容の通り、"UIに関する情報を取得する"関数となっていますので、レコードやフィールドに対して何かしらの処理を行う訳ではなく、どちらかというとビューやリボン、フォームの情報にアクセスするための関数となっています。
ユーザー インターフェイス (UI) に関する情報を取得するプロパティおよびメソッド、およびフォームのいくつかのサブコンポーネントのコレクションを提供します。
フォーム単位に通知を行う (setFormNotification)
『setFormNotification』は、フォーム上に通知を表示する関数です。この関数は結構有用で、フォームにアクセスしたユーザに対して情報発信したり、行った操作に対する警告をヘッダー付近に表示することができます。
構文
formContext.ui.setFormNotification(message, level, uniqueId);
パラメータ
値 | 種類 |
必須 |
説明 |
---|---|---|---|
message | String | Yes | 表示するテキスト文を入力 |
level | String | Yes | ERROR:エラーアイコンとテキスト文を表示 WARNING:警告アイコンとテキスト文を表示 INFO:情報アイコンとテキスト文を表示 |
uniqueId | String | Yes | 『clearFormNotification』関数で、通知を削除する際に使用するIDを指定 |
戻り値
処理に成功した場合は「true」、そうでない場合は「false」を返却します。関数の使用例
[JavaScript]function SetFormNotification (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); formContext.ui.setFormNotification("必須のフィールドは全て入力してください。", "INFO", "abc123"); }
[実行結果]
参考ページ
モデル駆動型アプリの setFormNotification (クライアント API 参照) - PowerApps | Microsoft Docsフォーム単位の通知を削除する (clearFormNotification)
『clearFormNotification』は、フォーム上に表示された通知を削除する関数です。この関数は、通知を表示したり非表示にしたりする処理が必要な場合に、上記で紹介した『setFormNotification』とセットで使われることが多い関数ですが、通知を常に表示しておきたい場合は利用しなくても構いません。
構文
formContext.ui.clearFormNotification(uniqueId);
パラメータ
値 | 種類 |
必須 |
説明 |
---|---|---|---|
uniqueId | String | Yes | 『setFormNotification』関数で指定したIDを指定 |
戻り値
処理に成功した場合は「true」、そうでない場合は「false」を返却します。関数の使用例
[JavaScript]function ClearFormNotification (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); formContext.ui.setFormNotification("必須のフィールドは全て入力してください。", "INFO", "abc123"); formContext.ui.clearFormNotification("abc123"); }
[実行結果]
参考ページ
モデル駆動型アプリの clearFormNotification (クライアント API 参照) - PowerApps | Microsoft Docsフォームを閉じる (close)
『close』は、フォームを閉じる関数です。ブラウザ自体を[×]で閉じる『Window.close』のような挙動ではなく、Dynamics 365 の画面内でフォームを閉じるような挙動となるため、例えば、とあるレコードのフォーム画面上でこの関数が実行された場合、ビューの画面に遷移するか、もしくは前に開いていたレコードのフォーム画面に遷移します。
構文
formContext.ui.close();
パラメータ
(特になし)戻り値
(特になし)関数の使用例
[JavaScript]function Close (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); formContext.ui.close(); }
[実行結果]
画像はありませんが、とあるレコード上で処理が実行された後、ビュー画面に遷移しました。
参考ページ
モデル駆動型アプリの close (クライアント API 参照) - PowerApps | Microsoft Docsフォームの種類を取得する (getFormType)
『getFormType 』は、フォームの種類を取得する関数で、新規作成時(フォームタイプが"1"の場合)のみ実行させたい処理などがある場合に利用することができます。構文
formContext.ui.getFormType();
パラメータ
(特になし)戻り値
値 | フォームの種類 |
---|---|
0 | 未定義のフォームの場合 |
1 | 新規作成のフォームの場合 |
2 | 既存のフォームの場合 |
3 | フォームが読み取り専用になっている場合 |
4 | フォームが無効になっている場合 |
6 | 一括編集のフォームの場合 |
関数の使用例
[JavaScript]function GetFormType (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); if (formContext.ui.getFormType() === 1) { alert("このフォームは新規作成フォームです"); } else if (formContext.ui.getFormType() === 2) { alert("このフォームは既存のフォームです"); } }
[実行結果]
※新規作成フォームを開いた場合
※既存のフォームを開いた場合
参考ページ
モデル駆動型アプリの getFormType (クライアント API 参照) - PowerApps | Microsoft DocsUI周りの関数は、私も実案件で本当によく使う関数ばかりです。
特にフォームの種類を取得する『getFormType』関数は利用頻度が高く、OnLoadのJavaScriptの中でif分岐させて、新規作成フォームの場合のみ何かしらの処理をするようなシーンで使える関数なので、ご存知でなかった方は、これを機に使ってみてはいかがでしょうか?
【API紹介】formContext.data.entity編
こんにちは。
今回から、複数回に分けてDynamics 365 (CRM) で使用可能なAPIの紹介を行っていきたいと思います。
紹介にあたり、基本的には以下の様なポリシーに沿って記事を更新していければと考えています。
・全ての関数を紹介するわけではなく、比較的使用頻度が高く、使えそうな関数に絞る。
・どのようなシーンで利用できそうか、具体的な説明をできる限り紹介する。
・APIの構文やパラメータを紹介しつつ、実際に動くソースコードを書いてみる。
記念すべき第1回目は、『formContext.data.entity』の中から5つの関数を紹介します。
- formContext.data.entity の概要
- エンティティ名を取得 (getEntityName)
- レコードを参照する検索値を取得 (getEntityReference)
- レコードのGUIDを取得 (getId)
- フィールドの変更を検知 (getIsDirty)
- レコードを保存する (save)
formContext.data.entity の概要
Microsoft社のAPI一覧では以下の様に説明されていますが、要するに「フォーム(OnLoad、OnSave)やフィールド(OnChange)のイベントハンドラーで使ってね」ということです。ページに表示されるレコードに固有の情報を取得するプロパティとメソッド、save メソッド、およびフォームに含まれるすべての属性のコレクションを提供します。 属性データは、フォーム上のフィールドによって表される属性に制限されています。
エンティティ名を取得 (getEntityName)
『getEntityName』は、レコードのエンティティの論理名を返す関数です。エンティティの論理名を使用するような処理(FetchXMLの構文作成等)で、利用できるかと思います。
構文
formContext.data.entity.getEntityName();
パラメータ
(特になし)戻り値
エンティティの論理名を文字列型で返却します。例えば、取引先企業のフォーム上で実行した場合は、「account」が返却されます。
関数の使用例
[JavaScript]function GetEntityName (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); // エンティティの論理名を取得して表示 alert("論理名は「" + formContext.data.entity.getEntityName() + "」です。"); }
[実行結果]
参考ページ
モデル駆動型アプリの getEntityName (クライアント API 参照) - PowerApps | Microsoft Docsレコードを参照する検索値を取得 (getEntityReference)
『getEntityReference』は、レコードを参照する検索値(entityType、id、name)を返す関数です。レコードのGUIDや名前を使用するような処理(FetchXMLの構文作成等)や、検索フィールドにレコードを設定する処理で利用できるかと思います。
構文
formContext.data.entity.getEntityReference();
パラメータ
(特になし)戻り値
レコードの情報をオブジェクト型で返却します。返されたオブジェクトには、次の3つの属性が含まれています。属性 | 説明 |
---|---|
entityType | エンティティの論理名を文字列で返却。(例:account) |
id | レコードのGUIDを文字列で返却。(例:E1D9D1DE-BC47-EA11-A812-000D3A415E1C) |
name | レコードの名前を文字列で返却。(例:株式会社ABC) |
関数の使用例
[JavaScript]function GetFormContext (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); // レコードの情報を取得して表示 var reference = formContext.data.entity.getEntityReference(); alert( "論理名は「" + reference.entityType + "」です。\nGUIDは「" + reference.id + "」です。\nレコード名は「" + reference.name + "」です。" ); }
[実行結果]
参考ページ
モデル駆動型アプリの getEntityReference (クライアント API 参照) - PowerApps | Microsoft DocsレコードのGUIDを取得 (getId)
『getId』は、レコードのGUIDを返す関数です。レコードのGUIDを使用するような処理(FetchXMLの構文作成等)で利用できるかと思います。
構文
formContext.data.entity.getId();
パラメータ
(特になし)戻り値
レコードのGUIDを返却します。関数の使用例
[JavaScript]function GetId (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); // レコードのGUIDを取得して表示 alert("GUIDは「" + formContext.data.entity.getId() + "」です。"); }
[実行結果]
参考ページ
モデル駆動型アプリの getId (クライアント API 参照) - PowerApps | Microsoft Docsフィールドの変更を検知 (getIsDirty)
『getIsDirty』は、フォーム内のフィールドに変更が加えられているかどうかをtrue/falseで返却する関数です。フォーム内のいずれかのフィールドに変更が加えられている場合に「true」を返却するため、例えばフィールドに変更が加えられたタイミングでアラートを出すような処理などに利用できるかと思います。
構文
formContext.data.entity.getIsDirty();
パラメータ
(特になし)戻り値
フォーム内のフィールドが変更されている場合は「true」、そうでない場合は「false」を返却します。関数の使用例
[JavaScript]function GetIsDirty (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); // フィールド更新の有無を取得して結果を表示 if (formContext.data.entity.getIsDirty() === true) { alert("更新されたフィールドがあります。"); } else if (formContext.data.entity.getIsDirty() === false) { alert("更新されたフィールドはありません。"); } else { return; } }
[実行結果]
※とあるフィールドのOnChangeイベントに、上記JavaScriptの関数を設定して値を変更
参考ページ
モデル駆動型アプリの getIsDirty (クライアント API 参照) - PowerApps | Microsoft Docsレコードを保存する (save)
『save』は、レコードの内容を保存することができる関数です。[上書き保存] のボタンを押したり、[Ctrl] + [S] キーで保存するような操作をJavaScriptから実行させることができるため、様々なシーンで利用できる便利な関数かと思います。
また保存後にフォームを閉じたり、新規作成フォームを開いたりすることも可能です。
構文
formContext.data.entity.save(saveOption);
パラメータ
値 | 種類 |
必須 |
説明 |
---|---|---|---|
saveOption | String | No | (指定無し):レコードの保存処理のみを実施 saveandclose:レコードを保存後、フォームを閉じる saveandnew:レコードを保存後、新規作成フォームを開く |
戻り値
(特になし)関数の使用例
[JavaScript]function save (executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); // 保存して新規作成フォームを開く formContext.data.entity.save("saveandnew"); }
[実行結果]
画像はありませんが保存処理が実行された後、新規作成フォームが自動で開きます。
参考ページ
モデル駆動型アプリにおける save (Client API リファレンス) - PowerApps | Microsoft DocsレコードにアクセスするためのURL
こんにちは。
今回は、レコードにアクセスするためのURLをどのように設定するべきかについてご説明します。
URLの体系
Dynamics 365 (CRM) は、他のWebサイトと比べて少し特殊なURL体系になっており、『#』以下が一見IDっぽく見えますが、このURLを貼り付けても一番最初のトップページにしか行けない仕様になっています。https://domain.crm7.dynamics.com/tenant/main.aspx#468515678
そのため、レコードにアクセスするためには以下の様なURLを設定する必要があります。
https://{ドメイン名}/{テナント名}/main.aspx?etc={エンティティコード}&extraqs=formid%3d{フォームID}&id=%7b{レコードID}%7d&pagetype=entityrecord
なお、上記のURLは手打ちする必要はなく、レコードのフォーム画面のコマンドバーにある [リンクを電子メールで送信] をクリックすれば取得することができます。