BPEL中使用doXslTransform處理multiple input
BPEL中提供一個doXslTransform function,由於BPEL本身提供資料處理的能力有限,但有了XSL,資料處理能力卻大大提升了。
在學習BPEL的過程中,一開始總對於資料處理充滿了苦惱,尤其是Array。在程式中,陣列是不可或缺的資料結構,使用上也極為容易,只要一行宣告就可輕輕鬆鬆使用。但在BPEL卻是困難重重,舉個例子,有個WS(WS1)提供銷售訂單頭檔查詢;另一個WS(WS2)能提供銷售訂單尾檔的查詢,現下有個需求是將頭檔尾檔合併,即每筆頭檔內包含有自己的尾檔,而尾檔內則有一到多筆資料。
這樣的需求,只要會些程式的,何難之有。但在BPEL,如果沒有XSL,根本無法做到。但是如果會用XSL,同樣也是何難之有。以下是doXslTransform function的範例,完整範例可參考這裡。
這個例子是將兩個服務的response合併成一個response,然後再由process回覆給使用者。當然doXslTransform可以同時傳進多個parameter,因此利用XSL就可做到將多個WS的response做合併,例如以下的情況就可用到,呼叫多個WS並將結果合併成單一報表的欄位。
在使用的過程中,發現如果XSLT使用variable去承接doXslTransform傳進來的物件,會無法取得多個同名的element,要使用param才行。
ps. 到現在還不是很清楚variable和param的差別。
在學習BPEL的過程中,一開始總對於資料處理充滿了苦惱,尤其是Array。在程式中,陣列是不可或缺的資料結構,使用上也極為容易,只要一行宣告就可輕輕鬆鬆使用。但在BPEL卻是困難重重,舉個例子,有個WS(WS1)提供銷售訂單頭檔查詢;另一個WS(WS2)能提供銷售訂單尾檔的查詢,現下有個需求是將頭檔尾檔合併,即每筆頭檔內包含有自己的尾檔,而尾檔內則有一到多筆資料。
這樣的需求,只要會些程式的,何難之有。但在BPEL,如果沒有XSL,根本無法做到。但是如果會用XSL,同樣也是何難之有。以下是doXslTransform function的範例,完整範例可參考這裡。
doXslTransform("Combine.xsl", $WS1.response, "DATA", $WS2.response)
這個例子是將兩個服務的response合併成一個response,然後再由process回覆給使用者。當然doXslTransform可以同時傳進多個parameter,因此利用XSL就可做到將多個WS的response做合併,例如以下的情況就可用到,呼叫多個WS並將結果合併成單一報表的欄位。
在使用的過程中,發現如果XSLT使用variable去承接doXslTransform傳進來的物件,會無法取得多個同名的element,要使用param才行。
ps. 到現在還不是很清楚variable和param的差別。
留言