for each
是osb里面用来处理循环的一个组件,学编程的第一节课我们就知道程序设计的三要素,顺序、循环和判断。osb服务编排就相当于一个可视化程序设计平台,只不过这个平台操作的对象是接口和服务,同样需要程序设计三要素,for each
就是实现三要素里面的循环。
假设变量P_RESULT
代码如下:
<soap-env:Body xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<ZZYUE_RFC_PP_ZXBD_NEW.Response xmlns="urn:sap-com:document:sap:rfc:ZZYUE_RFC_PP_ZXBD_NEW.response">
<S_SUBRC>2</S_SUBRC>
<OUT_REC>
<item>
<MANDT/>
<ZMODE>1</ZMODE>
<MATNR>17N4V10-HW3-1-02</MATNR>
<IDNRK>P321185A123G060849</IDNRK>
<YBBH/>
<ERSDA>2017-10-23</ERSDA>
<ERTIM>13:03:05</ERTIM>
<FLAG>2</FLAG>
<QUNT>1</QUNT>
<ERNAM>U2983</ERNAM>
<BCODE>P321185A123G060849</BCODE>
<BINFO>组件物料超出预定值?</BINFO>
</item>
<item>
<MANDT/>
<ZMODE>1</ZMODE>
<MATNR>17N4V10-HW3-1-02</MATNR>
<IDNRK>P321185A123G060850</IDNRK>
<YBBH/>
<ERSDA>2017-10-23</ERSDA>
<ERTIM>12:03:05</ERTIM>
<FLAG>2</FLAG>
<QUNT>1</QUNT>
<ERNAM>U2983</ERNAM>
<BCODE>P321185A123G060849</BCODE>
<BINFO>组件物料超出预定值?</BINFO>
</item>
</OUT_REC>
</ZZYUE_RFC_PP_ZXBD_NEW.Response>
</soap-env:Body>
其中OUT_REC
下有多个item
,需要使用for each循环遍历所有item
- 添加
for each
组件
初始化for each组件有四个变量需要填
for each variable
:该变量表示每次循环从数组里面取到的对象in <XPath> of variable
:需要循环的变量Indexed by varriable
:保存每次循环的索引,从1开始计数with total count in variable
:保存数据大小
P_RESULT
是需要遍历的数组,其他变量可以自行指定类比java里面循环数组的方式
for(int i=0;i<result.size;++i){
Object item=result.get(i);
}
P_ITEM
相当于java里面的item
P_RESULT
相当于java 里面的result
P_INDEX
相当于java里面的i
只不过osb里面从1开始计数
P_COUNT
相当雨java里面的result.size
注意到上面XPath
变量我们还未设置
P_RESULT
表示的是一个完整的xml代码,xpath就是需要指定数组元素在该xml里面的路径,在这里面数组的路径为
soap-env:Body/ZZYUE_RFC_PP_ZXBD_NEW.Response/OUT_REC/item
soap-env:Body
是xml跟路径,可以用点.
表示
./ZZYUE_RFC_PP_ZXBD_NEW.Response/OUT_REC/item
另外ZZYUE_RFC_PP_ZXBD_NEW.Response
和OUT_REC
缺少命名空间,解决但方法是在xpath里面创建一个命名空间
名字可以自行指定,URI可以看下上面xml的代码
<ZZYUE_RFC_PP_ZXBD_NEW.Response xmlns="urn:sap-com:document:sap:rfc:ZZYUE_RFC_PP_ZXBD_NEW.response">
xmlns
就是命名空间的URI
修改xpath路径为
./cus:ZZYUE_RFC_PP_ZXBD_NEW.Response/cus:OUT_REC/cus:item
修改服务编排流程,增加一个report组件观察各个变量
测试运行
P_INDEX=2是因为每次循环P_INDEX都会被重新设置,因为有两次循环所以最后值为2
P_COUNT=2表示数组大小为2
Report里面也有两条数据