モデル駆動型アプリのコマンドバーのカスタマイズ



# コマンドバーとは
コマンドバーとは、モデル駆動型アプリの上に位置するコマンド、ボタン群のことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/790cf7a7-c743-c707-a244-71d8e435e5fc.png)

デフォルトでよく使われるコマンドは用意されていますが、用途によって、コマンドを追加したり、並べ替えたり、いらないコマンドを消したりもしたいですよね。

今回はモデル駆動型アプリのコマンドバーのカスタマイズについてまとめます。

コマンドバーのカスタマイズ方法として大きく2つあります。
1. [コマンドデザイナーの使用](https://qiita.com/skuramoto/items/acde7968aba1b1e01f0c#1-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%81%AE%E4%BD%BF%E7%94%A8)
2. [リボンワークベンチの使用](https://qiita.com/skuramoto/items/acde7968aba1b1e01f0c#2-%E3%83%AA%E3%83%9C%E3%83%B3%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%99%E3%83%B3%E3%83%81%E3%81%AE%E4%BD%BF%E7%94%A8)

XMLファイルをダウンロードして、直接コーディングしてカスタマイズもできますが、上の２つの方法を使うことで、ノーコードでそれを補うことができるので今回はこちらを紹介します。

難易度が低い順番で見ていきます。

# 1. コマンドデザイナーの使用
## 1.1 概要
こちらはデフォルトでアプリデザイナーから開くことができるツールです。
**新しいコマンドを追加する**のはこのコマンドデザイナーでできますが、**すでにあるコマンドに対する操作は「リボンワークベンチ」を使わないとできません。**

## 1.2 開き方

まずモデル駆動型アプリの編集画面を開きます。
編集画面の左のサイトマップで、編集したいテーブルの横の三点リーダー[...]をクリックし、[コマンドバーの編集]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6e8c5212-c517-68c8-666a-3bf53832a044.png)

以下のそれぞれで別のコマンドバーを設定することができるので、編集したいコマンドバーを選択します。
- メイングリッド
- メインフォーム
- サブグリッドビュー
- 関連ビュー

[編集]ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a4ef0591-25cc-627c-35d3-8c3fe43ffa2d.png)

こちらで開かれるのがコマンドデザイナーです。
（コマンドデザイナーでは、デフォルトであるコマンドは右の詳細設定が触れないようになっています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/21a8d8a8-96b1-067f-dbcf-ef692ea27638.png)


## 1.3 コマンド設定方法
[新規]>[コマンド]ををクリックします。
（他にもドロップダウンや分割ボタンも設定できます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/55f4e35c-a415-ddce-bb1d-c042124946c2.png)

新しいコマンドが追加されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/4762117f-31bf-afa9-b5b0-fbe7fe21dcdb.png)

画面右側の設定項目を入力します。
- **ラベル**：表示されるテキストラベル
- **アイコン**：環境にデフォルトで用意されている**アイコン**やローカルにあるファイルを上げて使うこともできる**Webリソース**を選択することができる

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ca81f50a-b854-90d9-7605-41bc3e512d66.png"width=50%>

アクション：計算式(Power Fx)かJavaScriptを選ぶことができる
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/21c01dbe-483a-756d-9be6-02d42e0d0b2a.png"width=50%>
### 計算式(Power Fx)を選んだ場合

上の数式バーで編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/258d2f79-7d3e-6088-1e5e-495c30857a21.png)

ここで使える関数はキャンバスアプリなどで使える関数式Power Fxです。Power Fxを使用した操作は以下を参照ください。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/formula-reference

### JavaScriptを選んだ場合
ローカルで編集したJSファイルをリソースとしてアップロードします。

[ライブラリの追加]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0fb4af7b-7996-300b-15fa-311a36927ba8.png"width=50%>

[新しいWebリソース]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e89ee5c5-323e-da73-b065-386e31be1919.png"width=70%>

[ファイルを選択]ボタンをクリックし、jsファイルを選択します。
表示名、名前（→英語）、種類（→JavaScript(JS)）を入力し、[保存して公開]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/055ff9d3-aba2-5ea1-10e3-0f95a4d81ca7.png"width=50%>

[JavaScriptライブラリの追加]で、公開したリソースを選択し、[追加]ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5ce73d6b-f342-d8e9-403f-7656bdb58ebf.png)

[関数名]、[パラメーター]にjsファイル内で設定した関数名、パラメーターを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e7328c38-cc60-2754-5964-ea44fcdeb5c1.png)


以上のように新しいコマンドを追加して、その動作を編集することができます。

最後に保存と公開をして、編集終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7de3024a-b7a3-1a92-5e70-61b98a710459.png)


# 2. リボンワークベンチの使用
## 概要
リボンワークベンチを使用することで、すでにあるコマンドに対してカスタマイズすることができます。
こちらのツールは、ローカルにダウンロードして使います。

## 2.1 XrmToolBoxの事前ダウンロード
XrmToolBoxというDataverseの開発者ツールがあり、この中でリボンワークベンチを使用することができます。
https://www.xrmtoolbox.com/
こちらからダウンロードしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0f7ec6c8-95c6-aa66-9b21-f0c0b6c0a306.png)

## 2.2 ソリューションを作成

カスタマイズしたいテーブルをまとめるソリューションを個別で作ります。
[ソリューションを作成する方法](https://qiita.com/skuramoto/items/bb053bdc8b12b771c6e4#%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9)

ソリューションを作成したら、そのソリューションを開いて、
[既存を追加]>[テーブル]で
コマンドバーをカスタマイズしたいテーブルを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a87e49f9-a171-9272-0ab1-4daf0bbed2ed.png)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/abad2727-0897-3f36-4a7b-29f7378118e2.png" width=70%>


