Lombardi WebAPI 詳解

項目上需要使用Lombardi即IBM Websphere BPM7.5,就由我承擔起了研究和部署、實施的任務。由於公司之前沒有使用過該平臺,所以幾乎沒有現成的資源。只能從IBM的開發網站上下載英文資料進行研究。值得高興的是最終成功的完成了lombardi的的部署和實施任務。

下面是之前研究Lombardi中所整理的一些關於WebAPI的一些資料,希望對需要使用lombardi的人有所幫助。

 

1. WebAPI相關接口和類說明

以下是Lombardi提供的WebAPI所有內容。在這裏對每個類做了概要說明,詳細內容需要參考相關文檔。並且每個類的具體應用方法和能夠達到的效果需要在通過實踐才能最終確定。

 

接口

WebAPI

主要用於連接lombardi,從而獲取必要的數據信息;以及涉及到流程的具體操作:

1)獲取流程實例、當前用戶、所有角色、任務分配;

2)優先級更改;

3)到期日期的修改;

4)終止流程、流程暫停;

5)啓動一個新的流程;

6)開始執行任務、關閉任務;

7)執行搜索獲取流程實例;

8)創建、刪除文檔等

  

Action

ActionPermission

確定用戶是否可以執行特定的操作與過程實例或任務。可以獲取和設置該值

BusinessData

用來獲取流程本身定義的變量及其值。

ChartData

ChartData包含的是在記分板中被引用的圖像數據。

ClientInfo

獲取客戶端的信息。

ComplexValue

ComplexValue用於包裝複雜類型的值傳遞給WebAPI操作,並且可以包含任何命名空間中的單個元素。該類是用來傳遞複雜類型對象的值。

CustomProperty

已字符串鍵/值對的形式獲取和設置用戶自定義屬性。

Document

保存跟流程實例相關的文件類。

DocumentProperty

已字符串鍵/值對的形式獲取文檔中附帶的屬性。

ExposedItem

ExposedItemType

ExternalActivity

實現活動的自定義屬性、輸入和輸出參數。

ExternalActivityAttachment

用來連接外部活動的定義和外部活動數據

ExternalActivityData

封裝和傳遞ExternalActivityAttachment所需要的變量

Favorite 

我的最愛定義了一種用戶啓動一個進程或服務中的成員的喜愛。

FavoriteType

InfoPathForm

支持officeinfopath在線表單

InfoPathFormAttachment

Infopath表單相關附件

InfoPathFormData

Infopath表單相關數據

Parameter 

爲流程和活動定義參數

Priority 

標示任務的重要性

Process 

一個過程是業務流程的定義,可用於啓動新的流程實例或組返回的過程實例,通過這個API的各種操作。

ProcessInstance

流程實例

ProcessInstanceStatus

流程實例狀態 

Report 

Role 

角色

SavedSearch

客戶端使用一個SavedSearch執行搜索來獲取進程實例和/或任務

Scoreboard 

用戶可以通過Scoreboard 查看自己的工作效率等信息

ScoreboardData

ScoreboardData包含實際數據

Search 

用來搜素流程實例運行和任務中的數據

SearchableProcessColumn

流程搜索列

SearchableProcessInstanceColumn

流程實例搜索列 

SearchableTaskColumn

任務搜索列

SearchableType

搜索類型 

SearchColumn

一個SearchColumn是用於指定搜索傳遞列,條件和排序。

SearchColumnMetaData

SearchCondition

搜索條件

SearchMetaData

SearchMetaData用來描述信息,需要執行搜索和搜索結果的描述。

SearchOperator

SearchOrder

SearchOrdering

一個用於指定SearchOrdering,搜索結果中的列進行排序的升序或降序排列。

SearchResultRow

在一個SearchResultRow包含的一組值 符合搜索條件的搜索中的每個列的值。

SearchResults

一個SearchResults對象包含在搜索中指定的列和行包含每一列的值的列表的搜索排序排序的列元數據。

SendTaskInfo

SendTaskInfo可用於構建和發送與流程實例沒有直接相關的任務。

ServerInfo

描述服務的相關信息

Service 

一個任務要執行的服務

Task 

任務是包含信息有關的活動的一個實例,通常與流程實例相關聯。

TaskListSyncInput

TaskListSyncInput用於同步客戶端在服務器上執行已保存的搜索結果。

TaskListSyncOutput

TaskListSyncOutput包含客戶端需要同步的任務列表在服務器上的當前狀態保存的搜索列表的變化。

TaskStatus

任務狀態

TaskSyncAction

TaskSyncItem

一個TaskSyncItem指示客戶端應該怎樣做同步的任務列表中保存的搜索結果。

UpdateDocument

UpdateDocumentResponse

User 

用戶

UserConfiguration

UserConfiguration用於從服務器檢索有關當前用戶在單個操作中的的信息。

Variable 

變量

 2. Web API 的使用場景及具體實現

下面將使從3個場景進行講解WebAPI。分別是使用 Web API 查詢待辦任務使用 Web API 獲取業務數據使用 Web API 更新流程數據並推動流程繼續流轉

 

2.1 WebAPI初始化

具體介紹如何靈活使用 Web API 完成與客戶自定義 Web 應用的整合。這裏提到的客戶自定義應用泛指開發商自行開發的應用或第三方應用。本稿將會介紹如何實現最常用的 Web API 接口,關於更多接口請參考 LombardiInstallDir\web-api 目錄。

在使用 Web API 之前,需要先初始 Web API 對象。WebSphere Lombardi Edition 將流程及相關數據封裝成 Web Service,並提供了訪問 Web Service 的 JAX-PRC 接口的 WebAPIFactory 類。我們可以通過構建 WebAPIFactory 實例來初始 Web API 對象。下面代碼 用於初始 Web API 對象。


