項目上需要使用Lombardi即IBM Websphere BPM7.5,就由我承擔起了研究和部署、實施的任務。由於公司之前沒有使用過該平臺,所以幾乎沒有現成的資源。只能從IBM的開發網站上下載英文資料進行研究。值得高興的是最終成功的完成了lombardi的的部署和實施任務。
下面是之前研究Lombardi中所整理的一些關於WebAPI的一些資料,希望對需要使用lombardi的人有所幫助。
1. WebAPI相關接口和類說明
以下是Lombardi提供的WebAPI所有內容。在這裏對每個類做了概要說明,詳細內容需要參考相關文檔。並且每個類的具體應用方法和能夠達到的效果需要在通過實踐才能最終確定。
接口 | |
WebAPI | 主要用於連接lombardi,從而獲取必要的數據信息;以及涉及到流程的具體操作: 1)獲取流程實例、當前用戶、所有角色、任務分配; 2)優先級更改; 3)到期日期的修改; 4)終止流程、流程暫停; 5)啓動一個新的流程; 6)開始執行任務、關閉任務; 7)執行搜索獲取流程實例; 8)創建、刪除文檔等 |
類 | |
確定用戶是否可以執行特定的操作與過程實例或任務。可以獲取和設置該值 | |
用來獲取流程本身定義的變量及其值。 | |
ChartData包含的是在記分板中被引用的圖像數據。 | |
ClientInfo | 獲取客戶端的信息。 |
ComplexValue用於包裝複雜類型的值傳遞給WebAPI操作,並且可以包含任何命名空間中的單個元素。該類是用來傳遞複雜類型對象的值。 | |
已字符串鍵/值對的形式獲取和設置用戶自定義屬性。 | |
Document | 保存跟流程實例相關的文件類。 |
已字符串鍵/值對的形式獲取文檔中附帶的屬性。 | |
實現活動的自定義屬性、輸入和輸出參數。 | |
用來連接外部活動的定義和外部活動數據 | |
封裝和傳遞ExternalActivityAttachment所需要的變量 | |
我的最愛定義了一種用戶啓動一個進程或服務中的成員的喜愛。 | |
支持office的infopath在線表單 | |
Infopath表單相關附件 | |
Infopath表單相關數據 | |
爲流程和活動定義參數 | |
標示任務的重要性 | |
一個過程是業務流程的定義,可用於啓動新的流程實例或組返回的過程實例,通過這個API的各種操作。 | |
流程實例 | |
流程實例狀態 | |
角色 | |
客戶端使用一個SavedSearch執行搜索來獲取進程實例和/或任務 | |
用戶可以通過Scoreboard 查看自己的工作效率等信息 | |
ScoreboardData包含實際數據 | |
用來搜素流程實例運行和任務中的數據 | |
流程搜索列 | |
流程實例搜索列 | |
任務搜索列 | |
搜索類型 | |
一個SearchColumn是用於指定搜索傳遞列,條件和排序。 | |
搜索條件 | |
SearchMetaData用來描述信息,需要執行搜索和搜索結果的描述。 | |
一個用於指定SearchOrdering,搜索結果中的列進行排序的升序或降序排列。 | |
在一個SearchResultRow包含的一組值 - 符合搜索條件的搜索中的每個列的值。 | |
一個SearchResults對象包含在搜索中指定的列和行包含每一列的值的列表的搜索排序排序的列元數據。 | |
SendTaskInfo可用於構建和發送與流程實例沒有直接相關的任務。 | |
描述服務的相關信息 | |
一個任務要執行的服務 | |
任務是包含信息有關的活動的一個實例,通常與流程實例相關聯。 | |
TaskListSyncInput用於同步客戶端在服務器上執行已保存的搜索結果。 | |
TaskListSyncOutput包含客戶端需要同步的任務列表在服務器上的當前狀態保存的搜索列表的變化。 | |
任務狀態 | |
一個TaskSyncItem指示客戶端應該怎樣做同步的任務列表中保存的搜索結果。 | |
用戶 | |
UserConfiguration用於從服務器檢索有關當前用戶在單個操作中的的信息。 | |
變量 |
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 對象。下面代碼 1 用於初始 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; }
|
代碼中 username,password 爲可訪問 WLE 流程的用戶。
2.2 使用 Web API 查詢待辦任務
Web API 提供了 Search 類幫助我們查詢流程實例或任務。我們可以通過 Search 類的 setSearchColumn 指定需要查詢的項目,通過 setSearchConditions 指定查詢條件,通過 setOrderBy 指定查詢結果排序。代碼 2 是查詢待辦任務的代碼示例。
代碼 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