オブジェクトなど**何も選ばない**で追加します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0a6e5cb0-2769-83a0-7dc8-7b28bb2bbb7a.png" width=80%>

## 2.3 XrmToolBoxからリボンワークベンチを使用する
## 2.3.1 リボンワークベンチのインストール
ダウンロードしたファイルを展開し、フォルダの中のexeファイルをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/31234a4a-2e43-be10-9133-cf196981f391.png" width=60%>
XrmToolBoxが起動します。
開いたら、スタートページで[Open Tool Library]を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bf6e92e8-c231-0228-46aa-a0c978510960.png" width=80%>
開いたTool Libraryで
Searchに「Ribbon」などと入力し、Ribbon Workbenchを選択、[Install]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9f423e97-615c-91b5-2448-1a3e1ed6bdd9.png)

[I Accept]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d50da886-128d-4195-f250-a1f770a31337.png)

チェックマークがついたら、[Close]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/48f7ce43-abff-8374-2c38-88f87be8e4e1.png)

[Tools]タブでRibbon Workbenchを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c013a2dc-0c98-918b-a0dd-38225ce663f2.png)

### 2.3.2 環境接続
新しい環境につなぎますかとメッセージが表示されるので、「はい」を選びます。
（すでにつなげたことのある環境であれば不要）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/80057241-15ca-e063-0a0a-2fc49f74af92.png)

[New connection]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/3b838bae-3e15-51d5-3401-0f54aeed510f.png" width=60%>

[Dataverse]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/da98fd96-4a69-dd55-82ca-9ddafb76acbe.png" width=60%>

[Open Microsoft Login Control]をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1991d9f4-3fda-4f8b-3716-4be37e131561.png" width=60%>

[Office 365]>[Display list of available organizations]>[Login]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/db0a29d4-9720-3a10-b32f-94cc57906338.png" width=50%>

Microsoftアカウントのメールやパスワードをいれてログインします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6af8b7d4-b9d8-62be-24e2-289819c3ee6d.png" width=60%>

使いたい環境を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/fd529d40-01ca-5f6d-0206-236065617b0b.png" width=60%>

無事、成功したらコネクションに名前を付けて[Finish]ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bf9d881f-cbff-f7ce-fe8c-fb01726f4bf0.png" width=60%>

[Continue]をクリックします。
先ほど用意したソリューションを選択し、[OK]をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9e9c43ba-ddb6-a96a-1707-c2c095c2f3a9.png" width=60%>

少し待つと、リボンワークベンチの画面が開きます。

### 2.3.3 リボンワークベンチの操作方法
画面の構成は以下のようになっています。
- **上３つのセクションで、コマンドバーのコマンドを表示**
スクロールするとずらーっとコマンドが並んでいます。
表示条件などがあるためすべてがアプリで表示されるわけではないですが、含まれてるコマンドがこちらにはすべて表示されます。
- **画面下半分はカスタマイズ内容や詳細を表示**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a0c985c0-0a17-613c-24af-49a727cd953e.png)


実際の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c3a3557b-4e1c-e141-a12c-98f87bf3746d.png)

ではカスタマイズしていきましょう！

左下でEntityをカスタマイズしたいテーブルに設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7d9c7231-8c84-d31d-edc1-72b158e4f8d2.png)


一つのコマンドを右クリックするとメニューが出てきます。
設定できる項目は以下のようになってます。
- コピー・ペースト
- ボタンのカスタマイズ
- 非表示
- コマンドのカスタマイズ

よくあるのが、デフォルトのコマンドを消したいという要望ですが、そういった場合は「Hide」にすると、非表示にすることができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ea4a920e-d455-405e-4e50-268a6b0ade01.png" width=70%>


[Customize Button]を選択すると、下のセクションで設定ができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7f4ec3d3-d4cc-9ce7-1232-279308ec9d93.png)

例えば、ラベルやタイトルを変えてみます。
「New」→「新規注文」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c5ede5e3-fcf5-cc38-73b8-69f16b5f50b7.png)

[Publish]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7c23d12f-258c-303f-ecfa-83925a411eaf.png)
ここで本当に公開してよいかポップアップが出てきます。
問題なければ、[OK]をクリックします。
（直接公開してしまうので、もし変更があって困るようでしたら、公開する前にバックアップを取っておいてください。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/67e67250-bd9f-416e-5307-8cd3c22f76fa.png" width=50%>

以下のようなメッセージが表示されますが、アプリ側のタイムアウトなので、問題ないことが多いです。
[OK]で消します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/52df57ce-6762-7e37-ef98-6afcc5a50c84.png" width=40%>


実際のモデル駆動型アプリで確認します。（反映されるのに時間がかかります。）
リフレッシュボタンを何度かクリックして更新してると、、、
コマンドバーの変更が反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2526830c-23ef-9ff6-daa4-aa666f128d18.png)



他にも、
[COMMANDS]を選択するとアクション(JavaScript)を設定したり、表示ルールを設定することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a864d750-e30b-830c-6078-934c51cfe8c7.png)

# まとめ
今回はコマンドバーのカスタマイズ方法についてまとめました。
コマンドデザイナーでできる範囲とコミュニティツールでできる範囲をうまく使い分けてみてください。