今回はエンティティリスト、エンティティフォームを扱う上で絶対覚えておきたい設定。
アクションボタンのフィールタ条件について語ります。
ボタンアクションでできること
エンティティリストからエンティティフォームを呼び出す方法は、前回取り上げました。
アクションとして指定できることは以下の通り。
作成
これは文字通り新たにレコードを作成します。
エンティティに対して作成権限がないと表示されません(エンティティのアクセス許可で設定してね)。
ダウンロード
こちらはエンティティリストに表示されている一覧をExcelでダウンロードできる機能です。
Dynamics上から行えるExcelのエクスポートと違うところはデータテーブルが含まれていないこと。
Dynamicsのエクスポート機能はこのようにデータテーブルが定義されるんですが、
このダウンロード機能はデータテーブルなしの一覧で出力。
ちなみに、エクスポートはページングされていてもまとめて出力ができ、エンティティリストの検索条件で絞りこんだ場合は、絞りこみをした状態(現在リストに表示されている状態)のものがエクスポートされます。
そのため、エクスポートしたものをそのままインポートにかけることはできません。
そもそも、ポータルユーザはインポート出来ませんけどね。
詳細
こちらは詳細画面のエンティティフォームやWebページを表示します。
詳細を設定すると、コマンドに現れるだけでなく、エンティティリストの1列目にリンクが貼られるようになります。
編集
こちらは既存レコードを編集します。
このアクションを指定した場合は、エンティティフォーム(サブウィンドウ) or Webページ(画面遷移)のどちらかでレコードの編集を行うことになります。
エンティティに対して、編集権限がないと表示されないアクションです。
削除
こちらは既存レコードを削除するアクション。
確認メッセージの有無等はありますが、エンティティフォームなどを経由しないので、いきなりレコードが消えます。
物理削除になるので、基本元に戻せません。
取り扱い注意!
論理削除したい場合は、下記非アクティブのアクションを使いましょう。
ワークフロー
直接ワークフローを実行することができます。
ワークフローでステータスの変更やメールの送信などが実施できるので、これを定義することでポータルの使い勝手がグッと高くなると思います。
なお、ここで呼び出せるワークフローは同じエンティティで定義されたオンデマンドプロセス(自分で実行する)に限られるので、ワークフロー設定の際は忘れずに設定するようにしましょう。
関連レコードの作成
指定したレコードのの子レコードを作成することが出来ます。
ボタンを表示させるには、子レコードのエンティティの作成権限だけでなく、親レコードの追加先権限、子レコードの追加権限が付与されている必要があります。
アクティブ化・非アクティブ化
レコードのアクティブ化、非アクティブ化が可能です。
表裏一体であり、アクティブ状態では非アクティブボタンが表示され、非アクティブであればアクティブボタンが表示されます。
つまり、同時に表示されることはないです。
ここ重要!ボタンアクションのフィルター条件を使いこなせ
これを書くためにポータルのブログを書いたといっても過言ではありません。
上記で追加したボタンアクションは、条件により表示/非表示を切り替えることが出来ます。
例えば、取引先担当者のステータスを以下の3状態で定義しているとしましょう。
- 仮登録
- 登録中
- 一時保存
ステータスの遷移はシンプルに「一時保存」→「仮登録」→「登録中」と遷移していくルールとします。
常識的に考えれば、ステータスによって、振る舞いを変えていくのが普通です。
例えば、一時保存のときは、編集が可能だが、登録中であれば編集は不可。
登録中のものは削除が出来ないといった具合に。
ワークフローでステータスを「仮登録」にするフローを作ります。
それをワークフローのアクションとしてエンティティリストに配置します。
デフォルトだと名前が分かりづらいので、ボタンの名前は「仮登録」としておきましょう。
今の時点ではこのような形で表示されます。
ただ、この状態だとどのステータスに対しても「仮登録」ワークフローが表示されることになります。
ステータスが「一時保存」の状態にだけ、ボタンを表示させるにはフィルター条件を使用します。
エンティティリストの各アイテムの設定欄にフィルター条件がありますので、フィルター条件をこのように入力してください。
(入力の仕方は後述します)
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> <entity name="contact"> <filter type="and"> <condition attribute="statuscode" operator="eq" value="100000002" /> </filter> </entity> </fetch>
エンティティリストを保存し、ポータルで確認してみると、ステータスが「一時保存」の時は、
このように「仮登録」ワークフローが表示されていますね。
一方、「一時保存」以外のステータスは、
このように表示がなくなり、ワークフローが実行できないようになっています。
このようにフィルター条件を駆使することで、ステータス管理を行うことができます。
では、後回しにしていたフィルター条件の入力について。
この入力はFetchXMLの入力に基づきます。
FetchXMLなんて分かんないよ〜って方、安心してください!
僕も完璧に分かってないので。
でも、簡単に作れます。
まずは、Dynamicsから画面上部の「高度な検索」ボタン(ろうとのアイコン)を押しましょう。
高度な検索の設定画面に入るので、ビューを作る感覚で、ボタン表示条件を設定していきます。
条件を設定したら、「Fetch XMLのダウンロード」を押します。
ローカルにXMLファイルがダウンロードされるので、エディタ等で開きましょう。
こいつがビューを出すためのFetchXMLになります。
ボタンにフィルター条件を入力する場合は、列やソートの定義はいらないので(入れても一応動くけど公式な方法じゃないらしい)、attributeタグとorderタグを抜いたものをフィルター条件にセットしましょう。
FetchXMLもそうですが、コード値をいちいち覚えるのも大変なので僕はこの方法でやっています。
Microsoftのドキュメント見てもフィルター条件の入力の仕方までは載ってなかったので見つけるのしんどかった(汗)。
今回はエンティティリストでの説明でしたが、エンティティフォームのアクションも同じような設定で大丈夫です。
ここまで使いこなせれば、だいぶポータルマスターに近づいたと言えるでしょう。
コメント