コマンドでの Power Fx の使用
この記事では、コマンドに固有の Power Fx の側面について説明します。 キャンバス アプリ内で現在使用されている他の多くの機能も使用できます。 コマンドはモデル駆動型アプリ向けであるため、違いがあることに注意してください。
- 既存のすべてのデータ フロー機能がサポートされています。 データフローとは何か?
- データ処理をする命令関数はサポートされています。
- シンプルな
ConfirmとNotifyの命令関数はサポートされています。 - サポートされていない関数のリストについては、サポートされていない関数 にアクセスしてください。
注意
Power Fx コマンドの公開には数分かかる場合があります。 公開操作が完了したように見えても、バックグラウンド操作がまだ実行されていることは明らかではない場合があります。 公開後数分待ってから、アプリを更新して変更が反映されるようにする必要がある場合があります。 これは通常、Power Fx ベースのコマンドがアプリに対して最初に公開されるときに時間がかかります。
OnSelect
アプリ内でボタンが選択されたときに実行されるロジックを定義します。
表示可能
アプリの実行時にボタンを非表示、または表示するためのロジックを定義します。
可視性ロジックを定義するには、コマンドを選択します。 続いて、右側のコマンドプロパティペインで Visibility を選択し、式から条件を表示する を選択します。 これで、数式バーの左側で 可視化 を選択し、数式バーを使用して Power Fx の式を記述します。
選択されたプロパティ
| フィールド | タイプ | 説明設定 |
|---|---|---|
| Item | データソースのレコード | データソースから選択された 1 つのレコード。 |
| AllItems | データソースからのレコードのテーブル | データソースから選択されたすべてのレコード。 |
| 状態 | 列挙型 | 選択されたコントロールの状態。 編集 (=0)、新規 (=1)、表示 (=2) |
| 未保存 | ブール型 | Selected または SelectedItems に未保存の変更がある場合は true を返します。 それ以外の場合は、false を返します。 コマンド コンポーネント ライブラリ内で自動保存が true (デフォルト オプション) に設定されている場合は、常に false を返します。 |
- 選択済み プロパティは、コマンドのホストによって提供されます。
- アイテム と 全てのアイテム の名前は ComboBox コントロールおよびギャラリー コントロールとある程度一致していますが、これは新しいパターンです。
- レコードが選択されていない場合は、アイテム は空白を返し (IsBlank は ture を返す)、全てのアイテム は空のテーブルを返します (IsEmpty は true を返す)。
- レコード参照用の Null データソース (ポリモーフィック レコード タイプ)。 Save や IsType/AsType などの汎用関数を呼び出すことができます。
- アイテム は SelectionMax <> 1 の場合、常に空白です。 これにより、数式を 1 つのアイテムだけに記述したり、複数のアイテムにスケーリングしたりすることがなくなります。
AutoSave
- 多くの JavaScript コマンドは、フォーム バッファーを保存することから始まります。 これは、コードの残りの部分を操作しやすくするためです。
- デフォルトでは、フォーム バッファーはアプリ開発者の代わりに保存されます。
- コマンドが開始される前に、フォームが保存されます。
- 保存操作中に発生した問題は、フォームの UI 内で処理されます。
Patch 関数
現在選択されたレコードを Patch (パッチ、更新) します
Patch(Accounts, Self.Selected.Item, {'Account Name': "Changed Account name"})
関連レコードの作成
注意
関連するテーブルがまだコマンド コンポーネント ライブラリにない場合は、canvas studio で開き、そこにデータ ソースを追加する必要があります。
Patch(Tasks,Defaults(Tasks),{Regarding:Self.Selected.Item},{Subject:"Subject of the Task"})
日付プロパティの確認と編集
If(Self.Selected.Item.'Last Date Included in Campaign'>DateAdd(Now(),-3), Patch(Accounts,Self.Selected.Item,{'Last Date Included in Campaign':Date(2021,10,19)}))
Visible プロパティ: グリッド ビューで 1 つ以上のレコードが選択されている場合にのみコマンドを表示する
CountRows(Self.Selected.AllItems) > 0
レコード データに基づいて可視性を制御する
//Button will be visible for accounts with Account Rating > 20
Self.Selected.Item.'Account Rating'>20
移動
注意
その他のオプションについては、JavaScript を使用するクライアント API のリファレンスを参照してください。 詳細: navigateTo (クライアント API リファレンス)
カスタム ページに移動する
モデル駆動型アプリ内でカスタム キャンバスページに移動するには、最初の引数にページ名を渡します。
Navigate( myCustomPage )
テーブルの既定のビューに移動する
テーブルの規定ビューに移動するには、最初の引数としてテーブル名を渡します。
Navigate( Accounts )
テーブルの特定のシステム ビューに移動する
テーブルの特定のシステム ビューに移動するには、列挙型のテーブルの Views を渡します。
Navigate( 'Accounts (Views)'.'My Active Accounts' )
テーブルの既定フォームに移動
テーブルの既定フォームに移動するには、レコードを最初の引数として渡します。
Navigate( Gallery1.Selected )
作成モードでテーブルの既定フォームに移動
作成モードでテーブルの既定フォームに移動するには、既定 関数から作成された Dataverse レコードを渡します。 これにより、レコードを使用する既定フォームが新しいレコードとして開きます。 Defaults 関数は、テーブル名を使用してレコードを作成します。
Navigate( Defaults( Accounts ) )
RecordInfo 関数
データ ソースの特定のレコードに関する情報を取得するには、RecordInfo を使用します。 現時点では、Microsoft Dataverse のみがサポートされています。
利用可能な情報:
| 情報引数 | 説明設定 |
|---|---|
| RecordInfo.DeletePermission | 現在のユーザーに、このレコードをデータソースから削除する権限が付与されているか? |
| RecordInfo.EditPermission | 現在のユーザーに、データソース内のこのレコードを修正する権限が付与されているか? |
| RecordInfo.ReadPermission | 現在のユーザーに、このレコードをデータソースから行事する権限が付与されているか? |
RecordInfo はブール値を返します:
| 値を返す | 説明設定 |
|---|---|
| true | ユーザーに権限が付与されています。 |
| 偽 | ユーザーに権限が付与されていません。 レコードが 空欄 の場合、RecordInfo は false を返します。 |
RecordInfo は、データ ソースレベルの権限も考慮に入れます。 たとえば、ユーザーがレコード レベルではレコードを変更する権限を持っているが、テーブル レベルでは権限を持っていない場合、ModifyPermission に対して false を返します。 DataSourceInfo 関数を使用すると、データ ソース全体に関する次の情報を取得することもできます。
RecordInfo 構文
RecordInfo( Record、Information )
- Record – 必須。 テストするレコード。
- 情報 – 必須。 レコードに必要な情報。
RecordInfo の例
RecordInfo(Self.Selected.Item, RecordInfo.EditPermission )
この例では、 可視化 プロパティに使用されています。 ログインしたユーザーが選択したレコードの編集権限を持っているかどうかを確認します。 ユーザーがこのレコードの編集や、 Accounts データソース全般を変更する権限を持っている場合、RecordInfo は true を返し、コマンドが表示されます。 それ以外の場合、コマンドはユーザーに表示されません。
CountRows(Filter(Self.Selected.AllItems, RecordInfo(ThisRecord,RecordInfo.EditPermission)))>0
この例では、メイン グリッド の位置の Visible プロパティに使用されます。 このボタンは、グリッド内の 1 つ以上のレコードが選択され、かつ、選択されたレコードの 少なくとも 1 つ に対して編集権限を持っている場合に、アプリを実行しているユーザーに表示されます。
CountRows(Filter(Self.Selected.AllItems, RecordInfo(ThisRecord,RecordInfo.EditPermission)))=CountRows(Self.Selected.AllItems)
この例では、メイン グリッド の位置の Visible プロパティに使用されます。 このボタンは、グリッド内の 1 つ以上のレコードが選択され、かつ、選択されたレコードの すべて に対して編集権限を持っている場合に、アプリを実行しているユーザーに表示されます。
DataSourceInfo 関数
データ ソースは、ユーザー エクスペリエンスを最適化するために貴重な情報を提供できます。
Patch 関数を使用する前に、列 レベルの情報を使用して、ユーザー入力を検証し、ユーザーに即時フィードバックを提供することができます。 Validate 関数はこの同じ情報を使用します。
データ ソース レベルの情報を使用して、たとえば、レコードを編集および作成するためのアクセス許可を持たないユーザーに対して、編集 および 新規作成 用のボタンを無効または非表示にすることができます。
データ ソース テーブル情報
DataSourceInfo を使用すると、データ ソース全体に関する次の情報を取得できます。 命令の場合は、Visibility のためにもよく使われます。 たとえば、ユーザーがテーブルに対して1つ以上の権限を持っているかどうかに応じて、コマンドを表示または非表示にすることができます。
| 情報の引数 | 結果の種類 | 説明設定 |
|---|---|---|
| DataSourceInfo.AllowedValues | Boolean | このデータ ソースに対してユーザーに付与できるアクセス許可の種類は何ですか? データ ソースによって設定されていない場合は、空白 を返します。 |
| DataSourceInfo.CreatePermission | ブール型 | 現在のユーザーに対象データ ソースのレコードを作成するためのアクセス許可がありますか? データ ソースによって設定されていない場合は、true を返します。 |
| DataSourceInfo.DeletePermission | ブール型 | 現在のユーザーに対象データ ソースのレコードを削除するためのアクセス許可がありますか? データ ソースによって設定されていない場合は、true を返します。 |
| DataSourceInfo.EditPermission | ブール型 | 現在のユーザーに対象データ ソースのレコードを編集するためのアクセス許可がありますか? データ ソースによって設定されていない場合は、true を返します。 |
| DataSourceInfo.ReadPermission | ブール型 | 現在のユーザーに対象データ ソースのレコードを編集するための読み取り許可がありますか? データ ソースによって設定されていない場合は、true を返します。 |
注意
現在のユーザが要求された権限を持っているかどうか判断できない場合、DataSourceInfo は true を返します。 実際の操作が実行されると、サーバーによってアクセス許可が再度チェックされ、許可されていない場合はエラーが表示されます。 現時点では、DataSourceInfo による権限チェックは、Microsoft Dataverse を使用する場合にのみ可能です。
DataSourceInfo 構文
DataSourceInfo( DataSource, Information, ColumnName )
- DataSource – 必須。 使用するデータ ソース。
- 情報 – 必須。 取得する情報の種類。
- ColumnName – オプション。 列レベルの情報の場合は、列名を文字列として指定します。 電話 の列は、二重引用符を含む "電話" として渡されます。 データ ソース レベルの情報に関しては、ColumnName 引数を使用することはできません。
データ ソース列の情報
DataSourceInfo を使用すると、データ ソースの特定の列に関する情報を取得できます。
| 情報の引数 | 結果の種類 | 説明設定 |
|---|---|---|
| DataSourceInfo.DisplayName | 文字列 | 列の表示名。 表示名が定義されていない場合は、列名を返します。 |
| DataSourceInfo.MaxLength | 番号 | 列が保持できる最大文字数。 文字列が含まれている列にのみ適用されます。 最大数が設定されていない場合は、空白 を返します。 |
| DataSourceInfo.MaxValue | 番号 | 列が保持できる最大数値。 数値が含まれている列にのみ適用されます。 最大数が設定されていない場合は、空白 を返します。 |
| DataSourceInfo.MinValue | 番号 | 列が保持できる最小数値。 数値が含まれている列にのみ適用されます。 最小値が設定されていない場合は、空白 を返します。 |
| DataSourceInfo.Required | Boolean | 値はこの列に必要ですか? データ ソースによって設定されていない場合は、false を返します。 |
DataSourceInfo の例
DataSourceInfo(Accounts, DataSourceInfo.DeletePermission)
この例では、 可視化 プロパティに使用されています。 ログインしたユーザーがアカウントテーブル内のレコードの削除権限を持っているかどうかを確認します (ユーザーが持っているセキュリティ ロールによって決定されます)。 ユーザーが取引先企業レコードを削除する権限を持っている場合は、DataSourceInfo は true を返し、コマンドが表示されます。 それ以外の場合、コマンドはユーザーに表示されません。
Confirm 関数
この Confirm 関数は、現在の画面の上にダイアログ ボックスを表示します。 確認ボタンとキャンセル ボタンの 2 つのボタンが用意されており、デフォルトではそれぞれローカライズ バージョンの「OK」と「キャンセル」になっています。 ダイアログ ボックスが閉じられて関数が戻る前に、ユーザーは確認またはキャンセルする必要があります。 キャンセルは、ダイアログボタン以外にも、Esc キーや、プラットフォームに応じたジェスチャーでも選択できます。
Message パラメータはダイアログ ボックスの本体に表示されます。 メッセージが非常に長い場合は、切り捨てられるか、スクロール バーが表示されます。
OptionsRecord パラメーターを使用しダイアログ ボックスのオプションを指定します。 すべてのオプションがすべてのプラットフォームで利用できるわけではなく、「ベスト エフォート」方式で処理されます。
注意
以下のテーブルのオプションは、現在、キャンバス アプリでは使用できません。
| オプション フィールド | 内容 |
|---|---|
| 確認ボタン | 確認 ボタンに表示するテキスト、デフォルトのローカライズされた「OK」テキストを置き換えます。 |
| CancelButton | キャンセル ボタンに表示するテキスト、デフォルトのローカライズされた「キャンセル」テキストを置き換えます。 |
| 肩書き | ダイアログ ボックスの タイトル として表示するテキスト。 このテキストを表示するには、メッセージ フォントよりも大きく太字のフォントを使用できます。 この値が非常に長い場合、切り捨てられます。 |
| サブタイトル | ダイアログ ボックスの サブタイトル として表示するテキスト。 このテキストを表示するには、メッセージ フォントよりも大きく太字のフォントを使用できます。 この値が非常に長い場合、切り捨てられます。 |
Confirm 確認ボタンが選択されている場合は true を返し、それ以外の場合は false を返します。
Notify 機能を使用し、無視する必要のないバナーをアプリの上部に表示する。
注意
Notify 機能は現在、キャンバス アプリでは使用できません。
構文
確認 ( メッセージ [, OptionsRecord ] )
Message- 必須。 ユーザーに表示するメッセージ。OptionsRecord- オプション。 ダイアログの詳細オプションを提供します。 すべてのオプションがすべてのプラットフォームで利用できるわけではなく、ベスト エフォート方式で処理されます。 現時点では、キャンバス アプリでは、これらのオプションはどれもサポートされていません。
例
レコードを削除する前に、その削除を確認するようにユーザーに求める簡単な確認ダイアログ。 ユーザーが OK ボタンを選択しない限り、レコードは削除されません。
If( Confirm( "Are you sure?" ), Remove( ThisItem ) )
前の例と同じダイアログですが、タイトル テキストが追加されています。
If( Confirm( "Are you sure?", {Title: "Delete Confirmation"} ), Remove( ThisItem ) )
Notify 関数と同じようにメッセージを表示しますが、これはモーダルであり、続行するにはユーザーがボタンを選択する必要があります。 続行する前に、ユーザーがメッセージを確認することが重要な状況で使用します。 この場合、どのボタンが選択されたかは重要ではありません。
Confirm( "There was a problem, please review your order." )
モデル駆動型アプリに通知を追加する
通知機能 を呼び出すことにより、アプリ ユーザーに通知を表示できます。
Notify( "Model-driven app notification message" )
その他の例
URL を起動する
Launch("https://www.bing.com");
アクセス 1:N プロパティ
Self.Selected.Item.'Recurring Appointments'
関連レコードのプロパティを確認する
Self.Selected.Item.'Parent Account'.'Account Name'="parent"
Power Fx 関数ではサポートされていません
関数はサポートされていません
以下の Power Fx 関数は、現在、モデル駆動型アプリでのコマンドには対応していません。
- Back()
- Clear()
- Collect()
- Disable()
- Enable()
- Exit()
- InvokeControl()
- LoadData()
- Param()
- ReadNFC()
- RequestHide()
- Revert()
- SaveData()
- ResetForm()
- ScanBarcode()
- Set()
- SubmitForm()
- UpdateContext()
- ViewForm()
列挙型はサポートされていません
- BorderStyle
- Color
- Direction
- DisplayMode
- LayoutMode
- LayoutAlignItems
- AlignInContainer
- LayoutJustifyContent
- LayoutOverflow
- Font
- FontWeight
- ImagePosition
- Layout
- LayoutDirection
- TextPosition
- TextMode
- TextFormat
- VirtualKeyboardMode
- TeamsTheme
- Themes
- PenMode
- RemoveFlags
- ScreenTransition
- Align
- VerticalAlign
- Transition
- Overflow
- MapStyle
- GridStyle
- LabelPosition
- Zoom
- PDFPasswordState
- BarcodeType
- ImageRotation
- FormPattern
- ListItemTemplate
- LoadingSpinner
- Live
- TextRole
- ScreenSize
- Icon
- MessageSource
その他のサポートされていない領域
- Acceleration
- App
- コンパス
- 接続
- 環境
- ホスト
- 場所
- レイアウト
- ScreenSize
- ユーザー
参照
フィードバック
フィードバックの送信と表示