代碼 1. 初始 Web API 對象

                

 private WebAPI WebAPI

 public static String ServerRoot="http://localhost:19086/"; 

    

 /** initialize WebAPI object **/ 

 public void initWebAPI(String username, String password){ 

 WebAPIFactory WebAPIFactory; 

 try { 

 WebAPIFactory = WebAPIFactory.newInstance(this.getProperties(username, password)); 

 WebAPI = WebAPIFactory.newWebAPI(); 

 }catch (Exception e) { 

 e.printStackTrace(); 

 } 

 } 

 

 /** Set process properties **/ 

 public Properties getProperties(String username, String password){ 

        

 Properties properties = new Properties(); 

 properties.put("javax.xml.rpc.security.auth.username", username ); 

 properties.put("javax.xml.rpc.security.auth.password", password); 

 properties.put("javax.xml.rpc.service.endpoint.address", 

 this.ServerRoot + "WebAPI/services/WebAPIService"); 

 properties.put("javax.xml.rpc.session.maintain", "true"); 

 properties.put("com.lombardisoftware.includeNullArrayElements", "true"); 

 

 return properties; 

 } 

 

 

代碼中 usernamepassword 爲可訪問 WLE 流程的用戶。

 

 

2.2 使用 Web API 查詢待辦任務

Web API 提供了 Search 類幫助我們查詢流程實例或任務。我們可以通過 Search 類的 setSearchColumn 指定需要查詢的項目,通過 setSearchConditions 指定查詢條件,通過 setOrderBy 指定查詢結果排序。代碼 是查詢待辦任務的代碼示例。


代碼 2. 查詢待辦任務

                

 /** Search inbox tasks **/ 

 public SearchResults searchMyTask() throws Exception { 

 //Create a new search instance 

 Search search = new Search(); 

 

 //Set it to be organized by Task 

 search.setOrganizedByType(SearchableType._Task); 

 

 //Specify the columns to return 

 search.setColumns(new SearchColumn[] { 

 new SearchColumn(SearchableType._Process, SearchableProcessColumn._Name, null), 

 new SearchColumn(SearchableType._ProcessInstance,

  SearchableProcessInstanceColumn._Id, null), 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Id, null), 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Status, null), 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Subject, null), 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Activity, null), 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._ReceivedDate, null), 

  new SearchColumn(SearchableType._Task, SearchableTaskColumn._ClosedDate, null), 

  new SearchColumn(SearchableType._Task, SearchableTaskColumn._AssignedToUser, null), 

 }); 

        

 //Set the conditions - search tasks with status of new or received 

 search.setConditions(new SearchCondition[] { 

 new SearchCondition( 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Status, null), 

    SearchOperator._EQUALS, 

    TaskStatus._New_or_Received), 

  new SearchCondition( 

 new SearchColumn(SearchableType._Process, SearchableProcessColumn._Name, null), 

    SearchOperator._NOT_EQUALS, 

    null) 

 }); 

 

 //Set the results to be ordered by task ID ascending 

 search.setOrderBy(new SearchOrdering[] { 

    new SearchOrdering( 

 new SearchColumn(SearchableType._Task, SearchableTaskColumn._Id, null), 

      SearchOrder.ASCENDING)                        

 }); 

 

 //Execute the inbox saved search, retrieving the first 20 results 

 SearchResults results = WebAPI.executeSearch(search, 20, null); 

 

 return results; 

 } 

 

 

本稿以 JSP 作爲客戶端頁面,介紹如何在客戶自定義的表單裏使用上面定義的 SearchResults 類獲取查詢結果(代碼 3)。


代碼 3. 將待辦任務查詢結果返回 JSP 頁面

                

 <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 

 <%@ page language="java" import="com.myWebAPI.*,teamworks.samples.client.WebAPIFactory, 

 com.lombardisoftware.WebAPI.*"%> 

 <% 

 HttpSession sessionObj= request.getSession(); 

 String username = (String)sessionObj.getAttribute("userName"); 

 String password = (String)sessionObj.getAttribute("password"); 

 

 MyWebAPI WebAPI = new MyWebAPI(); 

 String ServerRoot=WebAPI.getServerRoot(); 

 WebAPI.initWebAPI(username,password); 

 SearchResults results = null; 

 results= WebAPI.searchMyTask(); 

 %> 

 

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

 <html> 

 <head> 

 -- 省略 -- 

 </head> 

 <body> 

 <table border="2"> 

 <% 

 for( int i=0; i<results.getRows().length; i++ ){ 

 SearchResultRow row=results.getRows()[i]; 

 %> 

 <tr> 

 <% 

 String processName = (String)row.getValues(0); 

 long piId = ((Long)row.getValues(1)).longValue(); 

 long taskId = ((Long)row.getValues(2)).longValue(); 

 String status = (String)row.getValues(3); 

 Task task = WebAPI.getTaskByID(taskId); 

 String activity = (String)row.getValues(6); 

 String subject = (String)row.getValues(4); 

 String AssignedToUser = (String)row.getValues(11);       

     %> 

     <td> 

 <%=piId%> 

            </td> 

            <td> 

       <%=processName%> 

            </td> 

            <td> 

       <%=taskId%> 

            </td> 

            <td> 

       <%=activity%> 

            </td> 

            <td> 

       <%=AssignedToUser%> 

            </td> 

            <td> 

            </tr>  

      <% } %>     

     </table> 

 </body> 

 </html> 

 

 

我的博客已經搬家到 七色光  http://www.sevenlight.me

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章