Hello everyone,
I am building an interface dynamically for a questionnaire based on previous responses (so I can view the previous answers and then edit them if necessary when re-reviewing). The questions are stored in one database, the items being assessed in another, and the responses to my questions in a third. So, the issue is when I add a new question and answer, I receive the following error:
Interface Definition: Expression evaluation error at function a!forEach [line 140]: Error in a!forEach() expression during iteration 25: Expression evaluation error at function a!radioButtonField [line 145]: Invalid index (25) for list: valid range is 1..24
It reads as though it's able to loop through my first 24 questions and then throws up on the new entry, but I am not constraining the index to 24 values. I believe this is because it's not handling the missing values properly (previously assessed items have no response for the new question) so I manually inserted the values into a test database and received the same error. I've copied the relevant code below and I'm hoping it's something obvious that I've simply overlooked. Any help would be much appreciated!
a!localVariables( /*constants*/ local!datetime:rule!Current_Date(), local!user:rule!Current_LoggedInUser(), local!nulls: index( rule!qryrefernceQuestionByplatformId( platformI_appianId: ri!platforms.appian_id ).data, wherecontains( "", touniformstring( index( rule!qryrefernceQuestionByplatformId( platformI_appianId: ri!platforms.appian_id ).data, "questionOrder", 1 ) ) ), "questionid", null ), local!refereceResponse: todatasubset( remove( rule!qryrefernceQuestionByplatformId( platformI_appianId: ri!platforms.appian_id ).data, wherecontains( "", touniformstring( index( rule!qryrefernceQuestionByplatformId( platformI_appianId: ri!platforms.appian_id ).data, "questionOrder", 1 ) ) ) ), a!pagingInfo(1, - 1) ), local!temp, local!indexforQuestions: wherecontains( tointeger(local!nulls), tointeger( index( rule!QryGetQuestionsGeneral().data, "questionid", null ) ) ), local!questions: if( or( isnull(local!indexforQuestions), count(local!indexforQuestions) = 0 ), rule!QryGetQuestionsGeneral(), todatasubset( remove( rule!QryGetQuestionsGeneral().data, local!indexforQuestions ), a!pagingInfo(1, - 1) ) ), local!radioOptions: { "Yes", "No" }, local!nQuestions: count(local!questions.data), /*datasubset*/ local!currentPlatformID: if( rule!APN_isBlank(ri!currentPlatformID), ri!platforms.appian_id, ri!currentPlatformID ), local!newreferenceResponse: /*if(*/ /*rule!APN_isBlank(*/ /*local!refereceResponse.data*/ /*),*/ a!forEach( items: enumerate(local!nQuestions) + 1, expression: 'type!{urn:com:appian:types}QUESTION'( questionid: fv!index, platformid: ri!platforms.appian_id, temp: false ) ), local!blankIntAns: if( rule!APN_isBlank(local!refereceResponse), {}, wherecontains( "", touniformstring( index(local!refereceResponse.data, "answer", 1) ) ) ), local!initalGridData: if( length(local!blankIntAns) > 0, remove( local!refereceResponse.data, tointeger(local!blankIntAns) ), local!refereceResponse.data ), { a!cardLayout( contents: a!gridField( label: "", labelPosition: "ABOVE", data: /*local!refereceResponse.data, */ local!initalGridData, columns: { a!gridColumn( label: "Questions", value: rule!QryGetQuestionsGeneralByquestionId(fv!row.questionid).data.questiontext[1] ), a!gridColumn(label: "Response", value: fv!row.answer) }, pagesize: 25, showWhen: and( local!refereceResponse.totalCount <> 0, not(ri!platformEdit = true) ), validations: {} ), height: "TALL", showWhen: and( local!refereceResponse.totalCount <> 0, not(ri!platformEdit = true) ), style: "STANDARD" ), a!cardLayout( contents: a!columnsLayout( columns: { a!columnLayout( contents: { a!forEach( items: local!questions.data, expression: { if( fv!item.format = "Y/N", a!radioButtonField( label: fv!item.questiontext, labelPosition: "ABOVE", choiceLabels: local!radioOptions, choiceValues: local!radioOptions, value: ri!newreferenceResponse[fv!index].answer, saveInto: { ri!newreferenceResponse[fv!index].answer, if( ri!newreferenceResponse[fv!index].answer = "No", { a!save(local!temp, fv!index), a!forEach( a!forEach( local!questions.data, if( fv!item.refToParent = tostring(local!temp), fv!item.questionOrder, {} ) ), a!save( ri!newreferenceResponse[fv!item].answer, Null ) ) }, {} ), /*a!save(local!temp,a!forEach(local!questions.data,if(fv!item.refToParent="2",fv!item.id,{}))),*/ a!save( ri!newreferenceResponse[fv!index].questionid, fv!item.questionid ), a!save( ri!newreferenceResponse[fv!index].temp, "" ), a!save( ri!newreferenceResponse[fv!index].isActive, fv!item.isActive ), a!save( ri!newreferenceResponse[fv!index].questionOrder, fv!item.questionOrder ), a!save( ri!newreferenceResponse.user, local!user ), a!save( ri!newreferenceResponse[fv!index].datetime, local!datetime ), a!save( ri!newreferenceResponse, ri!newreferenceResponse ) }, showWhen: if( fv!item.levelIndicator = "2", if( ri!newreferenceResponse[tointeger(fv!item.refToParent)].answer = "Yes", true, false ), true() ), required: if( fv!item.levelIndicator = "2", if( ri!newreferenceResponse[tointeger(fv!item.refToParent)].answer = "Yes", true, false ), true() ), choiceLayout: "STACKED", validations: {} ), a!textField( label: fv!item.questiontext, labelPosition: "ABOVE", value: ri!newreferenceResponse[fv!item.questionOrder].answer, saveInto: { ri!newreferenceResponse[fv!item.questionOrder].answer, a!save( ri!newreferenceResponse[fv!index].questionid, fv!item.questionid ), a!save( ri!newreferenceResponse[fv!index].temp, "" ), a!save( ri!newreferenceResponse[fv!index].isActive, fv!item.isActive ), a!save( ri!newreferenceResponse[fv!index].questionOrder, fv!item.questionOrder ), a!save( ri!newreferenceResponse.user, local!user ), a!save( ri!newreferenceResponse[fv!index].datetime, local!datetime ), a!save( ri!newreferenceResponse, ri!newreferenceResponse ) }, showWhen: if( fv!item.levelIndicator = "2", if( ri!newreferenceResponse[tointeger(fv!item.refToParent)].answer = "Yes", true, false ), true() ), required: if( fv!item.levelIndicator = "2", if( ri!newreferenceResponse[tointeger(fv!item.refToParent)].answer = "Yes", true, false ), true() ) ) ) } ) } ) }, showWhen: or( local!refereceResponse.totalCount = 0, ri!platformEdit = true ) ), height: "TALL", showWhen: or( local!refereceResponse.totalCount = 0, ri!platformEdit = true ), style: "STANDARD" ) } )
Discussion posts and replies are publicly visible