SOURCE

function load() {
    debugger;
    Xrm.Page.data.process.addOnStageChange(function () {
        var nextStageName = Xrm.Page.data.process.getActiveStage().getName();
        debugger;
        switch (nextStageName) {
            case "探客":
                break;
            case "案件分析":
                checkCofirmField("cr3bb_detectivecustomers")
                break;
            case "提案":
                checkCofirmField("cr3bb_caseanalysis")
                break;
            case "クロージング":
                checkCofirmField("cr3bb_proposal")
                break;
            case "契約":
                checkCofirmField("cr3bb_closing")
                break;
            case "PJ実行":
                checkCofirmField("cr3bb_contract")
                break;
            case "PJクロージング":
                checkCofirmField("cr3bb_pjexecution")
                break;
        }
    })
}

function checkCofirmField(fieldName) {
    var fieldVal = Xrm.Page.getAttribute(fieldName).getValue();
    if (fieldVal == 2 || fieldVal == 3) {
        return true;
    }
    else {
        Xrm.Page.data.process.movePrevious(function () {
            Xrm.Utility.showProgressIndicator("次の段階に進むことはできません");
            setTimeout(function () {
                Xrm.Utility.closeProgressIndicator();
            }, 3000)
        }
        );
        return false;
    }
}



function ProcessStatusChange() {
    Xrm.Page.data.process.addOnPreStageChange(function (context) {

        var objProcessContext = context.getEventArgs();
        var nextStageName = Xrm.Page.data.process.getActiveStage().getName();
        switch (nextStageName) {
            case "探客":
                var cr3bb_detectivecustomers_optionset = Xrm.Page.getAttribute("cr3bb_detectivecustomers_optionset").getValue()
                if (cr3bb_detectivecustomers_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "案件分析":
                 var cr3bb_caseanalysis_optionset = Xrm.Page.getAttribute("cr3bb_caseanalysis_optionset").getValue()
                if (cr3bb_caseanalysis_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "提案":
                   var cr3bb_proposal_optionset = Xrm.Page.getAttribute("cr3bb_proposal_optionset").getValue()
                if (cr3bb_proposal_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "クロージング":
                 var cr3bb_closing_optionset = Xrm.Page.getAttribute("cr3bb_closing_optionset").getValue()
                if (cr3bb_closing_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "契約":
                 var cr3bb_contract_optionset = Xrm.Page.getAttribute("cr3bb_contract_optionset").getValue()
                if (cr3bb_contract_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "PJ実行":
                 var cr3bb_pjexecution_optionset = Xrm.Page.getAttribute("cr3bb_pjexecution_optionset").getValue()
                if (cr3bb_pjexecution_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
            case "PJクロージング":
                var cr3bb_pjclosing_optionset = Xrm.Page.getAttribute("cr3bb_pjclosing_optionset").getValue()
                if (cr3bb_pjclosing_optionset == null) {
                    ErrorMessage("タスク情報が未入力のため、次の段階へ進むことはできません。");
                }
                break;
        }

    })
    Xrm.Page.data.process.addOnProcessStatusChange(function(){//更改结束的状态
debugger
var StageName = Xrm.Page.data.process.getActiveStage().getName();
if(StageName=="PJクロージング")
{
    var fieldVal = Xrm.Page.getAttribute("cr3bb_pjclosing").getValue();
     if (fieldVal == 2 || fieldVal == 3) {
         var cr3bb_pjclosing_optionset = Xrm.Page.getAttribute("cr3bb_pjclosing_optionset").getValue()
                if (cr3bb_pjclosing_optionset == null) {
                  //  ErrorMessage("タスク情報が未入力のため、終了むことはできません。");
                   // objProcessContext.preventDefault()
Xrm.Page.data.process.reactivateProcess();
return false;
                }
        return true;
    }else{
//ErrorMessage("終了むことはできません。");
Xrm.Page.data.process.reactivateProcess();
return false;
}
}
})
}

function ErrorMessage(message) {
    alert(message)

}
console 命令行工具 X clear

                    
>
console