1

特定の委員会の各委員、その役職、電子メール、電話番号を一覧表示するページを作成する必要があります。このデータは、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" が存在しない限り、配列に構造体を追加しないでください。ループ。作成された構造体には、割り当てたキーと値のペアのみが含まれている必要があります。

しかし、それはまったく起こっていることではありません。この方法を実際よりも複雑にしていると確信していますが、本当に困惑しています。ヒント、アドバイス、提案、指針をいただければ幸いです。ご協力いただきありがとうございます。

4

1 に答える 1

0

誰かが興味を持っている場合に備えて、クエリを含む SOAP エンベロープを 2 つの異なるページで 2 つの部分に分割することで、実用的な解決策を得ました。

最初のエンベロープは、委員会情報 (メンバー名、ID、役職) を照会し、結果の XML をループ処理して多次元配列を読み込みます。これをセッション変数として保存します。次に、個別のデータ (2 番目のテーブル、電子メール、電話からの ID) を取得する別のページに移動し、2 番目の多次元配列が作成されます。

各テーブルは (もちろん) 異なる順序で情報を出力するため、両方の配列をループし、ID に基づいて並べ替えます。次に、それらを再度ループして、ページに出力します。

名前、役職、電子メール、電話番号のリストが表示されます。それは機能しますが、なんて頭痛の種でしょう!確かにこれを行うより良い方法があります...

于 2012-08-06T17:06:59.817 に答える