我试图在我的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>
答案 0 :(得分:0)
您无法将任何逻辑嵌入XSD。 XSD定义了从BPEL流程交换的SOAP消息的数据模型以及BPEL流程中可能需要的任何变量类型。您还可以定义多个XSD。
这,XSD没有任何元素。
现在的问题是你想要实现的目标是什么。如果您希望您的流程的调用者发送这些标记,或者您希望您的流程是&#34;计算&#34;这些旗帜?
在前一种情况下,只需从WSDL中删除元素即可。
在后一种情况下,删除和元素并在BPEL流程中定义两个类型为xsd:boolean的变量。然后,您可以使用BPEL ifs为您的标志分配正确的值。
答案 1 :(得分:0)
<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 >= 10</bpel:from>
<bpel:to variable="ReOrderStatus"/>
</bpel:copy>
</bpel:assign>
如果你真的想使用s,那么它看起来像这样:
<bpel:if name="Check_Reorder_Stock">
<bpel:condition>$CheckStockWSResponse/ns:Stock >= 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服务器会有一些。