1

2 つのクエリを含む Mule フローを取得しました。1 つ目は、ユーザー名が重複しているかどうかを検証するだけです。

次のようにします: SELECT count(*) AS TOTAL FROM user_tests WHERE username = #[json:username] AND test_message_title = #[json:test_message_title]

2 番目は、TOTAL = 0 の場合に INSERT を実行します。

ここで、同じフロー内の選択肢で変数「TOTAL」を使用したいと考えています。どうすればいいのですか?

#[TOTAL=0]、#[variable:TOTAL=0] などを試しましたが、うまくいきませんでした。

編集: ペイロードから「0」または任意の番号を取得する Java コンポーネントを作成しました。それを比較するための選択式を作成するにはどうすればよいですか?

選択式で Integer.valueOf(message.payload) = 0 を使用しようとしましたが、InvalidExpressionException が発生します。

これは私の全体の流れです:

<flow name="ADMIN_INSERT_TEST_FILE" doc:name="ADMIN_INSERT_TEST_FILE">
    <ajax:servlet-inbound-endpoint channel="/admin/save_test_message" responseTimeout="10000" doc:name="Ajax"/>
    <set-variable variableName="#['saved_payload']" value="#[payload]" doc:name="Save original payload"/>
    <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="validate_test_name" queryTimeout="-1" connector-ref="ExtendedRoutingConnector" doc:name="validate duplicated test name">
        <jdbc:query key="validate_test_name" value="SELECT count(*) AS TOTAL FROM user_tests WHERE username = #[json:username] AND test_message_title = #[json:test_message_title]"/>
    </jdbc:outbound-endpoint>
    <logger message="#[message.payload[0].TOTAL]" level="INFO" category="Total" doc:name="Logger"/>
    <choice doc:name="Choice">
        <when expression="#[message.payload[0].TOTAL == 0]">
            <processor-chain>
                <set-payload value="#[variable:saved_payload]" doc:name="Save Payload"/>
                <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="insert_user_test_message" queryTimeout="-1" connector-ref="ExtendedRoutingConnector" doc:name="insert user test message">
                    <jdbc:query key="insert_user_test_message" value="INSERT INTO user_tests (username, test_message_title, user_test_message) VALUES (#[json:username], #[json:test_message_title], #[json:message])"/>
                </jdbc:outbound-endpoint>
            </processor-chain>
        </when>
        <otherwise>
            <processor-chain>
                <logger message="Name #[json:test_message_title] already exists" level="INFO" doc:name="Logger"/>
            </processor-chain>
        </otherwise>
    </choice>
</flow>

前もって感謝します。

4

1 に答える 1

7

MELを使用する:

#[message.payload[0].TOTAL == 0]

TOTALこれにより、SELECTクエリによって返された最初の行から列の値が取得されます。

于 2013-03-12T18:10:22.963 に答える