Отредактируйте приложение Coldfusion Survey, чтобы получить еще одно значение поля
У меня есть приложение для обследования с холодным синтезом, которое я пытаюсь отредактировать, чтобы вернуть и сравнить значение нового столбца в базе данных.
У меня есть следующая функция в файле cfc, которая должна возвращать значение для нового поля "questionfiltert":
<cffunction name="getQuestion" access="public" returnType="struct" output="false"
hint="Grabs a question.">
<cfargument name="id" type="uuid" required="true" hint="The UUID of the question to get.">
<cfset var qQuestion = "">
<cfset var result = "">
<cfquery name="qQuestion" datasource="#variables.dsn#">
select #variables.tableprefix#questions.id, surveyidfk, question, questiontypeidfk, rank, required, questionfilter,
#variables.tableprefix#questiontypes.name as questiontype, #variables.tableprefix#questions.nextquestion, #variables.tableprefix#questions.nextquestionvalue
from #variables.tableprefix#questions, #variables.tableprefix#questiontypes
where #variables.tableprefix#questions.id = <cfqueryparam value="#arguments.id#" cfsqltype="CF_SQL_VARCHAR" maxlength="35">
and #variables.tableprefix#questions.questiontypeidfk = #variables.tableprefix#questiontypes.id
</cfquery>
<cfset result = variables.utils.queryToStruct(qQuestion)>
<cfset result.answers = getAnswers(arguments.id)>
<cfreturn result>
</cffunction>
Код, где я пытаюсь получить
...<cfif allDone>
<cfif lastQuestion.nextQuestion neq "">
<!--- Ok, we definitely need to go someplace else. But do we have to have an answer? --->
<cfif lastQuestion.nextQuestionValue eq "">
<!--- In this branch, we ALWAYS go to another q --->
<cfset questionToLoad = application.question.getQuestion(lastQuestion.nextQuestion)>
<cfset currentInfo.currentStep = questionToLoad.rank>
<cfelse>
<cfset answer = currentInfo.answers[lastQuestion.id]>
<cfset theanswermatches = false>
<!--- first do a simple check - assumes answer is simple --->
<cfif isSimpleValue(answer) and answer is lastQuestion.nextQuestionValue>
<cfset theAnswerMatches = true>
</cfif>
<!--- next support our MC with a .list key --->
<cfif isStruct(answer) and structKeyExists(answer,"list") and listFind(answer.list, lastQuestion.nextQuestionValue)>
<cfset theAnswerMatches = true>
</cfif>
<cfif theanswermatches>
<cfset questionToLoad = application.question.getQuestion(lastQuestion.nextQuestion)>
<cfset currentInfo.currentStep = questionToLoad.rank>
<cfelse>
<cfset currentInfo.currentStep = currentInfo.currentStep + 1>
</cfif>
</cfif>
</cfif>
<cfelse>
<cfset currentInfo.currentStep = currentInfo.currentStep + 1>
</cfif>
<cflocation url="#cgi.script_name#?#cgi.query_string#" addToken="false">
</cfif>
Выше код работает нормально, но я пытаюсь добавить условие для его работы таким образом. Там, где у вас есть курсив, он переходит к следующему вопросу, если ответ совпадает. Я хочу добавить условие где if questionfilter ="ifnot" тогда
<cfif theanswermatches>
<cfset questionToLoad = application.question.getQuestion(lastQuestion.nextQuestion)>
<cfset currentInfo.currentStep = questionToLoad.rank>
<cfelse>
<cfset currentInfo.currentStep = currentInfo.currentStep + 1>
</cfif>
изменения в
<cfif theanswermatches>
<cfset currentInfo.currentStep = currentInfo.currentStep + 1>
<cfelse>
<cfset questionToLoad = application.question.getQuestion(lastQuestion.nextQuestion)>
<cfset currentInfo.currentStep = questionToLoad.rank>
</cfif>
Каждый раз, когда я пытаюсь добавить условие, все приложение завершает опрос в любом состоянии. Я подозреваю, что код не получает значение для фильтра вопросов. Как я могу получить это, а также подтвердить, что я получаю.
В настоящее время я занимаюсь
<cfif lastQuestion.questionfilter eq "">
Все предложения будут оценены