簡體   English   中英

BPEL中的forEach循環(WSO2 BPS)

[英]forEach loop in BPEL (WSO2 BPS)

我無法找出問題的根本原因,為什么forEach循環無法正常工作,

<bpel:forEach name="eachMarket" parallel="no" counterName="marketCounter">
                            <bpel:startCounterValue>1</bpel:startCounterValue>
                            <bpel:finalCounterValue>count($input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID)</bpel:finalCounterValue>
                            <bpel:scope>
                                <bpel:assign>
                                    <bpel:copy ignoreMissingFromData="yes" insertMissingToData="yes">
                                        <bpel:from>$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:DEFTYPE</bpel:from>
                                        <bpel:to>$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:DEFTYPE</bpel:to>
                                    </bpel:copy>
                                    <bpel:copy ignoreMissingFromData="yes" insertMissingToData="yes">
                                        <bpel:from>$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:MarketName</bpel:from>
                                        <bpel:to>$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:MarketName</bpel:to>
                                    </bpel:copy>
                                    <bpel:copy ignoreMissingFromData="yes" insertMissingToData="yes">
                                        <bpel:from>$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:DCTID</bpel:from>
                                        <bpel:to>$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:DCTID</bpel:to>
                                    </bpel:copy>
                                </bpel:assign>
                            </bpel:scope>
                        </bpel:forEach>
                        <bpel:forEach name="eachParameter" parallel="no" counterName="parameterCounter">
                            <bpel:startCounterValue>1</bpel:startCounterValue>
                            <bpel:finalCounterValue>count($input.payload/tns:DCTResponse/tns:AdditionalParamters/tns:Parameter)</bpel:finalCounterValue>
                            <bpel:scope name="parameterScope">
                                <bpel:assign>
                                    <bpel:copy ignoreMissingFromData="yes" insertMissingToData="yes">
                                        <bpel:from>$input.payload/tns:DCTResponse/tns:AdditionalParamters/tns:Parameter[$parameterCounter]/tns:Name</bpel:from>
                                        <bpel:to>$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:AdditionalParamters/ns:Parameter[$parameterCounter]/ns:Name</bpel:to>
                                    </bpel:copy>
                                    <bpel:copy ignoreMissingFromData="yes" insertMissingToData="yes">
                                        <bpel:from>$input.payload/tns:DCTResponse/tns:AdditionalParamters/tns:Parameter[$parameterCounter]/tns:Value</bpel:from>
                                        <bpel:to>$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:AdditionalParamters/ns:Parameter[$parameterCounter]/ns:Value</bpel:to>
                                    </bpel:copy>
                                </bpel:assign>
                            </bpel:scope>
                        </bpel:forEach>

輸入將包含多個ID,

    <p:DCTIDs>
        <p:DCTID>
            <p:DEFTYPE>acvinclis</p:DEFTYPE>
            <p:MarketName>pectoreflammas</p:MarketName>
            <p:DCTID>3</p:DCTID>
        </p:DCTID>
        <p:DCTID>
            <p:DEFTYPE>acvinclis</p:DEFTYPE>
            <p:MarketName>pectoreflammas</p:MarketName>
            <p:DCTID>3</p:DCTID>
        </p:DCTID>
        <p:DCTID>
            <p:DEFTYPE>acvinclis</p:DEFTYPE>
            <p:MarketName>pectoreflammas</p:MarketName>
            <p:DCTID>3</p:DCTID>
        </p:DCTID>
    </p:DCTIDs>

錯誤消息:faultExplanation = { http://docs.oasis-open.org/wsbpel/2.0/process/executable } selectionFailure:無表達式結果:'$ OrderParameterPLRequest.parameters / ns:DCTResponse / ns:DCTIDs / ns:DCTID [round($ marketCounter)] / ns:DEFTYPE'對'

這個問題可能與原始海報不再相關,但是我想提供一個答案,以防其他人遇到相同的問題。

如果要在$ Counter位置獲取DCTID的DEFTYPE,請使用以下XPath:

($input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID)[position() = $Counter]/tns:DEFTYPE

這里有兩點很重要:

  • 將整個表達式的括號放在DTCID之前。 有關原因,請參閱https://stackoverflow.com/a/8336922/5986352
  • 盡管[1],[2]等將起作用,但是[$ Counter]將不起作用。 而是使用[position()= $ Counter]。 您也可以使用position()執行一些更復雜的查詢,例如[position()<3],以便從特定集合中選擇前兩個節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM