BPEL中的forEach循环(WSO2 BPS)

BPEL中的forEach循环(WSO2 BPS),wso2,bpel,Wso2,Bpel,我无法找出问题的根本原因,为什么forEach循环不工作 <bpel:forEach name="eachMarket" parallel="no" counterName="marketCounter"> <bpel:startCounterValue>1</bpel:startCounterValue> <bpel:finalCounter

我无法找出问题的根本原因,为什么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>

1.
计数($input.payload/tns:dct响应/tns:DCTIDs/tns:DCTID)
$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:DEFTYPE
$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:DEFTYPE
$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:MarketName
$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:MarketName
$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[round($marketCounter)]/tns:DCTID
$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:DCTIDs/ns:DCTID[round($marketCounter)]/ns:DCTID
1.
计数($input.payload/tns:DCT响应/tns:AdditionalParameters/tns:Parameter)
$input.payload/tns:DCT响应/tns:AdditionalParameters/tns:Parameter[$parameterCounter]/tns:Name
$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:AdditionalParameters/ns:Parameter[$parameterCounter]/ns:Name
$input.payload/tns:DCT响应/tns:AdditionalParameters/tns:Parameter[$parameterCounter]/tns:Value
$OrderParameterPLRequest.parameters/ns:DCTResponse/ns:AdditionalParameters/ns:Parameter[$parameterCounter]/ns:Value
输入将包含多个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>

阿文克利斯
胸腺瘤
3.
阿文克利斯
胸腺瘤
3.
阿文克利斯
胸腺瘤
3.
错误消息:
FaultExplation={}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之前的整个表达式周围加上括号。有关原因,请参见
  • 虽然[1]、[2]等将起作用,[$Counter]将不起作用。相反,请使用[position()=$Counter]。您还可以使用position()执行一些更复杂的查询,例如,[position()<3]以便从某个集合中选择前两个节点

现在我得到了一个不同的错误现在我得到了一个不同的错误分配错误:selectionFailure:R-Value表达式“{OXPath10Expression$input.payload/tns:DCTResponse/tns:DCTID[$Counter]/tns:DEFTYPE}”返回了多个.bpel.runtime.ASSIGN}/bps/ProcessOrder}ReportProcessWorkFlow-55已完成,但有错误:FaultData:[faultName={}selectionFailure,FaultType=null({$input.payload/tns:DCTResponse/tns:DCTIDs/tns:DCTID[$Counter]/tns:DEFTYPE}“返回了多个节点。)]