obpm一鍵生成視圖功能原理
在obpm系統后臺表單右上角有一個“一鍵生成視圖”功能。實現它的真正目的是為了后臺管理人員方便從實現好的表單中快速生成所有帶值的列的視圖。這樣管理人員就不需要手工新建視圖,然后再添加視圖中的帶值的列。
實現原理圖:

在實現原理圖中,我們發現沒有視圖中并沒有不帶值Field4相應的Column4在視圖中,這是因為在視圖中是要根據不同Column顯示不同的值的。如果Column是不帶值的話,那么視圖中就不應該要這個Column,即使是要了,在視圖中沒有意義了。
實現原理代碼:
其中代碼路徑是:src-java-cn-myapps-core-dynaform-form-ejb-FormProcessBean.java
/**
* 根據表單編號來生成視圖
* @param formid 表單編號
* @throws Exception
*/
public Form oneKeyCreateView(String formid) throws Exception {
FormProcess formPross = (FormProcess) ProcessFactory.createProcess(FormProcess.class);
ViewProcess viewPross = (ViewProcess) ProcessFactory.createProcess(ViewProcess.class);
Form form = (Form) formPross.doView(formid);//獲得form
Collection formfield=form.getValueStoreFields();//獲得form存儲值的field
//新建視圖
View view = new View();
if (view.getId() == null || view.getId().trim().length() <= 0) {
view.setId(Sequence.getSequence());//設置視圖的ID
view.setSortId(Sequence.getTimeSequence());//設置視圖的排序ID }
view.setName(form.getName());//把表單的名字賦給視圖
view.setOpenType(view.OPEN_TYPE_NORMAL); //設置視圖打開類型-普通類型
view.setLastmodifytime(new Date());//最后修改日期
view.setApplicationid(form.getApplicationid());//把表單應用程序Id賦給視圖的應用程序Id
view.setModule(form.getModule());//把表單模塊Id賦給視圖的模塊ID
view.setPagelines("10");//設置視圖的分頁每頁顯示10條數據
view.setShowTotalRow(true); //是否顯示總共條數數據
view.setPagination(true); //是否分頁顯示
view.setRelatedForm(form.getId());//把表單ID賦給視圖的映射表單,從而映射了該表單
//將表單中對應有值的列轉換為視圖的列
int i=0;
for(Iterator iterator=formfield.iterator();iterator.hasNext();){
FormField field=(FormField)iterator.next();
Column column = new Column();
if (column.getId() == null || column.getId().trim().length() <= 0) {
column.setId(Sequence.getSequence());
column.setOrderno(i);
}
if(field.getDiscript()!=null && !field.getDiscript().equals("")){//如果該表單中帶值Field有描述的話,就作為視圖Column,否則的用Field名稱
column.setName(field.getDiscript());
}else{
column.setName(field.getName());
}
column.setFormid(form.getId());//把表單中的ID賦給Column的表單ID
column.setApplicationid(form.getApplicationid());//把表單中應用程序的ID賦給Column的表單應用程序ID
column.setFieldName(field.getName()); //把表單中的名稱賦給Column的表單名稱
column.setParentView(view.getId());//將視圖ID賦給Column的父視圖
view.getColumns().add(column); //將視圖和Column關聯
i++;
}
//分別創建兩個按鈕 新建,刪除
Activity activityCreate = new Activity();
if (activityCreate.getId() == null || activityCreate.getId().trim().length() <= 0) {
activityCreate.setId(Sequence.getSequence());
activityCreate.setOrderno(0);
}
activityCreate.setApplicationid(form.getApplicationid());
activityCreate.setName("新建");
activityCreate.setParentView(view.getId());
activityCreate.setType(ActivityType.DOCUMENT_CREATE);
activityCreate.setOnActionForm(form.getId());
view.getActivitys().add(activityCreate); //將視圖和新建按鈕關聯
Activity activityDelete = new Activity();
if (activityDelete.getId() == null || activityDelete.getId().trim().length() <= 0) {
activityDelete.setId(Sequence.getSequence());
activityDelete.setOrderno(1);
}
activityDelete.setApplicationid(form.getApplicationid());
activityDelete.setName("刪除");
activityDelete.setParentView(view.getId());
activityDelete.setType(ActivityType.DOCUMENT_DELETE);
view.getActivitys().add(activityDelete); //將視圖和刪除按鈕關聯
viewPross.doCreate(view); //創建視圖
return form;
}
后臺效果圖:
表單:

視圖:

視圖列:

視圖按鈕:

前臺效果:
視圖:

表單:

原創人員:Denny
文章來源:
http://www.cnblogs.com/obpm/archive/2010/07/12/1775453.html
posted on 2010-07-12 02:08
obpm 閱讀(417)
評論(0) 編輯 收藏 所屬分類:
表單 、
視圖