Dynamics CRM 2015/Online 2015 更新プログラム SDK: フォームスクリプトでビジネスプロセスフローを操作する その 2
みなさん、こんにちは。
前回に続いて Microsoft Dynamics CRM 2015 および Microsoft Dynamics CRM
Online 2015 更新プログラム SDK の新機能から、フォームスクリプトでビジネス
プロセスフローを操作する方法の紹介をします。
参考: 業務プロセス フローのスクリプトを作成する
https://msdn.microsoft.com/ja-jp/library/dn817874.aspx
前回は業務プロセスフローの各要素を取得する方法を紹介しましたので、
今回は取得した要素を利用して何ができるかを紹介します。
利用する業務プロセスフローを切り替える
Xrm.Page.data.process. getEnabledProcesses で取得したプロセスの一覧から
利用したいプロセスを Xrm.Page.data.process. setActiveProcess に渡すことで
プロセスを切り替えることが出来ます。
例えば、以下の様に潜在顧客に対してロール別のプロセスがある場合、現在
ログインしているユーザーのセキュリティロールよりどちらのプロセスを
利用するかを指定することが考えられます。
以下のサンプルでは、ユーザーのロールを取得して、ロールにより利用
する業務プロセスフローを切り替えます。
function switchBPF() {
// ユーザーのロールを取得
var userRoles = Xrm.Page.context.getUserRoles();
// ユーザーのロールが複数ある場合はなにもしない
if (userRoles.length > 1)
return;
// 業務プロセスフロー一覧の取得
Xrm.Page.data.process.getEnabledProcesses(function (processes) {
for (var processId in processes) {
// セキュリティロールが営業担当者の場合
if (userRoles[0] == "b215f8d4-32ae-e411-80e3-c4346badf6d8") {
if (processes[processId] == "営業担当者向け業務プロセス")
{
// 業務プロセスフローの切り替え
Xrm.Page.data.process.setActiveProcess(processId, function () {
alert("業務プロセスフローを切り替えます。");
});
}
}
// セキュリティロールがマーエティング プロフェッショナルの場合
else if (userRoles[0] == "ac0df8d4-32ae-e411-80e3-c4346badf6d8")
{
if (processes[processId] == "マーケティング担当者向け業務プロセス")
{
// 業務プロセスフローの切り替え
Xrm.Page.data.process.setActiveProcess(processId, function () {
alert("業務プロセスフローを切り替えます。");
});
}
}
}
});
}
ステージの移動
通常ユーザーが手動で行うステージ間の移動を以下関数で自動化できます。
次に進む場合: Xrm.Page.data.process. moveNext
前に戻る場合: Xrm.Page.data.process. movePrevious
特定のステージに移動する場合: Xrm.Page.data.process.setActiveStage
※ setActiveStage を利用する場合、移動先ステージは同じエンティティである
必要があります。現在潜在顧客レコードを開いている場合に、営業案件に移動
することはできません。
ステージの移動を行う際には、現在の状況を確認する必要があります。
その場合は Xrm.Page.data.process. getActivePath 関数を利用できます。
戻り値はステージの集合体であり、各ステージのステータスが取得できるほか
各ステップの状況も確認できます。
詳細は以下のサンプルをお試しください。
サンプル: Xrm.Page.data.process.getActivePath
業務プロセスフローの表示をコントロールする
状況よって業務プロセスフロー領域を最小化しておきたい場合は、
Xrm.Page.ui.process. setDisplayState 関数を利用します。引数が Boolean 型
ではなく、文字列であることに注意してください。
折りたたむ場合
Xrm.Page.data.process.setDisplayState(“collapsed");
展開する場合
Xrm.Page.data.process.setDisplayState(“expanded");
また完全に業務プロセスフロー領域の表示を制御したい場合には、
Xrm.Page.ui.process. setVisible 関数を利用します。引数は Boolean 型です。
まとめ
業務プロセスフローはとても強力で便利な機能です。フォームスクリプトで
操作が行えるようになったことで、自動化や表示/非表示の制御が柔軟になり
より使える機能になりました。
是非お試しください!
- 中村 憲一郎
Comments
- Anonymous
January 31, 2017
The comment has been removed- Anonymous
February 16, 2017
The comment has been removed - Anonymous
February 16, 2017
Onchange 時は値が変更されている状態のため、業務プロセスフローを切り替わえられないと考えられます。フィールドの値により業務プロセスを変更したい場合は、業務プロセスフローの中で条件を追加し対応されることをお勧めします。- 河野 高也
- Anonymous