Bpel if else schema xml

时间:2014-09-26 10:23:02

标签: xml if-statement schema bpel

我试图在我的xml方案中为布尔元素放置一个if条件:ProductIDStatus,ReOrderStatus。基本上,如果Stock值比元素1的状态大10以上,则为0.

我创建了以下代码,但仍然收到错误消息。你能帮帮我吗?

<xsd:complexType name="checkResponseType">
<xsd:sequence>
<xsd:element name="Stock" type="xsd:decimal" />
<xsd:element name="ProductIDStatus" type="xsd:boolean" >
<xsd:assign name="if (@Stock > '10')
then @ProductIDStatus = 1
else if (@Stock < '10')
then @ProductIDStatus = 0"/>
</xsd:element>
<xsd:element name="ReOrderStatus" type="xsd:boolean" >
<xsd:assign name="if (@Stock > '10')
then @ReOrderStatus = 1
else if (@Stock < '10')
then @ReOrderStatus = 0"/>
</xsd:element>
<xsd:element name="Mode" type="tns:ModeType" />
<xsd:choice>
<xsd:element name="Email" type="tns:EmailType" minOccurs="0" />
<xsd:element name="Service" type="tns:ServiceType" minOccurs="0" />
</xsd:choice>
</xsd:sequence>
</xsd:complexType>

3 个答案:

答案 0 :(得分:0)

您无法将任何逻辑嵌入XSD。 XSD定义了从BPEL流程交换的SOAP消息的数据模型以及BPEL流程中可能需要的任何变量类型。您还可以定义多个XSD。

这,XSD没有任何元素。

现在的问题是你想要实现的目标是什么。如果您希望您的流程的调用者发送这些标记,或者您希望您的流程是&#34;计算&#34;这些旗帜?

在前一种情况下,只需从WSDL中删除元素即可。

在后一种情况下,删除和元素并在BPEL流程中定义两个类型为xsd:boolean的变量。然后,您可以使用BPEL ifs为您的标志分配正确的值。

答案 1 :(得分:0)

谢谢你的回答! 所以它可能是这样的?: 对于xml架构中的元素:

<xsd:element name="ReOrderStatus" type="xsd:boolean" />

Bpel条件:

<bpel:if name=" ReOrderStatus">
<bpel:condition>$CheckStockWSResponse.Stock > '10'       </bpel:condition>
then $CheckStockWSResponse.ReOrderStatus  =  1
<elseif>
<bpel:condition>$CheckStockWSResponse.Stock < '10'   </bpel:condition>
 then $CheckStockWSResponse.ReOrderStatus  =  0
</elseif>
</bpel:if>

答案 2 :(得分:0)

不,BPEL语法非常不同。此外,您不希望在消息中声明变量,因此请从架构中删除该元素。

而是创建一个BPEL变量

<bpel:variables>
  <bpel:variable name="ReOrderStatus" type="xsd:boolean"/>
</bpel:variables>

然后你需要设置这个变量的值。在您的情况下,通过存储比较您的股票与您的金额的布尔结果,可以很容易地完成:

<bpel:assign name="Check_Reorder_Stock">
  <bpel:copy>
    <bpel:from>$CheckStockWSResponse/ns:Stock &gt;= 10</bpel:from>
    <bpel:to variable="ReOrderStatus"/>
  </bpel:copy>
</bpel:assign>

如果你真的想使用s,那么它看起来像这样:

<bpel:if name="Check_Reorder_Stock">
  <bpel:condition>$CheckStockWSResponse/ns:Stock &gt;= 10</bpel:condition>
  <bpel:assign aei:id="141215246986100626" name="Reorder_Needed">
    <bpel:copy>
      <bpel:from>
        <bpel:literal>true</bpel:literal>
      </bpel:from>
      <bpel:to variable="ReOrderStatus"/>
    </bpel:copy>
  </bpel:assign>
  <bpel:else>
    <bpel:assign name="No_Reorder_Needed">
      <bpel:copy>
        <bpel:from>
          <bpel:literal>false</bpel:literal>
        </bpel:from>
        <bpel:to variable="ReOrderStatus"/>
      </bpel:copy>
    </bpel:assign>
  </bpel:else>
</bpel:if>

但总的来说,在继续之前,您应首先查看一些BPEL介绍。通常,您的BPEL服务器会有一些。