5.4.配置通用工具欄

2023-07-03 17:18 更新
在使用BDF2提供在流程模版在線配置時,可以看到它還為我們提供了一個通用工具欄配置的功能,利用這個通用工具欄配置,可以實現(xiàn)在我們配置的流程處理頁面中動態(tài)插入BDF2中提供的通用工具欄,在這個通用工具欄配置當中還可以定義工具欄的位置,位置可以選擇在流程業(yè)務頁面的上部或下部,或者在我們的業(yè)務頁面當中指定的工具欄中插入所配置的工具欄組件。
對于這個通用工具欄里工具里的組件,我們提供了一個名為IToolbarContentProvider接口,通過實現(xiàn)這個接口,并將接口實現(xiàn)類配置到Spring當中,可以為我們的通用工具欄提供所需要的工具欄組件,該接口的源碼如下:
IToolbarContentProvider接口
package com.bstek.bdf2.jbpm4.view.toolbar;
/**
 * @author Jacky.gao
 * @since 2013-6-3
 * 用于為流程中任務處理頁面的通用工具欄提供具體內(nèi)容
 */
public interface IToolbarContentProvider {
 /**
 * 返回包含要放置到通用工具欄上的具體內(nèi)容所在的具體dorado7的view名稱,
 *
比如bdf2.jbpm4.view.toolbar.impl.completetask.CompleteTaskToolbarContentProvider,這個系統(tǒng)默認提供
的用于完成任務的內(nèi)容提供者頁面
 * @return 返回一個具體view的名稱,不包含.d
 */
 String getView();
 /**
 * @return 返回能代表當前這個提供者的key,一個有意義的字符串,比如SimpleCompleteTask
 */
 String key();
 /**
 * @return 返回一段描述信息,用于說明這個提供者作用
 */
 String desc();
 /**
 * @return 返回這個提供者是否被禁用,返回true,那么這個提供者將不能使用
 */
 boolean isDisabled();
}
默認BDF2提供了三個IToolbarContentProvider接口的實現(xiàn)類,如下表所示:
實現(xiàn)類名
key
desc
isDisabled
CompleteTaskToolbarContentProviderSimpleCompleteTask直接完成任務false
JumpNodeToolbarContentProviderSimpleJumpToOtherTaskNode直接跳轉到其它任務節(jié)點false
SeeProcessImageToolbarContentProviderSeeProcessImage查看流程圖false
有了這三個默認的實現(xiàn)類,所以我們在配置流程模版的通用工具欄時默認就可以看到這三個工具欄組件提供者,如下圖所示:

一旦我們在配置當中使用了通用工具欄,并且為這個通用工具欄添加了所需要的工具欄組件,那么就可以在我們的業(yè)務處理頁面當中看到這個通用工具欄及其相關組件,如下圖所示:

BDF2默認提供的三個工具欄組件功能較為簡單,在實際使用當中,真正有價值的工具欄組件還需要與我們的流程業(yè)務結合起來,所以需要我們自己通過編寫IToolbarContentProvider接口實現(xiàn)類來自定義我們自己的工具欄組件。

關于IToolbarContentProvider接口,前面已經(jīng)有過介紹,在這個接口當中,比較重要的就是其中的getView方法,這個方法要求我們返回一個view的名稱,在這個view當中就包含了需要放置到我們提供的通用工具欄的組件,比如一個toolbarButton等。為什么要求我們工具欄組件提供者要返回一個view呢?

因為我們在任務業(yè)務頁面當中放置的工具欄組件一般實現(xiàn)的功能比較復雜,比如點擊一個ToolBarButton彈出一個Dialog,同時在Dialog里又顯示其它內(nèi)容或通過一個Action與后臺交互,對于這種比較復雜的組件,通過一個具體的View頁面來定義相對要簡單許多,所以我們這里IToolbarContentProvider接口提供了一個getView方法,要求返回一個view的具體名稱,這樣系統(tǒng)在渲染我們定義的任務處理頁面時,會根據(jù)傳遞過來的taskId參數(shù)查找當前頁面是否配置了通用工具欄,如果配置了,那就取出配置的相應組件提供者,通過調(diào)用這些組件提供者的getView方法返回的view名稱,動態(tài)創(chuàng)建一個Dorado7的View對象,將這個View對象根包含的所有組件復制到用戶所配置業(yè)務流程處理頁面當中,在復制組件時將排除ToolBar組件,所以我們在定義自定義工具欄組件對應的view頁面時一定要在view的根下添加一個toolbar組件,把需要放置通用工具欄上的組件放置在這個toolbar組件下,這樣這個toolbar組件下的內(nèi)容將會被復制到我們的通用工具欄當中。
我們以系統(tǒng)默認提供的CompleteTaskToolbarContentProvider為例,先來看看這個通用工具欄組件提供者的源碼:
CompleteTaskToolbarContentProvider源碼
package com.bstek.bdf2.jbpm4.view.toolbar.impl.completetask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.bstek.bdf2.jbpm4.service.IBpmService;
import com.bstek.bdf2.jbpm4.view.toolbar.IToolbarContentProvider;
import com.bstek.dorado.annotation.Expose;
/**
 * @author Jacky.gao
 * @since 2013-6-3
 */
