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 に渡すことで
プロセスを切り替えることが出来ます。

例えば、以下の様に潜在顧客に対してロール別のプロセスがある場合、現在
ログインしているユーザーのセキュリティロールよりどちらのプロセスを
利用するかを指定することが考えられます。

image

以下のサンプルでは、ユーザーのロールを取得して、ロールにより利用
する業務プロセスフローを切り替えます。

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 型です。

まとめ

業務プロセスフローはとても強力で便利な機能です。フォームスクリプトで
操作が行えるようになったことで、自動化や表示/非表示の制御が柔軟になり
より使える機能になりました。

是非お試しください!

- 中村 憲一郎