我正在尝试在Birt中实现Date参数的验证。 但是脚本没有按预期执行。
例如:
ParameterName:StartDate 类型:字符串
验证长度:
beforeFactory中的验证脚本:
错误代码= 0; var str = params [" StartDate"]。value; if(str.length!= 10) { 错误码= 1001; }
报告布局中的HTML文本:
//错误代码
var ERR_INVALID_DATE_FORMAT = 1001; var ERR_INVALID_START_DATE_VALUE = 1003; var ERR_INVALID_END_DATE_VALUE = 1004;
//错误消息 var MSG_INVALID_DATE_FORMAT ="无效的日期格式&#34 ;; var MSG_INVALID_START_DATE_VALUE ="无效的开始日期值&#34 ;; var MSG_INVALID_END_DATE_VALUE ="无效的结束日期值&#34 ;;
开关(错误代码) { case ERR_INVALID_DATE_FORMAT: 提醒(MSG_INVALID_DATE_FORMAT); 打破;
案例ERR_INVALID_START_DATE_VALUE: alert(MSG_INVALID_START_DATE_VALUE); 打破;
案例ERR_INVALID_END_DATE_VALUE: 提醒(MSG_INVALID_END_DATE_VALUE); 打破;
默认: 警报(ERRORCODE); }
switch语句无法验证错误代码,也没有显示警告消息。
注意: 早期使用的日期参数自定义格式,但它无法检测日期的错误值,如aa / 23/20145。
有没有办法实现这些验证?
答案 0 :(得分:2)
这里的主要问题是,您的HTML文本代码是客户端脚本,因此无法直接访问变量" errorcode"您在beforeFactory事件中创建的。为此你需要使用" VALUE-OF"标记如下。注意这个变量" errorcode"在HTML脚本中声明:
<script>
// Error Codes
var ERR_INVALID_DATE_FORMAT = 1001,
ERR_INVALID_START_DATE_VALUE = 1003,
ERR_INVALID_END_DATE_VALUE = 1004,
MSG_INVALID_DATE_FORMAT ="Invalid Date Format",
MSG_INVALID_START_DATE_VALUE ="Invalid start date value",
MSG_INVALID_END_DATE_VALUE ="Invalid end date value",
errorcode=<VALUE-OF>errorcode</VALUE-OF>;
console.log("Evaluating date format for code:"+errorcode);
switch (errorcode) {
case ERR_INVALID_DATE_FORMAT:
alert(MSG_INVALID_DATE_FORMAT);
break;
case ERR_INVALID_START_DATE_VALUE:
alert(MSG_INVALID_START_DATE_VALUE);
break;
case ERR_INVALID_END_DATE_VALUE:
alert(MSG_INVALID_END_DATE_VALUE);
break;
default:
alert("Format seems valid, error code returned is:"+errorcode);
}
</script>
然而,在服务器端脚本中应用此类验证步骤可能是更好的做法,特别是它更容易维护。你在this topic中有一个这样的方法的例子。使用James指出的主题建议的javascript日历也可以改善用户体验。我希望它会有所帮助。