根据值crm 2011更改字段的颜色

时间:2013-11-13 11:05:14

标签: javascript dynamics-crm-2011 dynamics-crm crm

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

当我保存表格时,该字段变为红色一秒钟,然后变回正常状态。我的Web资源正在使用表单的OnSave事件。当我在Age字段的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';
        }
    }
}

我还尝试在Age字段的ONChange事件中分别使用最后一个IF条件。这提示我保存记录两次。

2 个答案:

答案 0 :(得分:1)

你能否计算字段onChange?

e.g。

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

这样你就可以在onload上运行它,只有在值发生变化时才会改变。当您更改onSave的颜色时,表单将重新加载,您的更改将会丢失。

答案 1 :(得分:0)

我认为您的具体错误与以下事实有关:保存后,表单会刷新,丢失您设置的颜色。你也需要在onLoad上计算它。

Basically what happened is:
OnSave -> Calculate
Form refresh -> Lose the color
OnLoad -> you need to re-apply your script