クライアント スクリプトの一般的なタスク
クライアント API オブジェクト モデルは広範囲で豊富です。 クライアント スクリプトに精通するにつれ、ロジックを実装するための API オブジェクトおよびメソッドが多数あることがわかります。 このユニットでは、実行するいくつかの一般的なタスクと、それらを実現するために使用する手法を紹介します。
Dataverse 列データへのアクセス
Dataverse 列は、オブジェクト モデルで属性オブジェクトとして表されます。 formContext オブジェクトの getAttribute() メソッドを使用すると、フォームに存在する特定の属性またはすべての属性を簡単に見つけることができます。 各属性オブジェクトには、データ型に関係なく使用できるいくつかの共通のメソッドが含まれています。 特定の属性データ型 (テキスト、数値、日付など) に使用できる他のメソッドもあります。
注
次のサンプル コードでは、使用される属性とコントロールが存在すると仮定しています。 オブジェクトを使用できず、通常のディフェンシブ チェックを実際に使用する必要がある場合、ほとんどのメソッドは null を返します。
ヒント
クライアント API のメソッドによって返されるコレクションには、要素の反復処理に使用できるいくつかの便利なメソッドが含まれます。 詳細については、モデル駆動型アプリのコレクション (クライアント API リファレンス) - Power Apps を参照してください。
| タスク | 例 |
|---|---|
| 名前によってアクセスする |
javascript var nameAttribute = formContext.getAttribute("name");
アカウント名列の属性を nameAttribute 変数に割り当てます。 フォームに属性が存在しない場合、getAttribute メソッドは null 値を返します。 |
| すべての属性にアクセスする |
javascript var allAttributes = formContext.getAttribute();
formContext.data.entity.attributes コレクションのすべての属性の配列を allAttributes 変数に割り当てます。 |
属性の使用
| タスク | 例 |
|---|---|
| 属性の値を取得する |
javascript var nameValue = formContext.getAttribute("name").getValue();
アカウント名列の値を nameValue 変数に割り当てます。 |
| 属性の値を設定する |
javascript formContext.getAttribute("name").setValue("new name");
アカウント名列の値を "新しい名前" に設定します。 |
| OptionSet 属性で現在選択されているオプション オブジェクトを取得する (Dataverse 選択肢列) |
javascript var addressTypeOption = formContext.getAttribute("address1_addresstypecode").getSelectedOption();
住所の種類列で選択したオプションを addressTypeOption 変数に割り当てます。 |
| フォームを開いた後でユーザー インターフェイスで属性値が変更されたかどうかを判断する |
javascript var isNameChanged = formContext.getAttribute("name").getIsDirty();
アカウント名列の値が変更されたかどうかを示すブール値を割り当て、isNameChanged 変数に値を割り当てます。 |
| レコードを保存するために列でデータが必須かどうかを変更する |
javascript formContext.getAttribute("creditlimit").setRequiredLevel("required");
与信限度額列を必須にします。
javascript formContext.getAttribute("creditlimit").setRequiredLevel("none");
与信限度額列を任意にします。 |
| レコードを保存するときに属性のデータを送信するかどうかを決定する |
javascript var nameSubmitMode = formContext.getAttribute("name").getSubmitMode();
nameSubmitMode 変数の値は、always、never、dirty テキストのいずれかになり、アカウント名列の submitMode を表します。 |
| レコードを保存するときに属性のデータを保存するかどうかを制御する |
javascript formContext.getAttribute("name").setSubmitMode("always"); この例では、アカウント名列の値が変更されていない場合でも常に保存されるようにします。 |
| 列レベルのセキュリティが属性に適用された場合に、ユーザーが属性に対する操作を作成、読み取り、または更新する権限を持っているかどうかを決定します。 |
javascript var canUpdateNameAttribute = formContext.getAttribute("name").getUserPrivilege().canUpdate;
アカウント名列を更新するユーザーの権限を表すブール値を canUpdateNameAttribute 変数に割り当てます。 |
フォーム コントロールへのアクセス
| タスク | 例 |
|---|---|
| 特定の属性のすべてのコントロールにアクセスする |
javascript var nameControls = formContext.getAttribute("name").controls.get();
name 属性のすべてのコントロールの配列を nameControls 変数に割り当てます。 属性の大部分が 1 つのコントロールで表されますが、列がフォームに複数回追加されている場合は、コントロールが複数になる場合があります。 |
| 名前によってコントロールにアクセスする |
javascript var nameControl = formContext.getControl("name"); 列のフォームに追加される最初のコントロールの名前は、列と同じ名前になります。 その他の各コントロール名には、インデックス番号が追加されます。 たとえば、名前列の 3 つのコントロールは、それぞれ name、name1、name2 という名前になります。 |
| すべてのコントロールにアクセスする |
javascript var allControls = formContext.getControl();
formContext.ui.controls コレクションのすべてのコントロールの配列を allControls 変数に割り当てます。 |
フォーム コントロールを使用する
属性オブジェクトと同様のコントロール オブジェクトには、タイプに関係なく、共通のメソッド セットがあります。 また、コントロールのタイプに基づいて特殊なメソッドも用意されています。
| タスク | 例 |
|---|---|
| コントロールが表示されるかどうかを決定する |
javascript var isNameVisible = formContext.getControl("name").getVisible();
Account Name 列が表示されるかどうかを表すブール値を isNameVisible 変数に割り当てます。 |
| コントロールを表示/非表示にする |
javascript formContext.getControl("name").setVisible(false);
アカウント名列を非表示にします。 |
| コントロールの属性への参照を取得する |
javascript var nameAttribute = formContext.getControl("name").getAttribute();
アカウント名列のコントロールの属性を nameAttribute 変数に割り当てます。 |
| 属性のすべてのコントロールを無効化/有効化する |
javascript formContext.getAttribute("name").controls.forEach(function (control, index) { control.setDisabled(true); }); 属性は複数のコントロールを持つ場合があります。 |
| コントロールのラベルを変更する |
javascript formContext.getControl("name").setLabel("Company Name");
アカウント名列のラベルを会社名のテキストに設定します。 |
| コントロールの親を取得する |
javascript var parentSection = formContext.getControl("name").getParent();
アカウント名列の親コントロールを parentSection 変数に割り当てます。 |
| コントロールにフォーカスを設定する |
javascript formContext.getControl("name").setFocus(); 現在の入力フォーカスをアカウント名列に設定します。 |
タブとセクションを使用する
各フォームには、タブのコレクションがあります。 各タブには、セクションのコレクションがあります。 各セクションには、コントロールのコレクションがあります。 プログラムによってこれらの要素にアクセスし、そのメソッドを使用できます。
| タスク | 例 |
|---|---|
| タブを表示/非表示にする |
javascript formContext.ui.tabs.get("general").setVisible(false);
全般 タブを非表示にします。 |
| タブのラベルを変更する |
javascript formContext.ui.tabs.get("general").setLabel("Major");
全般 タブのラベルをメジャーのテキストに設定します。 |
| セクションを表示/非表示にする |
javascript formContext.getControl("industrycode").getParent().setVisible(false);
業種コード列を含むセクションを非表示にします。 |
エンティティ データを使用する
次の表に、現在のレコードに関する情報を取得するメソッドを示します。
| タスク | 例 |
|---|---|
| 現在のレコードの ID を取得する |
javascript var recordId = formContext.data.entity.getId(); 現在のレコードの一意の識別子を recordId 変数に割り当てます。 フォームが開いて新しいレコードが作成された場合、null 値が返されます。 |
| 現在のレコードを保存する |
javascript formContext.data.entity.save();
saveandclose または saveandnew を使用して、保存して閉じる または 保存して新規作成 を使用するのと同等のアクションを実行します。 |
| 現在のレコードのデータが変更されるかどうかを決定します。 |
javascript var isDirty = formContext.data.entity.getIsDirty(); フォーム上の列の値が変更されたかどうかを示すブール値を isDirty 変数に割り当てます。 |