0

CFSEARCH を使用して、キー変数をカンマ区切りのリストとして含めて、4 つのカスタム フィールドが許可するよりも多くの情報を返します。ただし、システムは、リスト項目が見つからないというエラーをスローしています。

「キー」変数の各レコードは、次の形式になります: a,b,c

<cfsearch
  name="theCourses"
  collection="#arguments.collectionName#"
  type="simple"
  startrow="1"
  maxrows="100"
  criteria="#Lcase(Trim(arguments.searchCriteria))#"
  contexthighlightbegin="<b>"
  contexthighlightend="</b>"
  status="courseListStatus"
/>

<cfset courseList = QueryNew("ID, Score, Course, Subject, Day, Title, Semester, Status", "varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar") />
<cfloop query="theCourses">
  <cfset temp = QueryAddRow(courseList) />
  <cfset temp = QuerySetCell(courseList, "ID", custom3) />
  <cfset temp = QuerySetCell(courseList, "Score", score) />
  <cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
  <cfset temp = QuerySetCell(courseList, "Subject", ListFirst(key, ",")) />
  <cfset temp = QuerySetCell(courseList, "Day", custom1) />
  <cfset temp = QuerySetCell(courseList, "Title", custom4) />
  <cfset temp = QuerySetCell(courseList, "Semester", custom2) />
  <cfset temp = QuerySetCell(courseList, "Status", ListLast(key, ",")) />
</cfloop>

次のエラーが表示されます。

リスト インデックス 2 が無効です。

関数 ListGetAt(list, index [, delimiters]) で、インデックス 2 の値は最初の引数として有効ではありません (このリストには 1 つの要素があります)。有効なインデックスは、1 からリスト内の要素数までの範囲です。

4

1 に答える 1

3

残念ながら、キーが「a、b、c」の形式になるというあなたの主張は、この特定のケースでは明らかに間違っています。そうでなければ、あなたのコードはうまくいくでしょう!

だから、「なぜこれは私が期待する値を持っていないのですか?」のように。状況、エラーが発生した場合、エラーの原因となっている値をダンプし、何が問題なのかを観察します。

この場合:

<cftry>
    <cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
    <cfcatch>
        <cfoutput>#key#</cfoutput>
        <cfdump var="#cfcatch#">
        <cfabort>
    </cfcatch>
</cftry>

また、使用しない場合は、その式の LHS に temp 変数を設定する必要はありません (これは常に「はい」であるため、必要ないと思われます。これで問題ありません。

<cfset QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
于 2012-10-05T15:46:37.633 に答える