@Component("bdf2.jbpm4.completeTaskToolbarContentProvider")
public class CompleteTaskToolbarContentProvider implements
 IToolbarContentProvider {
 @Value("${bdf2.jbpm4.disabledCompleteTaskToolbarContentProvider}")
 private boolean disabled;
 @Autowired
 @Qualifier(IBpmService.BEAN_ID)
 private IBpmService bpmService;
 public String getView(){
 return "bdf2.jbpm4.view.toolbar.impl.completetask.CompleteTaskToolbarContentProvider";
 }
 public String key() {
 return "SimpleCompleteTask";
 }
 public String desc() {
 return "直接完成任務";
 }
 public boolean isDisabled() {
 return disabled;
 }
 @Expose
 public void completeTask(String taskId){
 bpmService.completeTaskById(taskId);
 }
}
可以看到這個用于完成任務的工具欄組件提供者采用的view頁面名稱為“bdf2.jbpm4.view.toolbar.impl.completetask.CompleteTaskToolbarContentProvider”,我們再來看看這個View,如下圖所示:

可以在這個頁面view的根下定義了一個toolbar,在這個toolbar當中添加了可以出現(xiàn)在通用工具欄下的ToolBarButton,再來看看這個View頁面的源碼:
View源碼
<?xml version="1.0" encoding="UTF-8"?>
<ViewConfig>
 <Arguments/>
 <Context/>
 <Model/>
 <View>
 <AjaxAction id="ajaxActionCompleteTask">
 <ClientEvent name="onSuccess">dorado.MessageBox.alert("操作成功");
var win=window.parent;
if(win){
 var taskListUrl="${configure.getString("bdf2.jbpm4.listTodoTaskUrl")}";
 win.open(taskListUrl,"_self");
}</ClientEvent>
 <Property name="parameter">${request.getParameter("taskId")}</Property>
 <Property
name="service">bdf2.jbpm4.completeTaskToolbarContentProvider#completeTask</Property>
 <Property name="confirmMessage">真的要完成當前任務嗎?</Property>
 </AjaxAction>
 <ToolBar>
 <ToolBarButton>
 <Property name="icon">url(skin>common/icons.gif) -180px -120px</Property>
 <Property name="caption">完成任務</Property>
 <Property name="action">ajaxActionCompleteTask</Property>
 </ToolBarButton>
 </ToolBar>
 </View>
</ViewConfig>
需要特別注意的是,因為通用工具欄組件對應的View頁面里的所有組件將會復制到我們的業(yè)務流程處理頁面當中,所以在定義組件ID時要小心不要與業(yè)務流程處理頁面當中組件出現(xiàn)重名,另外,對于通用工具欄組件對應的View頁面,系統(tǒng)只會復制View節(jié)點下面的組件,而不會處理Arguments、Context及Model節(jié)點,所以在定義這個View頁面時,我們需要將所有的信息都放在這個View節(jié)點下,如果要使用DataType,那么需要將這個DataType定義成全局的,而不能定義到Model節(jié)點變成私有的,否則在加載這個組件時將出現(xiàn)找不到DataType的錯誤。

對于我們的業(yè)務流程處理頁面,如果頁面布局比較復雜,或者希望將通用工具欄放置到指定位置(而不一定是頁面頂部或底部),這個時候就可以在我們的業(yè)務頁面當中添加一個工具欄,并將這個工具欄的ID設置為bdf2.jbpm4.genericTaskToolBarId屬性的值,這樣我們所定義的所有組件都會輸出到用戶指定的這個工具欄之上。

通過上述內(nèi)容介紹,相應您已經(jīng)對BDF2-JBPM4模塊當中提供的這個可配置的通用工具欄有了比較深入的認識,其實在Dorado7環(huán)境下,在開發(fā)業(yè)務流程處理頁面時,我們除了可以通過配置的方式為處理頁面添加通用工具欄外,我們還可以在開發(fā)業(yè)務流程處理頁面時利用Dorado7提供的頁面模版功能,更為靈活的定制我們的業(yè)務流程處理頁面。與我們的通用工具欄相比,Dorado7提供的頁面模版功能更為靈活,但需要我們在開發(fā)業(yè)務流程處理頁面時采用這個模版,所以他們二者各有優(yōu)劣,我們可以根據(jù)項目情況及我們個人喜好靈活選擇。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號