我有一个出生日期字段和一个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条件。这提示我保存记录两次。
答案 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