【问题标题】:Set custom warning message in business process flow在业务流程中设置自定义警告消息
【发布时间】:2016-08-31 19:20:24
【问题描述】:

我有一个具有“特殊”验证的业务流程。必须将 3 个步骤中的至少一个设置为“是”才能继续下一阶段。

这是我的舞台变换处理程序。

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);
            });


        }

    }
}

如您所见,一旦阶段发生变化,我会检查前一阶段(当前阶段 - 1,就位)中的步骤是否至少有一个 true 值。

如果没有,我会后退一个阶段 (movePrevious),然后进行一些 jQuery 诡计……这有一些缺点(错误和警告图标都显示在错误中,我必须自己隐藏错误 div ,有时当验证通过并进入下一个阶段时,自定义错误消息会闪烁并消失)。

我正在尝试让这部分显示自定义消息:

有更好的方法吗?我正在考虑 CRM 在显示自己的默认消息时调用的函数。我试图将它们找出来,但它们似乎隐藏得很好。

编辑

我按照以下答案的建议将验证码更改为:

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 秒 (??)

我正在使用 CRM 2016,这是针对商机实体的。

【问题讨论】:

  • 那么您当前的问题是,一旦用户填写了必填字段,他们就会导航到下一个阶段,但是在导航到清除自身后警告需要额外 5 秒?
  • @Daryl 好吧,即使valid 为真并且通知被清除,它也会再显示 5 秒然后消失。

标签: javascript jquery dynamics-crm-2013 dynamics-crm-2016


【解决方案1】:

是的,存在更好的方法:Xrm.Page.ui.setFormNotification

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

【讨论】:

  • 这真的很有帮助,但你能看看我在我的问题中的编辑吗?我遇到了一个奇怪的故障。
【解决方案2】:

我决定使用Notify.js,通过使用这个网络资源做同样的事情,重新出现通知的问题就解决了。

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();
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多