2016-08-31 8 views
0

"特別な"検証を持つビジネスプロセスフローがあります。次の段階に進むためには、3つのステップの少なくとも1つを「はい」に設定する必要があります。ビジネスプロセスフローでカスタム警告メッセージを設定する

ここではステージの変更に関するハンドラがあります。少なくとも一つのtrue値を持っている - あなたが見るように、ステージが変更された後、前段の手順(1、位置の現在のステージ)があれば

var subStageRequirements = new Array(); 
subStageRequirements.push({ stage: 0, fields: ['new_is_project_scope_defined_substage'] }); 
subStageRequirements.push({ stage: 1, fields: ['new_is_demo_1_substage', 'new_is_demo_2_substage', 'new_is_selection_srv_outlined_substage'] }); 
subStageRequirements.push({ stage: 2, fields: ['new_is_proposal_substage', 'new_is_negotiation_substage'] }); 


function onStageChange(context) { 

    var stage = context.getEventArgs().getStage(); 
    var stageCategory = stage.getCategory().getValue(); 
    var direction = context.getEventArgs().getDirection(); 

    if (direction == "Next") { 

     //validate requirements on previous field... 
     var valid = false; 
     var req = subStageRequirements[stageCategory - 1]; 

     for (var i = 0; i <= req.fields.length - 1; i++) { 
      if (Xrm.Page.getAttribute(req.fields[i]).getValue()) { 
       valid = true; 
       break; 
      } 
     } 

     if (!valid) { 

      Xrm.Page.data.process.movePrevious(function (result) { 
       if (result != "success") { 
        alert('Error forcing back to previous step: ' + result + '. Have fun...'); 
       } 

       var messageArea = $(window.parent.document).find('.processWarningBar'); 
       messageArea.css('display', 'block'); 

       var textArea = $(window.parent.document).find('.processWarningBar-Text'); 

       textArea.attr('title', 'At least one sales sub-stage has to be selected to move on to next sales stage.'); 
       textArea.text('At least one sales sub-stage has to be selected to move on to next sales stage.'); 

       setTimeout(function() { 
        var messageArea = $(window.parent.document).find('.processWarningBar'); 
        messageArea.css('display', 'none'); 
       }, 5000); 
      }); 


     } 

    } 
} 

は、私が確認してください。

私はステージ(movePrevious)に戻り、いくつかのjQueryトリッキーに従事しています...いくつかの欠点があります(エラーと警告の両方のアイコンがエラーに表示されています。検証が終わって次の段階に進むと、カスタムエラーメッセージが点滅して消えます。

enter image description here

これを行うには、任意のより良い方法:

私はカスタムメッセージを表示するには、この部分を取得しようとしていますか?私は独自のデフォルトメッセージを表示するときにCRM自身が呼び出す機能について考えています。私はそれらをフェレットしようとしましたが、彼らは隠されているようです。以下の答えで提案されているように私はこれに検証コードを変更

EDIT

:今

if (!valid) { 

    Xrm.Page.data.process.movePrevious(function (result) { 
     if (result != "success") { 
      alert('Error forcing back to previous step: ' + result + '. Have fun...'); 
     } 

     Xrm.Page.ui.setFormNotification('At least one sales sub-stage has to be selected to move on to next sales stage.', 'ERROR', 'subStageMessage'); 


     setTimeout(function() { 
      Xrm.Page.ui.clearFormNotification('subStageMessage'); 
     }, 5000); 

    }); 

    return; 
} 
else 
{ 
    Xrm.Page.ui.clearFormNotification('subStageMessage'); //trying to hide it once the previous stage has passed validation, but error message is still shown... 
} 

問題は、メッセージが次の段階に移動する場合であっても表示されていることです。検証が失敗すると、ユーザーは前のステップに戻り、メッセージが表示されます。ユーザーが行方不明の手順を完了して次の段階に移動すると、メッセージを表示しているコードが実行されていなくても、メッセージは5秒間表示されます(0126)。これはOpportunityエンティティのためのものです。

+0

あなたの現在の問題は、ユーザーが必要なフィールドに入力すると、次のステージに移動しますが、移動後に警告が表示されてからさらに5秒かかることです。 – Daryl

+0

@Darylまあ、 'valid'が真で通知がクリアされても、それはさらに5秒間表示されて消えます。 –

答えて

0

私はNotify.jsを使うことにしました。このWebリソースを使用して同じ操作を実行して、通知を再出現の問題が解決されます。

if (!valid) { 

    Xrm.Page.data.process.movePrevious(function (result) { 
     Notify.add('<b>At least one sales sub-stage has to be selected to move on to next sales stage.</b>', 'WARNING', 'subStageMessage', null); 
    }); 

} 
else { 
    //if previous stage's steps were all valid, remove all notifications 
    Notify.remove(); 
} 
1

はい、良い方法が存在する:Xrm.Page.ui.setFormNotification

// Sample 
Xrm.Page.ui.setFormNotification("You have to complete required steps", "INFO", "messageId"); 
+0

これは本当に助けになりますが、私の質問で私の編集を見ることができますか?私は変なグリッチをしている。 –