Power Apps キャンバスアプリで Dataverse 選択肢フィールドでソートするには
キャンバスアプリで Dataverse を使用しているときに、選択肢フィールドでソートしたい場合について。
普通に試すと、ソートができない
キャンバスアプリで選択肢フィールドを対象にSort()関数などでソートしようとすると、どうにもうまくいきません。通常のフィールドのように指定しても、エラーが出てしまいます。
現状私が確認した限りでは、Sort()やSortByColumns()でソートをする方法はなさそうです。
ビューでソートする
では詰みかと思いきや、そうでもありません。
Dataverseの ビュー の機能を使用すると、ビューで設定したフィルタ条件とソート順でキャンバスアプリにデータをもってくることができます。これを利用することで実現可能です。
手順
細かい手順は省きますが、ざっくり2ステップでソート済みデータをキャンバスアプリに持ってくることができます。
・ソート順を指定したビューを作成
・作成したビューをキャンバスアプリから参照
上記の手順で選択肢によるソートが実装できます。
動的にフィルタもしたいんだけど・・・
ユーザーからの入力値によって動的にしたい場合、ビューでは少し弱いです。できないわけではないんですが・・・。
全てのパターンをビューで網羅するのは厳しいので、その中から実際にユーザーが利用するパターンを洗い出して限定的にビューで実装する方向で一度検討してみてはいかがでしょうか。
蛇足:ソート用フィールドを追加するのは?
ソート用にフィールドを用意して保持しておく方法もあると言えばありますが、あまりおすすめできません。選択肢の中身を変えたときに対応させるのが面倒になりますし、メンテを忘れそうです。
蛇足:委任非対応でよければなんでもあり
コレクション化しているものを対象にする場合など、委任に対応できないことが問題でない場合は以下のようにするとソートができます。
Sort( colItems, Text( OptionSetField ), Ascending ) |
ただ、上記の例だとテキストに変換してソートしてしまうため、本来の並びと異なる可能性があります。
ソート順を変えたくない場合は、ソート順参照用のコレクションを作成しておき、
ForAll( Sequence(CountRows(Choices( ABC_Set)),1,1) As Index, Collect( colOptionSets, { Value:Last(FirstN(Choices( ABC_Set),Index.Value)).Value, Text:Text(Last(FirstN(Choices( ABC_Set),Index.Value)).Value), Index:Index.Value } ) ) |
ItemsではAddColumns()を使用してソート用インデックスフィールドを追加したテーブルを用いてソートすることで、ソートが可能です。が、ちょっと面倒。
SortByColumns( AddColumns( Test_Temp As Source, "OptionsetIndex", LookUp(colOptionSets,Value = Source.OptionSetField).Index ), "OptionsetIndex", Ascending ) |
そもそも委任に対応できていないので、使い所も限られてきます。一応ご紹介まで。
まとめ
・ひとまず、ビューを試してみるのがおすすめ。
・動的なフィルタには弱い。利用パターンを洗い出してみては。
・委任非対応でよければ、キャンバス側での実装はいくつか方法がある。が、やや面倒。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport
Dataverse for Teams のフローを複製するには
Dataverse for Teams でのフローの複製について整理してみます。
Dataverse for Teams のフローは複製できない?
まず、前提として普通に Dataverse for Teams のフローを複製しようとすると、うまくいきません。
フローを選択して[ 名前をつけて保存 ] から保存、複製しても、Dataverse for Teams 上に表示されません。
どこかに複製されたのか、されていないのか。よくわからない状態になってしまいます。
複製したフローはどこにいった?
実はフローの複製自体はされています。
どこに保存されているかというと、環境内の[マイフロー]に保存されています。
これは、通常の Power Automate ポータルから確認できます。
どうすれば Dataverse for Teams に表示できる?
Dataverse for Teams に表示されるフローと表示されないフローの違いはなにか?
答えは、特定のソリューションに含まれるか否か、です。
Dataverse for Teams に表示されるアプリ、チャットボット、フローはすべて [ Common Data Services Default Solution ] という名前のソリューションに含まれています。
逆に言えば、このソリューションに含めることができれば、Dataverse for Teams 上に表示させることができます。
Common Data Services Default Solution に追加するには
クラウドフロー一覧から、[ Power Apps で開く ] からソリューション画面に移動します。
移動先は Common Data Services Default Solution の管理画面です。ここからソリューションに含めることができます。
画面上部の [ 追加 ] から、望みのフローをソリューションに追加することができます。
フローを追加すると、一覧に表示されるようになります。
フローがソリューション外部の一覧にないことも・・・
残念ながら、全てのフローがこの方式で複製できるわけではありません。
一部のフローはソリューションへの追加に対応しておらず、一覧に出てこないことがあります。
たとえば、
Power Automate ボタントリガーを使用しているフロー
Power Apps トリガーを使用しているフロー
などはソリューションに含めることができないため、複製できないということになります。
(意外にもPower Apps V2トリガーは対応しています。)
子フローの複製には対応できない
Power Apps V2 トリガーはソリューションに含めることができるので、子フローも複製できるかと思いきや、フローを作成して保存するときにエラーが発生してしまいます。
ソリューションで新規作成したもののみ、子フローとして使用することができます。
結局、この方法で複製したフローはどうやっても子フローとして利用することはできません。
複製できないときの回避策 トリガーを一時的に変更する
トリガー次第で外部からソリューションに含められるかどうかが決まります。
なので、複製時だけトリガーを変更し、力技で複製する方法が取れるかもしれません。
こういうこともあるので、日頃からトリガー変更に強い作り方をしておくといいかもしれませんね。
複製できないときの回避策 アクションのコピーでコピーする
子フローとして利用したいフローを複製したい場合は、今回の方法ではどうやっても対応できないと思われます。
どうしてもDataverse for Teams からの新規フロー作成が必要になります。
代案として、スコープとアクションのコピーが使えるかもしれません。
予めフロー作成時に全てのアクションをスコープに含めておけば、アクションのコピーで簡単に全体をコピーすることができます。
苦肉の策ですが、これらで対応しましょう。
まとめ
・普通のやり方では、Dataverse for Teams のフローを複製することができない。
・実はマイフローに複製されている。
・表示させるには、Common Data Services Default Solution に含める必要がある。
・ソリューションに追加できないフローもあるので、注意。
・最後は力技で解決。
ということで、Dataverse for Team のフローの複製についてでした。ご参考になれば幸いです。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport
Power Apps 文字や画像を斜めに表示する【解説動画付き】
Power Apps では標準の機能で斜めに文字や画像を表示する機能は付いていませんが、HTMLテキストを使用すると斜め文字を表現することができます。
完成イメージ
こんな感じに斜め表示が出来ます。
上記サンプルは以下の手順で作成できます。
作成手順
HTMLテキストを挿入
・挿入 > テキスト > HTMLテキスト とクリックします。
フォントサイズを大きくする
HtmlText.Size
60
表示テキストを入力
表示したいテキストを<p>タグで囲んでHtmlTextプロパティに入力します。
HtmlText.HtmlText
"<p>おすすめ動画!</p>"
テキストをdiv で囲む
HtmlText.HtmlText
"<div>
<p>おすすめ動画!</p>
</div>"
style="" "" を追加してスタイル指定の準備
HtmlText.HtmlText
"<div style="" "">
<p>おすすめ動画!</p>
</div>"
transform: rotate() で文字を斜めにする
HtmlText.HtmlText
"<div style="" transform: rotate(20deg); "">
<p>おすすめ動画!</p>
</div>"
background-color: で表示領域を可視化
文字を斜めにすると、表示領域からはみ出してしまいます。
微調整が必要なので、わかりやすいように背景色を設定します。
HtmlText.HtmlText
"<div style="" transform: rotate(20deg); background-color: red; "">
<p>おすすめ動画!</p>
</div>"
はみ出た部分を調整
width や padding を使用してはみ出た部分が収まるように調整します。
HtmlText.HtmlText
"<div style=""
transform: rotate(20deg);
background-color: red;
width: 600px;
padding: 0px 0px 0px 0px ;
"">
<p>おすすめ動画!</p>
</div>"
背景色を削除
調整が完了したので、背景色を削除します。
HtmlText.HtmlText
"<div style=""
transform: rotate(20deg);
width: 600px;
padding: 0px 0px 0px 0px ;
"">
<p>おすすめ動画!</p>
</div>"
完成!
うまくいっていれば画像のようにできます。
[Advanced] 逆向きも可能
rotate(20deg) の数値をマイナスに設定すれば逆向きも可能です。
[Advanced] 画像も対応可能
画像も斜めにすることが出来ます。
[Advanced] スライダー連動で操作可能
rotate(20deg) の値をスライド値と連動させれば、スライダーで回転させることもできます。
[Advanced] タイマーでアニメーション可能
タイマーの値や変数を経由して連動させれば、アニメーションもさせることができます。
解説動画もあります
Youtubeに解説動画をアップロードしています。こちらも合わせて参考にしてみてください。
まとめ
横幅や余白の調整が少し面倒ですが、このように斜めに表示させることが可能です。
ただ、少々手間がかかるため乱用は避けたいですね。もっと他に優先するべき機能がないか思い返してもいいかもしれません。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport
Power Apps から Dataverse 参照型フィールド付きレコードを登録する
Microsoft Dataverse の参照型フィールドに対しての登録、更新は少しクセがあります。
よくわかっていないひとは「え・・・?できないの・・・?」みたいに思ってしまうかもしれませんが、もちろんそんなことはありません。バリバリ出来ます。
参照型フィールドに入れるべき値
Power Apps から 参照型フィールドに対して登録、更新をかける場合、レコードごと指定します。
Gallery.Selected や LookUp()、ComboBox.Selected など、参照先テーブルから選択や検索してきたレコードを指定します。
サンプルのデータ構成
以下の例では、
・TestParent
・TestChildA
2つのテーブルを使用しています。
TestChildA には TestParent の参照フィールドが定義されています。という状態です。
データから作成の例
"データから作成"で作成した場合、自動生成で以下のように設定されます。
ComboBox でレコードを選択し、選択されたレコードをそのまま Update で指定していることが確認できます。
DataCard.Update
DataCardValue5.Selected
Patch()で登録する場合
Patch() で登録する場合も、以下のように登録することができます。
Collect()で登録する場合
Collect() も同様に登録することができます。
LookUp() でも可能
LookUp()でも問題なく登録可能です。
Gallery.Selected でも可能
Gallery.Selected でも問題なく可能です。
まとめ
参照型フィールドの登録、更新には参照先のテーブルのレコードを指定します。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport
Power Apps から直接 Teams ユーザーにチャットを送れるか?
Power Apps x Teams 連携として、ユーザーに対して Power Apps から直接チャットを送る方法について考えてみます。
コネクタのリファレンスを確認
リファレンスを確認すると、[ PostMessageToConversation ]で実装できそうです。
チャットでメッセージを送信する
https://docs.microsoft.com/en-us/connectors/teams/#post-message-in-a-chat-or-channel
Type : dynamic の箇所が怪しい雰囲気を感じますね。
Power Apps で実装してみる
Power Apps で確認してみると、3つ必要な引数が2つまでしか指定できません。
Type : dynamic の部分が指定できない状態です。
Power Apps は動的スキーマに対応していない
Docs を探してみると、動的スキーマには対応していないという記述がありました。
Overview of canvas-app connectors for Power Apps - Actions
https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/connections-list#actions
このように、Power Apps は動的スキーマに対応していません。
同様に引数によって動的に続く引数が変わるようなアクションは実行できないようです。
結論
Power Apps 単体ではユーザーにチャットを送信することは(標準機能では)できない。
代案
Power Automate を利用すると、フローボットとしてユーザーにチャットを送信できます。ボットとしてでよければ、こちらで代用しましょう。
場合によっては Graph API を利用
どうしてもやりたい場合は、Microsoft Graph API の利用を検討します。
チャットでメッセージを送信する
https://docs.microsoft.com/ja-jp/graph/api/chat-post-messages?view=graph-rest-1.0&tabs=http
ただ、少々手間が掛かりそうです。
無理にチャット機能を実装するより、別のアプローチを検討すべきかもしれません。
機能が無いということは、そういった使い方を想定していない、もしくはして欲しくない可能性があります。それに反するとドツボにはまる可能性が高いので、個人的にはあまりお薦めはできません。
まとめ
残念ながら Power Apps 単体でユーザーに対して Teams チャットを送信することは難しそうです。
私であれば Power Automate を利用した形で妥協すると思います。
Graph API は要件にもよりますが、なるべく使わない方向で検討する気がしますね。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport