1

我在 CRM 表单中有一个出生日期字段和一个年龄字段。保存记录时会计算年龄,如果年龄小于 18 岁,则年龄字段应变为红色。

当我保存表单时,该字段会变成红色一秒钟,然后又恢复正常。我的网络资源正在使用表单的 OnSave 事件。当我在年龄字段的 ONChange 事件上使用更改颜色代码时,我必须保存表单两次以显示它变为红色。

我如何摆脱这种保存表单的两次?这是我的代码:

function setAge() 
{
    var DOB = Xrm.Page.getAttribute("inmate_dob").getValue();
    var Today = Xrm.Page.getAttribute("inmate_bookingdate").getValue();
    Today.setHours(0, 0, 0, 0);
    var db = 0;
    if(DOB > Today )
    {
        alert("Please Enter Genuine BirthDate !!!");
        Xrm.Page.getAttribute("inmate_dob").setValue(null);
    }
    else
    {
        db = Today.getFullYear() - DOB.getFullYear();
        var x = Today.getDate() ;
        var y = DOB.getDate() ;
        var a = Today.getMonth() + 1;
        var b = DOB.getMonth() + 1;
        if((a < b) || (a==b & x < y))
            db=db - 1;
        }
        var result = Xrm.Page.getAttribute("inmate_age").setValue(db);
        if (db <18)
        {
            document.getElementById("inmate_age").style.backgroundColor = 'red';
            document.getElementById("inmate_age_c").style.backgroundColor = 'red';
        }
    }
}

我还尝试在年龄字段的 ONChange 事件上单独使用最后一个 IF 条件。这提示我保存记录两次。

4

2 回答 2

1

你不能计算字段 onChange 吗?

例如

Xrm.Page.getAttribute('inmate_age').addOnChange(function() {
    var theyAre18 = yourFunctionToCalculateIfTheyAre18OrNot();
    if (theyAre18) {
        //make the background white
    }
    else {
        //make the background red
    }
});

这样,您可以在加载时运行它一次,并且仅在值更改时才更改。当您更改 onSave 的颜色时,表单无论如何都会重新加载,并且您的更改将丢失。

于 2013-11-13T12:02:50.997 回答
0

我认为您的具体错误与保存后表单刷新,失去您设置的颜色有关。您也需要在 onLoad 上计算它。

Basically what happened is:
OnSave -> Calculate
Form refresh -> Lose the color
OnLoad -> you need to re-apply your script
于 2013-11-13T23:04:30.153 回答