モデル駆動型のステージボタンを非表示にする方法(JS)|次のステージへ進む、アクティブに設定【PowerApps】

モデル駆動型のビジネスプロセスフローを実装すると、
以下のようなステージボタンが既定でついています。
- 次のステージに進む
- アクティブに設定
- 終了
これらのボタンは、標準で設定されるため非表示にするには標準のコマンドからはできません。
そのため、JavaScriptを使用して非表示に設定する必要があります。
今回は、JavaScriptを使用して、フォームのステージボタンを非表示にする方法について紹介していきます。
非表示にするボタン
今回は、以下の3種類のボタンを非表示にします。



付録

このボタンを押すと、上記の3種類のボタンは再び表示されてしまいます。
なので、このボタンを非表示にする方法も併せて紹介します。
2種類のコードがあるので、どちらか好きな方を選んでください。
目次(クリックで読みたい部分にジャンプできます)
ステージボタンを非表示にする手順
ステージボタンを非表示にする方法の全体像をまず把握しておきましょう。
全体像
①JavaScriptコードを準備する(コピペ)
②モデル駆動型のフォームの「OnLoad」「OnSave」イベントに適用する。
この2つの手順で進めます。
JavaScriptコードを実装する必要があるので、
少し心配するかもしれませんが、コピペでそのまま行うことができますので、ぜひチャレンジしてみてください。

特にJavaScriptの知識が必要なわけではないです!
①JavaScriptコードを準備する(コピペ)
まずは、JavaScriptを準備します。
コードは既に準備済みなので、そのまま使用します。
「ステージボタンのみ非表示」「ステージボタン&モーダル開くボタンを非表示」にするかどちらかを選んでください。
ステージボタンのみを非表示するコード
function HideSetAcgtiveButton(executionContext) {
var formContext = executionContext.getFormContext();
formContext.data.process.addOnStageSelected(onStageClicked);
formContext.data.process.addOnStageChange(onStageClicked);
}
function onStageClicked(executionContext) {
var formContext = executionContext.getFormContext();
var hide = true;
var interval = null;
interval = setInterval(function () {
var element = parent.document.getElementById("MscrmControls.Containers.ProcessStageControl-businessProcessFlowFlyoutFooterContainer");
if (element != null && hide == true) {
hide = false;
element.style.display = "none";
clearInterval(interval);
}
}, 10);
}
ステージボタン&モーダル開くボタンも非表示するコード
function HideSetAcgtiveButton(executionContext) {
var formContext = executionContext.getFormContext();
//onStageClicked(executionContext);
formContext.data.process.addOnStageSelected(onStageClicked);
formContext.data.process.addOnStageChange(onStageClicked);
}
function onStageClicked(executionContext) {
var formContext = executionContext.getFormContext();
var hide = true;
var interval = null;
interval = setInterval(function () {
var element = parent.document.getElementById("MscrmControls.Containers.ProcessStageControl-businessProcessFlowFlyoutFooterContainer");
var element2 = parent.document.getElementById("MscrmControls.Containers.ProcessStageControl-stageDockModeButton");
if (element != null && hide == true) {
hide = false;
element.style.display = "none";
if (element2 != null) {
element2.style.display = "none";
}
clearInterval(interval);
}
}, 10);
}
このどちらかのコードを後々準備するPowerApps内のテキストエディタにまるっと貼り付けます。

では、ここからPowerApps内の操作になります。
②モデル駆動型のフォームの「OnLoad」「OnSave」イベントに適用する
では、PowerAppsのモデル駆動型アプリを開き、
ステージボタンを非表示にしたいフォームの編集画面を開きましょう。
⒈クラシックに切り替えて、フォームのプロパティを開く
そこで、メニュー内に以下のような「クラシックに切り替える」があるのでそちらを選択します。

すると、クラシック画面が開くので、「フォームのプロパティ」を選択します。

⒉ライブラリにコードを追加
では、ここで先ほど紹介したコードをPowerAppsに適用させていきます。
以下のフォームライブラリの、「追加」を選択します。

その後、「新規」を選択します。

適当な名前を入れます。(以降では、HideStageButtonというライブラリ名で説明します。)
種類には、スクリプトを選択します。
そして、テキストエディターを開き、先ほどのコードをそのまま貼り付けしてください。
入力したら、上書き保存&公開をします。


これで、コードがPowerAppsに格納され呼び出すことができるようになりました。
次にコードを呼び出す設定をします。
OnLoad,OnSaveに関数を適用
先ほど登録したライブラリから関数を指定します。
イベントハンドラーにて、
イベントを「OnLoad」にして、「+」をクリックしてください。

先ほど登録したライブラリ(HideStageButton)を選択し、関数に「HideSetAcgtiveButton」を設定します。


同様のことを、イベント「OnSave」でも行ってください!
最後に、フォームを保存・公開を押して完了です。


公開できたら動作確認してみてください。
ステージを選択したときにボタンが非表示になるはずです。(一瞬だけ出てしまうのはご了承ください。。)
まとめ
今回は、モデル駆動型のビジネスプロセスフロー内のステージのボタンを非表示にする方法について紹介しました。
JavaScriptを使って組み込みましたが、
そこまで難しくなく適用できたのではないでしょうか。
このようにJavaScriptを使用すると、さらにPowerAppsを発展させることができますので、是非試してみてください!
では、また!