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
組件
ni
初始化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里面也有兩條數據