当我运行多个执行语句服务时,我收到错误“无法读取属性”参数“从null”

时间:2016-11-11 06:17:09

标签: database bpm ibm-bpm

我想在运行服务时插入以下默认值我得到以下错误任何一个请告诉我如何解决。

脚本中的运行时错误(“进程:'CustomPersonalGS实践'ProcessItem:'初始化'类型:'ITEM'”-1:-1).TypeError:无法从null读取属性“parameters”

enter image description here

enter image description here

//Initialise SQL Query List
tw.local.sqlQueries =  new tw.object.listOf.SQLStatement();
tw.local.sql = "";

tw.local.customerPD = new tw.object.customerPD1BO();
tw.local.customerPD.customerPersonalDetailsList = new tw.object.listOf.customerSpecificPersonalDetailsListBO();
var custPersonalDetails = new tw.object.customerSpecificPersonalDetailsListBO();
custPersonalDetails.customerId = "8467";
custPersonalDetails.custPersonalDetailsId = "8";
custPersonalDetails.isBPMEnabled = true;
custPersonalDetails.isCCPEnabled = true;
custPersonalDetails.isCCPMandatory = true;
custPersonalDetails.isLatestVersion = true
tw.local.customerPD.customerPersonalDetailsList.insertIntoList(tw.local.customerPD.customerPersonalDetailsList.listLength, custPersonalDetails);


tw.local.sql = "INSERT INTO CUSTOMPERSONALDETAILSQUESTION(CUSTOMERID,CUSTPERSONLADETAILSID,ISBPMENABLED,ISCCPENABLED,ISCCPMANDATORY,ISLATESTVERSION) VALUES (?,?,?,?,?,?) ";

function addSQLStatement() {
  tw.local.sqlQueries[tw.local.sqlQueries.listLength] = new tw.object.SQLStatement();
}

function addParam(value,type,mode) {
  log.info("VALUE :" + value);
  var newParam = new tw.object.SQLParameter();
  newParam.value = value;
  newParam.type = type;
  newParam.mode = mode;
     if( tw.local.sqlQueries == null){
         tw.local.sqlQueries = new tw.object.listOf.SQLStatement();
     }
    if( tw.local.sqlQueries[tw.local.sqlQueries.listLength] == null ){
         tw.local.sqlQueries.insertIntoList(tw.local.sqlQueries.listLength, new tw.object.SQLStatement());
    }
    if(tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters == null ){
        tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters = new tw.object.listOf.SQLParameter();
    }
  var paramsLength = tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters.listLength;
  tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters[paramsLength] = newParam;
}

for(var i=0;i<tw.local.customerPD.customerPersonalDetailsList.listLength;i++){
    addSQLStatement(tw.local.sql);
	addParam(tw.local.customerPD.customerPersonalDetailsList[i].customerId,"VARCHAR","IN");
	addParam(tw.local.customerPD.customerPersonalDetailsList[i].custPersonalDetailsId,"VARCHAR","IN");
	var yesNoFlag = "N";
	if(tw.local.customerPD.customerPersonalDetailsList[i].isBPMEnabled){
		yesNoFlag="Y"; 
		addParam(yesNoFlag,"CHAR","IN");
	}
	yesNoFlag = "N";
	if(tw.local.customerPD.customerPersonalDetailsList[i].isCCPEnabled){
		yesNoFlag="Y"; 
		addParam(yesNoFlag,"CHAR","IN");
	}
	yesNoFlag = "N";
	if(tw.local.customerPD.customerPersonalDetailsList[i].isCCPMandatory){
		yesNoFlag="Y"; 
		addParam(yesNoFlag,"CHAR","IN");
	}
	yesNoFlag = "N";
	if(tw.local.customerPD.customerPersonalDetailsList[i].isLatestVersion){
		yesNoFlag="Y"; 
		addParam(yesNoFlag,"CHAR","IN");
	}
}	

2 个答案:

答案 0 :(得分:0)

据我所知,您没有在SQL中初始化参数列表。那就是38号线你打电话 -

  var paramsLength = tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters.listLength;

但是,当您在tw.local.sqlQueries中创建条目时,您没有初始化参数数组。我还会注意到你的addSQLStatement()函数忽略了sql输入(并且该值是硬编码的,所以你真的不需要传入它)。我想如果你将addSQLStatement更改为 -

function addSQLStatement(query) {
  var targetQuery = new tw.object.SQLStatement();
  targetQuery.sql = query;
  tagetQuery.params = new tw.object.listOf.SQLParameter();
  tw.local.sqlQueries[tw.local.sqlQueries.listLength] = targetQuery;
}

那么你的代码就可以了。此外,您实际上可以从此函数返回targetQuery,然后将其传递给&#34; addParams&#34;方法消除了在数组中找到最后一个的方法。或者,将其插入数组的开头,只需更新第0个项而不是最后一个项。

-AP

答案 1 :(得分:0)

这种比较永远不会正常。 array[array.length]始终为null(第35行)。

if (tw.local.sqlQueries[tw.local.sqlQueries.listLength].parameters == null ){

此外,在下一行中,如果要使用列表的最后一个元素,可能需要使用array[array.length - 1]之类的内容。就个人而言,我会使用一些临时变量,用它做一些事情并将其插入到列表中(类似于@Drux's answer)。