特定の委員会の各委員、その役職、電子メール、電話番号を一覧表示するページを作成する必要があります。このデータは、XML Web サービスを介して公開されます。1 つのテーブルには委員会のデータ (メンバー名、役職) が含まれ、もう 1 つのテーブルには個人のデータ (電子メール、電話番号) が含まれます。結合を使用して単一のクエリでデータを取得しようとしましたが、API は明らかにそれをサポートしていません。ただし、多数の個別のクエリを実行できる「MultiQuery」メソッドを提供するので、それを使用しています。
以前に同様の質問をしましたが、実際には同じ XML と同じ一般的な設定を使用しています。Peter Boughton と他の人々は非常に役に立ち、彼らの提案はうまく機能しています。当時と今の違いは、当時は委員会のデータだけが必要だったということです。今、私は委員会と個人の両方のデータが必要ですが、そこが行き詰まっています。
2 つのクエリの結果は、2 つのセクション (オブジェクトは 1 つですが、"ArrayOfanyType" セクションは 2 つ) で出力されます。両方の「セクション」が分割され、1 つの配列に含まれています。
<cfset keyValue = xmlSearch(soapBody,"//*[local-name()='KeyValueOfstringanyType']") />
ブルート フォース アプローチを使用して、この配列をループし、構造体にデータを追加できます。
<cfloop index="i" from="1" to="#arrayLen(keyValue)#">
<cfif keyValue[i].Key.xmlText EQ 'Member_Name'>
<cfset memberName = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Position_Name'>
<cfset positionName = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Member_Guid'>
<cfset memberGuid = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Employer__c'>
<cfset employer = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ 'Primary_EmailAddress_EmailAddress'>
<cfset email = keyValue[i].Value.xmlText>
</cfif>
<cfif keyValue[i].Key.xmlText EQ '_Default_PhoneNumber_PhoneNumber'>
<cfset phone = keyValue[i].Value.xmlText>
</cfif>
<cfset chapterOfficer = {
aName = #memberName#,
bPositionName = #positionName#,
cMemberGuid = #memberGuid#,
dCompany = #employer#,
eEmail = #email#,
fPhone = #phone#
} />
</cfloop>
これは、単一のメンバーに最適です。「chapterOfficer」をダンプすると、必要なものがすべて得られます。私が考えたのは、役員ごとに一連の構造体を作成し、それらを配列 chapterOfficers に配置し、それをループしてページを作成することでした。
<cfif structKeyExists(chapterOfficer, "aName")>
<cfset arrayAppend(chapterOfficers, chapterOfficer)>
</cfif>
このコードを構造体クリエーターの最後、ループが閉じる直前に配置しました。配列に8500を超える構造体を配置するため、結果がわかりません。一部の構造体にはエントリがなく、一部は部分的なものであり、一部は以前のものの繰り返しであり、一部にはある役員の電子メールと別の役員の電話があります。私がやろうとしていたのは、ループの反復ごとに、ページに必要なキーと値のペアの存在をテストし、それらを新しく作成した構造体に追加し、その構造体を既存の配列に追加することでした。
実際、私が扱っている XML の結果には数千行ありますが、役員は 10 行しかありません。8500 の奇妙な構造体が作成されている理由はわかりません。キー "aName" が存在しない限り、配列に構造体を追加しないでください。ループ。作成された構造体には、割り当てたキーと値のペアのみが含まれている必要があります。
しかし、それはまったく起こっていることではありません。この方法を実際よりも複雑にしていると確信していますが、本当に困惑しています。ヒント、アドバイス、提案、指針をいただければ幸いです。ご協力いただきありがとうございます。