java:
源碼:/Files/obpm/onlinetakephoto.rar
原創(chuàng)人員:Denny
在obpm系統(tǒng)后臺(tái)表單右上角有一個(gè)“一鍵生成視圖”功能。實(shí)現(xiàn)它的真正目的是為了后臺(tái)管理人員方便從實(shí)現(xiàn)好的表單中快速生成所有帶值的列的視圖。這樣管理人員就不需要手工新建視圖,然后再添加視圖中的帶值的列。
實(shí)現(xiàn)原理圖:
在實(shí)現(xiàn)原理圖中,我們發(fā)現(xiàn)沒有視圖中并沒有不帶值Field4相應(yīng)的Column4在視圖中,這是因?yàn)樵谝晥D中是要根據(jù)不同Column顯示不同的值的。如果Column是不帶值的話,那么視圖中就不應(yīng)該要這個(gè)Column,即使是要了,在視圖中沒有意義了。
實(shí)現(xiàn)原理代碼:
其中代碼路徑是:src-java-cn-myapps-core-dynaform-form-ejb-FormProcessBean.java
/**
* 根據(jù)表單編號(hào)來生成視圖
* @param formid 表單編號(hào)
* @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存儲(chǔ)值的field
//新建視圖
View view = new View();
if (view.getId() == null || view.getId().trim().length() <= 0) {
view.setId(Sequence.getSequence());//設(shè)置視圖的ID
view.setSortId(Sequence.getTimeSequence());//設(shè)置視圖的排序ID }
view.setName(form.getName());//把表單的名字賦給視圖
view.setOpenType(view.OPEN_TYPE_NORMAL); //設(shè)置視圖打開類型-普通類型
view.setLastmodifytime(new Date());//最后修改日期
view.setApplicationid(form.getApplicationid());//把表單應(yīng)用程序Id賦給視圖的應(yīng)用程序Id
view.setModule(form.getModule());//把表單模塊Id賦給視圖的模塊ID
view.setPagelines("10");//設(shè)置視圖的分頁每頁顯示10條數(shù)據(jù)
view.setShowTotalRow(true); //是否顯示總共條數(shù)數(shù)據(jù)
view.setPagination(true); //是否分頁顯示
view.setRelatedForm(form.getId());//把表單ID賦給視圖的映射表單,從而映射了該表單
//將表單中對應(yīng)有值的列轉(zhuǎn)換為視圖的列
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());//把表單中應(yīng)用程序的ID賦給Column的表單應(yīng)用程序ID
column.setFieldName(field.getName()); //把表單中的名稱賦給Column的表單名稱
column.setParentView(view.getId());//將視圖ID賦給Column的父視圖
view.getColumns().add(column); //將視圖和Column關(guān)聯(lián)
i++;
}
//分別創(chuàng)建兩個(gè)按鈕 新建,刪除
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); //將視圖和新建按鈕關(guān)聯(lián)
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); //將視圖和刪除按鈕關(guān)聯(lián)
viewPross.doCreate(view); //創(chuàng)建視圖
return form;
}
后臺(tái)效果圖:
表單:
視圖:
視圖列:
視圖按鈕:
前臺(tái)效果:
視圖:
表單:
原創(chuàng)人員:Denny