异常场景记录:这是最近几天困扰的问题,实现js中取出数据库数据之后,向页面对应的表格赋值,开发完成之后debug模式没有问题,成功运行。然后直接运行,起初也没啥问题,测试人员在测试的时候反馈有些时候值不能带出来。
window.sessionStorage解决方案
1、检查脚本代码,发现初步确定以下重点嫌疑代码,并加入日志打印代码
console.log('debugLoc_1');
var mx1CurRowIndex = 0;
var mx1SelCount = 0;
//ROBXMX_XH ROBXMX_XM15_STATEMENT_NUMBER
for(var j = 0;j < mx1RCount;j++){
var tmpjsd = TABLEMX1.rows(j).getValue('ROBXMX_XM15_STATEMENT_NUMBER');
console.log('debugLoc_2');
if(tmpjsd != STATEMENT_NUMBER){
console.log('debugLoc_3');
if(tmpjsd==null || tmpjsd==''){
mx1CurRowIndex = j;
console.log('debugLoc_4');
break;
}
continue;
}
mx1SelCount++;
}
console.log('debugLoc_5');
if(mx1SelCount==0){ //当前选择之前未曾选过
//赋值代码段
console.log('debugLoc_6');
}
console.log('debugLoc_7');
};
2、加入日志后发现直接运行的时候debugLoc_4,debugLoc_6,debugLoc_7日志没有打印出来,故而初步判断是for循环出现的问题。于是着手使用其他方式替换for循环。
3、查询资料后,发现了window.sessionStorage来实现唯一值存储。修改后代码如下
var mx1CurRowIndex = 0;
var mx1SelCount = 0;
//ROBXMX_XH ROBXMX_XM15_STATEMENT_NUMBER
var dataTmp = window.sessionStorage.getItem(STATEMENT_NUMBER);//取值
var linNOTmp = window.sessionStorage.length+1;
if(dataTmp != null){//该结算单编号已经选择过
mx1SelCount++;
}
else{//该结算单编号未选择过
window.sessionStorage.setItem(STATEMENT_NUMBER,linNOTmp);
}
if(mx1SelCount==0){ //当前选择之前未曾选过
*****赋值代码
}
****