リストとして返されるエンリッチャーでMVELを使用して、JSON 形式のデータからメールを抽出しています。JDBC に渡すことができるように、これらの電子メールでコンマ区切りの文字列を作成したいと考えています。私は次のことを試しました、
<enricher target="#[flowVars.listEmails]" source="#[{(Details.Email in payload.People)}]" doc:name="Message Enricher">
<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
</enricher>
<set-variable value="#[StringUtils.join(flowVars['listEmails'], ', ')]" variableName="strEmails"></set-variable>
<logger level="INFO" doc:name="Logger" message="$$$: output = #[StringUtils.join(flowVars['listEmails'], ',')]"/>
しかし、SQL プロファイラーを実行すると、パラメーターが SQL クエリに渡されたことがわかりません。私が試したところ、メールは印刷されましたが、リストとして印刷されました。出力は次のとおりです。
INFO 2014-02-07 10:01:41,699 [[UserManagement].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: $$$: output = [abc@mail.com, def@mail.com, ghi@mail.com]
要約すると、私の要件は、リストから電子メールを取得し、それをコンマ区切りの文字列としてフォーマットすることです。これにより、それを JDBC クエリに渡して SQL Server から結果を取得できます。クエリは次のようになります。
SELECT Id, Email FROM tbl_sfcontact WHERE Email IN ('abc@gmail.com', 'def@mail.com', 'ghi@mail.com')
ここで、「WHERE」セクションのメーリング リストは JSON データセットから抽出されます。現在使用している JDBC クエリは次のようになります。
<jdbc:query key="getContactByEmail" value="SELECT Id FROM tbl_sfContact WHERE Email IN (#[StringUtils.join(flowVars['strEmails'], ', ')])"/>