"特別な"検証を持つビジネスプロセスフローがあります。次の段階に進むためには、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トリッキーに従事しています...いくつかの欠点があります(エラーと警告の両方のアイコンがエラーに表示されています。検証が終わって次の段階に進むと、カスタムエラーメッセージが点滅して消えます。
これを行うには、任意のより良い方法:
私はカスタムメッセージを表示するには、この部分を取得しようとしていますか?私は独自のデフォルトメッセージを表示するときに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エンティティのためのものです。
あなたの現在の問題は、ユーザーが必要なフィールドに入力すると、次のステージに移動しますが、移動後に警告が表示されてからさらに5秒かかることです。 – Daryl
@Darylまあ、 'valid'が真で通知がクリアされても、それはさらに5秒間表示されて消えます。 –