2016-11-11 7 views
0

Я хочу вставить приведенные ниже значения по умолчанию, когда я запускаю службу, я получил это ниже ошибки, пожалуйста, скажите мне, как Разрешить.Когда я запускаю службу выполнения нескольких операторов выполнения, я получил ошибку «Не могу прочитать свойства» параметры «от нуля»

Ошибка выполнения в сценарии ("Process: 'CustomPersonalGS практика' ProcessItem: 'ИНИЦИАЛИЗИРУЙТЕ' Тип: 'ЭЛЕМЕНТ'" -1: -1) .TypeError: Не удается прочитать свойство "параметров" от нуля

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); 
 
\t addParam(tw.local.customerPD.customerPersonalDetailsList[i].customerId,"VARCHAR","IN"); 
 
\t addParam(tw.local.customerPD.customerPersonalDetailsList[i].custPersonalDetailsId,"VARCHAR","IN"); 
 
\t var yesNoFlag = "N"; 
 
\t if(tw.local.customerPD.customerPersonalDetailsList[i].isBPMEnabled){ 
 
\t \t yesNoFlag="Y"; 
 
\t \t addParam(yesNoFlag,"CHAR","IN"); 
 
\t } 
 
\t yesNoFlag = "N"; 
 
\t if(tw.local.customerPD.customerPersonalDetailsList[i].isCCPEnabled){ 
 
\t \t yesNoFlag="Y"; 
 
\t \t addParam(yesNoFlag,"CHAR","IN"); 
 
\t } 
 
\t yesNoFlag = "N"; 
 
\t if(tw.local.customerPD.customerPersonalDetailsList[i].isCCPMandatory){ 
 
\t \t yesNoFlag="Y"; 
 
\t \t addParam(yesNoFlag,"CHAR","IN"); 
 
\t } 
 
\t yesNoFlag = "N"; 
 
\t if(tw.local.customerPD.customerPersonalDetailsList[i].isLatestVersion){ 
 
\t \t yesNoFlag="Y"; 
 
\t \t addParam(yesNoFlag,"CHAR","IN"); 
 
\t } 
 
} \t

ответ

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 из этой функции, а затем передать его методу «addParams», исключая необходимость поиска последнего в массиве. В качестве альтернативы вместо этого вставьте его в начало массива и просто обновите 0-й элемент вместо последнего.

-AP

0

Это сравнение никогда не будет работать должным образом. array[array.length] всегда будет null (строка 35).

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

Кроме того, в следующих строках, если вы хотите работать с последним элементом списка, вы можете использовать что-то вроде array[array.length - 1]. Лично я использую временную переменную, делаю некоторые вещи с ней и вставляю ее в список в конце (аналогично @Drux's answer).