UAP Readme:javascript
上機考試開發步驟:css
1.創建uap項目
配置數據庫鏈接前端
2.配置server地址
http://localhost:8080/sguap-server/environment/platform/Version1.0.0java
3.白名單開啓相關功能:
client_include_modules.properties (bpm)node
4.創建模塊項目exam
如需後臺調用bpm,在META-INF\MAINFEST.MF文件的Dependencies的Imported Packages中添加
com.sgcc.uap.bpm.api,com.sgcc.uap.bpm.exception,org.sotower.bpm.api.data;version="3.5.0"web
5.在uap項目的policy.xml文件中開啓exam模塊項目
<module-repository id="workspace" path="F:\\UAP\\uapspace">
<module>exam</module>
</module-repository>spring
6.創建後綴pm的文件,導入持久化模型,設置主鍵,創建表關係sql
7.創建名爲main的ui文件,畫出主佈局,生成主weblet頁面代碼數據庫
8.經過場景生成相關頁面的webletapache
9.在main的weblet使用WebletContainer容器加載場景weblet
10.經過主頁面的事件,向子頁面傳值,完成聯動
備註:
1.業務系統和ISC集成:配置platformconfig.properties文件
ISC_APPID=4028818b4217576a01421777dfc40007
ISC_ADAPTER_URL=http://127.0.0.1:9898/isc_sm
1.業務系統和BPM集成:配置platformconfig.properties文件
#####################################流程集成配置##########################################
#BPM鏈接ID
BPM_UDDI_ADDRESS_ID=default
#BPM鏈接名稱
BPM_UDDI_ADDRESS_NAME=BPM
#BPM鏈接描述
BPM_UDDI_ADDRESS_DESCRIPTION=
#BPM服務器的地址,對應BPM default應用下的WEB-INF\_srv\config\uddi-config.xml中的<host>
BPM_UDDI_ADDRESS_UUDIHOST=127.0.0.1
#BPM服務器端口,對應BPM default應用下的WEB-INF\_srv\config\uddi-config.xml中的<port>
BPM_UDDI_ADDRESS_UUDIPORT=12000
#BPM應用上下文名稱,對應BPM default應用下的WEB-INF\_srv\config\uddi-config.xml中的<context>
BPM_UDDI_ADDRESS_UUDIWEBCONTEXT=default
#BPM遠程端口,對應BPM default應用下的WEB-INF\web.xml中的<param-name>AdminPort</param-name>的param-value
BPM_UDDI_ADDRESS_UUDIADMINPORT=6200
3.BPM和ISC集成:
BPM\apache-tomcat-5.5.20\webapps\default\WEB-INF\lib
isc_bpm2.0_20130726.jar中的system.properties添加systemID=4028818b4217576a01421777dfc40007
isc_sm_agent.jar中的iscservicesadapter.properties添加uri=http://isc.sm.com:9898/isc_sm
4.修改hosts文件,本機使用:C:\Windows\System32\drivers\etc
127.0.0.1 isc.sm.com
127.0.0.1 isc.mp.com
127.0.0.1 isc.manage.com
127.0.0.1 sso.isc.com
127.0.0.1 isc.ora_db.com
127.0.0.1 isc.jms.com
127.0.0.1 isc.sguap.com
127.0.0.1 isc.frontmvserv.com
5.開啓調試工具
IE F12
Chrome Ctrl+Shift+i
FireFox Ctrl+Shift+s
UAP Java Code:
package com.sgcc.uap.common.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.sotower.bpm.api.data.BPMCreateOption; import org.sotower.bpm.api.data.FinishOption; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.sgcc.isc.core.orm.identity.User; import com.sgcc.uap.bizc.sysbizc.datadictionary.IDataDictionaryBizC; import com.sgcc.uap.bpm.api.BPMServiceClientFactory; import com.sgcc.uap.bpm.api.IBPMProcessInstManager; import com.sgcc.uap.bpm.api.IBPMServiceClient; import com.sgcc.uap.bpm.api.IBPMWorkItemManager; import com.sgcc.uap.integrate.isc.wrapper.factory.AdapterWrapperFactory; import com.sgcc.uap.persistence.IHibernateDao; import com.sgcc.uap.rest.annotation.ItemResponseBody; import com.sgcc.uap.rest.support.DicItems; import com.sgcc.uap.rest.support.QueryResultObject; import com.sgcc.uap.rest.utils.RestUtils; public class ExamJavaCode { /*******************************BPM開始**************************************/ /** *流程發起 * * @param businessId * 業務id,如缺陷登記表中新增記錄的主鍵ID * @param processDefName * 流程定義名稱 * @param processInstName * 流程實例名稱 * @param userId * 須要調用者傳輸的參數變量,當前流程節點的處理人用戶id * @param userName * 須要調用者傳輸的參數變量,當前流程節點的處理人用戶姓名,或者用戶id */ public static String startBpm(String businessId, String processDefName, String processInstName, String userId, String userName) { IBPMServiceClient client; try { BPMServiceClientFactory.getLoginManager().setCurrentUser(userId, userName); client = BPMServiceClientFactory.getBPMServiceClient(); IBPMProcessInstManager processInstManager = client .getProcessInstManager(); Map conditionMap = new HashMap(); conditionMap.put("BUSINESSID", businessId); BPMCreateOption cOption = new BPMCreateOption(); cOption.setRelativeData(conditionMap); //cOption.setFinishFirstWorkItem(true); long processInstId = processInstManager .createProcessInstWithOption(processDefName, processInstName, processInstName, true, cOption); return "1"; } catch (Exception e) { e.printStackTrace(); return "0"; } } /** * 流程發送 * * @param workItemId * 流程活動實例號,即工做項id,,須要調用者用Long.valueOf(request.getParameter("workitemid" * ))獲取, * @param userId * 須要調用者傳輸的參數變量,當前流程節點的處理人用戶id * @param userName * 須要調用者傳輸的參數變量,當前流程節點的處理人用戶姓名,或者用戶id */ public static String send(Long workItemId, String userId, String userName) { // long workitemid = // Integer.valueOf(request.getParameter("workitemid"));//流程活動實例號,即工做項id, IBPMServiceClient client = BPMServiceClientFactory .getBPMServiceClient(); BPMServiceClientFactory.getLoginManager().setCurrentUser(userId, userName); IBPMWorkItemManager iwfwMgr = client.getWorkItemManager(); try { FinishOption option = new FinishOption(); iwfwMgr.finishWorkItemWithOption(workItemId, option); return "1"; } catch (Exception e) { e.printStackTrace(); return "0"; } } /*******************************緩存數據字典開始**************************************/ @Autowired private IDataDictionaryBizC dataDictionaryBizC; /** * 將字典對象封裝爲list * "category"是前端MX DropdownEditor綁定的name, PROJECT.TYPE是"config/enum/enum.properies" 文件中定義的名字 * @return */ public List<DicItems> wrapDictList() { List<DicItems> dicts = new ArrayList<DicItems>(); dicts.add(translateFromFile("category", "PROJECT.TYPE")); dicts.add(translateFromFile("condition", "PROJECT.STATUS")); dicts.add(translateFromFile("condition1", "TASK.STATUS")); return dicts; } /** * get dict item form "config/enum/enum.properies" file * @param fieldName * @param dicId * @return */ public DicItems translateFromFile(String fieldName, String dicId) { List<Map<String, String>> list = dataDictionaryBizC.translateFromFile( dicId, "value", "text"); DicItems dict = new DicItems(); dict.setName(fieldName); dict.setValues(list); return dict; } /*******************************獲取用戶信息開始**************************************/ /** * 獲取當前用戶ID */ @SuppressWarnings("unchecked") public static String getUserId(HttpServletRequest request){ if(request.getSession()!=null){ Map userMap = (Map)request.getSession().getAttribute("user"); if(userMap != null)return (String)userMap.get("id"); } return null; } /** * 獲取當前用戶名 */ @SuppressWarnings("unchecked") public static String getUserName(HttpServletRequest request){ if(request.getSession()!=null){ Map userMap = (Map)request.getSession().getAttribute("user"); if(userMap != null)return (String)userMap.get("name"); } return null; } /** * get users from isc by user ids */ public List<User> getUsersByUserIds(String[] userIds) throws Exception { List<User> users = AdapterWrapperFactory.getIdentityService().getUserByIds(userIds); return users; } @RequestMapping(value="/viewuser",method=RequestMethod.GET) public @ItemResponseBody QueryResultObject viewuser(HttpServletRequest request){ String[] userIds = new String[1]; Object userMap = request.getSession().getAttribute("user"); if(userMap instanceof Map) { String userId = ((Map)userMap).get("id").toString(); userIds[0] = userId; } List<User> users = new ArrayList<User>(); try { users = AdapterWrapperFactory.getIdentityService().getUserByIds(userIds); } catch (Exception e) { e.printStackTrace(); } QueryResultObject result = RestUtils.wrappQueryResult(users); return result; } /*******************************多表頭SQL語句行轉列開始**************************************/ @Autowired private IHibernateDao hibernateDao; public void setHibernateDao(IHibernateDao hibernateDao) { this.hibernateDao = hibernateDao; } /** * select eval_name, eval_base, sum(decode(dep_name,'北京公司',eval_mark,0))bj_sum_mark, sum(decode(dep_name,'天津公司',eval_mark,0))tj_sum_mark, sum(decode(dep_name,'浙江省公司',eval_mark,0))zj_sum_mark, sum(decode(dep_name,'江蘇省公司',eval_mark,0))js_sum_mark from sg_dep dep, dep_mark mark, proj_eval eval where dep.dep_id = mark.dep_id and mark.eval_no = eval.eval_no group by eval_name, eval_base order by eval_name */ public QueryResultObject queryProvinceSum(){ StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("select eval_name, eval_base,"); sqlBuilder.append(" sum(decode(dep_name,'北京公司',eval_mark,0))bj_sum_mark,"); sqlBuilder.append(" sum(decode(dep_name,'天津公司',eval_mark,0))tj_sum_mark,"); sqlBuilder.append(" sum(decode(dep_name,'浙江省公司',eval_mark,0))zj_sum_mark,"); sqlBuilder.append(" sum(decode(dep_name,'江蘇省公司',eval_mark,0))js_sum_mark"); sqlBuilder.append(" from sg_dep dep, dep_mark mark, proj_eval eval"); sqlBuilder.append(" where dep.dep_id = mark.dep_id"); sqlBuilder.append(" and mark.eval_no = eval.eval_no"); sqlBuilder.append(" group by eval_name, eval_base"); sqlBuilder.append(" order by eval_name"); String sql = sqlBuilder.toString(); List groupDataList = hibernateDao.queryForListWithSql(sql); return RestUtils.wrappQueryResult(groupDataList); }; /*******************************模糊查詢開始**************************************/ /** * 查詢主表中的記錄 * @param params * @return queryResult */ @RequestMapping(value="/xiangmu/",method=RequestMethod.GET) public @ItemResponseBody QueryResultObject query(@QueryRequestParam("params") RequestCondition params){ if(params.getQueryFilter() != null) { List<QueryFilter> queryFilters = params.getQueryFilter(); for(int i = queryFilters.size() - 1; i >= 0; i--) { QueryFilter qf=queryFilters.get(i); if("name1".equals(qf.getFieldName())) { qf.setFieldName("name1"); qf.setOperator("^"); queryFilters.add(qf); queryFilters.remove(i); } if("startdate".equals(qf.getFieldName())) { qf.setDataType("java.sql.Date"); queryFilters.add(qf); queryFilters.remove(i); } if("enddate".equals(qf.getFieldName())) { qf.setDataType("java.sql.Date"); queryFilters.add(qf); queryFilters.remove(i); } } params.setFilter((List<QueryFilter>)queryFilters); } QueryResultObject queryResult = projectMoreTaskBizc.queryMaster(params); List list = queryResult.getItems(); List<XiangmuVO> voList = new ArrayList<XiangmuVO>(); for(int i = 0;i < list.size();i++){ Xiangmu po = (Xiangmu)list.get(i); XiangmuVO vo = XiangmuTransfer.toVO(po); voList.add(vo); } queryResult.setItems(voList); return queryResult; } }
UAP Javascript Code:
/*******************************導入包開始**************************************/ $import("mx.containers.Accordion"); $import("mx.containers.Panel"); $import("mx.containers.HSplit"); $import("mx.containers.VSplit"); $import("mx.containers.Container"); $import("mx.containers.TabControl"); $import("mx.containers.TabPage"); $import("mx.controls.ToolBar"); $import("mx.datacontainers.FormEntityContainer"); $import("mx.datacontrols.DataForm"); $import("mx.datacontainers.GridEntityContainer"); $import("mx.datacontrols.DataGridSearchBox"); $import("mx.datacontrols.DataGrid"); $import("mx.datacontrols.ComplexGrid"); $import("mx.datacontrols.DataTree"); $import("mx.datacontainers.TreeEntityContainer"); /*******************************佈局控件上下分割HSplit開始**************************************/ var HSplit1 = null; var HSplit1Area0 = null; var HSplit1Area1 = null; _initHSplit1(); _initHSplit1Area0(); _initHSplit1Area1(); function _initHSplit1(){ HSplit1 = new mx.containers.HSplit({ id:"HSplit1", rows:"50%,50%" }); me.addControl(HSplit1); } function _initHSplit1Area0(){ HSplit1Area0 = new mx.containers.Container({ id:"HSplit1Area0" }); HSplit1.addControl(HSplit1Area0, 0); } function _initHSplit1Area1(){ HSplit1Area1 = new mx.containers.Container({ id:"HSplit1Area1" }); HSplit1.addControl(HSplit1Area1, 1); } /*******************************佈局控件左右分割VSplit開始**************************************/ var VSplit1 = null; var VSplit1Area0 = null; var VSplit1Area1 = null; _initVSplit1(); _initVSplit1Area0(); _initVSplit1Area1(); function _initVSplit1(){ VSplit1 = new mx.containers.VSplit({ id:"VSplit1", cols:"20%,80%" }); me.addControl(VSplit1); } function _initVSplit1Area0(){ VSplit1Area0 = new mx.containers.Container({ id:"VSplit1Area0" }); VSplit1.addControl(VSplit1Area0, 0); } function _initVSplit1Area1(){ VSplit1Area1 = new mx.containers.Container({ id:"VSplit1Area1" }); VSplit1.addControl(VSplit1Area1, 1); } /*******************************佈局控件手風琴Accordion開始**************************************/ var Accordion1 = null; var Panel1 = null; var Panel2 = null; _initAccordion1(); _initPanel1(); _initPanel2(); function _initAccordion1(){ Accordion1 = new mx.containers.Accordion({ id:"Accordion1" }); me.addControl(Accordion1); } function _initPanel1(){ Panel1 = new mx.containers.Panel({ id:"Panel1", border:"0", title:"Panel" }); Accordion1.appendPanel(Panel1); } function _initPanel2(){ Panel2 = new mx.containers.Panel({ id:"Panel2", border:"0", title:"Panel" }); Accordion1.appendPanel(Panel2); } /*******************************佈局控件選項卡TabControl開始**************************************/ var TabControl = null; var TabPage1 = null; _initTabControl(); _initTabPage1(); function _initTabControl(){ TabControl = new mx.containers.TabControl({ id:"TabControl", width:"100%" }); VSplit1Area1.addControl(TabControl); } function _initTabPage1(){ TabPage1 = new mx.containers.TabPage({ id:"TabPage1", autoInit:true, width:"100%", text:"歡迎", name:"TabPage1" }); TabControl.appendPage(TabPage1); } me.getTabControl = function(){ return TabControl; } /*******************************動態添加選項卡TabControl開始**************************************/ me._tree_onclick=function(e){ //create new tab page when note has no children if(!e.node.hasChildren){ var nodeId = e.node.id; var nodeName = e.node.text; var pages = me.view.getTabControl().pages; if(!isContainPageById(pages, nodeId)){ var nodePage = mx.containers.TabPage({ id:nodeId, alias:nodeId, name:nodeId, width:"100%", closable:true, text:nodeName }); me.view.getTabControl().appendPage(nodePage); } me.view.getTabControl().pages[nodeId].show(); me.view.getTabControl().selectPage(me.view.getTabControl().pages[nodeId]); //add weblet to tab page if(me.view.getTabControl().pages[nodeId].controls.length < 1){ var container = new mx.containers.Container(); var webletContainer = new mx.weblets.WebletContainer({ $e:container.$e, webletID: nodeId }); me.view.getTabControl().pages[nodeId].addControl(container); } } } function isContainPageById(pages, pageId){ var isContain = false; var pages = me.view.getTabControl().pages; if(pages.length > 0){ for(var i = 0; i < pages.length; i++){ if(pages[i].id == pageId){ isContain = true; break; } } } return isContain; } /*******************************數據控件DataForm開始**************************************/ var _form = null; _initDataForm(); function _initDataForm() { var restUrl = "~/rest/deployapp/"; /* 初始化 EntityContainer */ var formEntityContainer = new mx.datacontainers.FormEntityContainer({ baseUrl : appinfo.mappath(restUrl), iscID : "-1", // iscID 是數據元素的統一權限功能編碼。默認值爲 "-1" ,表示不該用權限設置。 primaryKey: "appId" }); _form = new mx.datacontrols.DataForm({ alias:"appinfoDetailViewDataForm", displayPrimaryKey: false, fields: [ { name: "appId", caption: "應用ID", editorType: "TextEditor", visible:false}, { name: "appName", caption: "應用名稱", editorType: "TextEditor"}, { name: "dispIdx", caption: "部署順序", editorType: "TextEditor"}, { name: "unitId", caption: "部署單元ID", editorType: "TextEditor"} ], entityContainer: formEntityContainer }); me.addControl(_form); } me.getForm = function(){ return _form; } /*******************************數據控件DataGrid開始**************************************/ var _dataGrid = null; _initDataGrid(); function _initDataGrid() { var restUrl = "~/rest/deployapp/"; /* 初始化 EntityContainer */ var gridEntityContainer = new mx.datacontainers.GridEntityContainer({ baseUrl : appinfo.mappath(restUrl), iscID : "-1", // iscID 是數據元素的統一權限功能編碼。默認值爲 "-1" ,表示不該用權限設置。 primaryKey: "appId" }); /* 初始化 DataGrid */ _dataGrid = new mx.datacontrols.ComplexGrid({ // 構造查詢屬性。 alias: "appinfoMainViewDataGrid", searchBox: new mx.datacontrols.DataGridSearchBox({ fields: [ ] }), columns:[ { name: "appId", caption: "應用ID" , editorType: "TextEditor" }, { name: "appName", caption: "應用名稱" , editorType: "TextEditor" }, { name: "dispIdx", caption: "部署順序" , editorType: "TextEditor" }, { name: "unitId", caption: "部署單元ID" , editorType: "TextEditor", visible:false } ], // 構造列排序條件,若是有多列,則以逗號分隔。例sorter: "school ASC, class DESC" displayCheckBox: true, displayPrimaryKey:false,//列表是否顯示主鍵 allowEditing: false, //列表默認不可編輯 pageSize : 20, entityContainer: gridEntityContainer, onload: me.controller._dataGrid_onload, onitemclick: me.controller._dataGrid_onitemclick, create: me.controller._btnNew_onclick, remove: me.controller._btnDelete_onclick }); //重置toolBar按鈕項 _resetToolBarItems(); VSplit1Area1.addControl(_dataGrid); } /** * 重置按鈕項 */ function _resetToolBarItems(){ _dataGrid.toolBar.removeByName("new"); //去除保存按鈕 _dataGrid.toolBar.removeByIndex(1); _dataGrid.toolBar.removeByName("save"); /*//插入編輯按鈕 _dataGrid.toolBar.insertItem(2,"-",true); _dataGrid.toolBar.insertItem(3,{ name: "edit", text: mx.msg("EDIT"), toolTip: mx.msg("EDIT"), imageKey : "edit", onclick: me.controller._btnEdit_onclick},true);*/ } me.getDataGrid = function(){ return _dataGrid; } /*******************************多表頭GroupHeaderGrid開始**************************************/ //////////////view中的代碼 var SumDataGrid = null; _initSumDataGrid(); function _initSumDataGrid() { //var restUrl = "~/rest/sgdep/"; /* 初始化 EntityContainer */ var gridEntityContainer = new mx.datacontainers.GridEntityContainer({ type:"local", //baseUrl : provincesum.mappath(restUrl), iscID : "-1", // iscID 是數據元素的統一權限功能編碼。默認值爲 "-1" ,表示不該用權限設置。 primaryKey: "compId" }); SumDataGrid = new mx.datacontrols.GroupHeaderGrid({ columns: [ { name:"EVAL_NAME", caption:"評價項目名稱", }, { name:"EVAL_BASE", caption:"基準分", }, { name:"PAR_PARENT", caption:"華北地區", columns:[ { name:"BJ_SUM_MARK", caption:"北京公司" }, { name:"TJ_SUM_MARK", caption:"天津公司" } ] }, { name:"PAR_PARENT", caption:"華東地區", columns:[ { name:"JS_SUM_MARK", caption:"江蘇省公司" }, { name:"ZJ_SUM_MARK", caption:"浙江省公司" } ] } ], pageSize: 20, entityContainer: gridEntityContainer }); //SumDataGrid.load(); me.addControl(SumDataGrid); } me.getSumDataGrid = function(){ return SumDataGrid; } //////////////view controller中的代碼 me._onactivate = function(e) { me.load_provinceSum(); }; me.load_provinceSum = function() { var restClient = new mx.rpc.RESTClient(); var p_context = restClient.get( provincesum.mappath("~/rest/provincesum/"), me.load_provinceSum_complete ); }; me.load_provinceSum_complete = function(p_data) { if(p_data && p_data.successful) { me.view.getSumDataGrid().entityContainer.data = p_data.resultValue.items; me.view.getSumDataGrid().load(); } } /*******************************數據控件DataTree開始**************************************/ var _treeView = null; _initTreeView(); function _initTreeView() { _treeView = new mx.datacontrols.DataTree({ baseUrl: leave.mappath("~/rest/examdep/tree"), displayCheckBox: true, // 是否須要在樹中顯示選中框 onnodeclick: me.controller._tree_onclick, onselectionchanged: me.controller._tree_selectionchanged }); HSplitLeftArea1.addControl(_treeView); _initContextMenu(); } function _initContextMenu() { _treeView.nodeMenu = new mx.controls.ContextMenu({ items: [ { name: "refresh", text: "刷新" } // 菜單項能夠嵌套,表示子菜單 ], // 菜單項集合 onitemclick: me.controller._contextMenuItem_click }); } me.getTreeView = function(){ return _treeView; } /*******************************彈出表單開始**************************************/ /////////view中代碼 var _detailWin = null; _initDetailWindow(); /** * 初始化表單視圖窗口對象 */ function _initDetailWindow(){ _detailWin = appinfo.context.windowManager.create({ reusable: true,//是否複用 width:640, height:480, title:"表單維護" }); } /** * 獲取表單視圖窗口對象 */ me.getDetailWindow = function(){ return _detailWin; } /////////view controller中代碼 var _detailView = null; /** * 獲取表單視圖對象 */ me._getDetailFromView = function(){ if (_detailView == null) { var mvc = new appinfo.views.DetailViewController(); _detailView = mvc.getView(); _detailView.getForm().entityContainer.off("saved", me._refreshDataGrid); _detailView.getForm().entityContainer.on("saved", me._refreshDataGrid); } return _detailView; } /** * 新增 */ me._btnNew_onclick = function() { // TODO: 此處新增的數據須要將服務端返回的 id 值設置到 GridItem 上。 var _detailView = me._getDetailFromView(); //設置對象id _detailView.objID = null; _showDetailFormView(_detailView,"表單填寫"); }; /** * 顯示錶單視圖 * @param p_view : 須要顯示的視圖對象 * @param p_title : 對話框的標題 */ function _showDetailFormView(p_view,p_title){ var win = me.view.getDetailWindow(); if(typeof p_view != "undefined"){ p_view.load(); //設置顯示視圖、標題信息 win.setPosition("fixed"); win.setView(p_view); win.setTitle(p_title ? p_title : win.title); } win.showDialog(); } /*******************************JS處理BPM開始**************************************/ requires:["bpm/bpmintegrate"], onload: function(e) { $import("bpmintegrate.utils.BPMClient"); }, /** * 調用js流程發起 */ me._btnStartJS_onclick = function (){ var _dataGrid = me.view.getDataGrid() if (_dataGrid.getCheckedIDs().length == 0) { mx.indicate("info", "請勾選一條待編輯記錄。"); return; } // 多選框勾選記錄,判斷是否選擇多條 if (_dataGrid.getCheckedIDs().length > 1) { mx.indicate("info", "選定的記錄條數不能超過一條。"); return; } // 判斷已勾選記錄的流程狀態,只容許沒有發起流程的狀態 var lczt = _dataGrid.getCheckedItems()[0].getValue("lczt"); if (lczt == "0" || lczt == null|| lczt == "" ||lczt == "null") { // 發起流程,參數爲勾選記錄的ID var bpmclient = new bpmintegrate.utils.BPMClient();//建立js代理對象 var params = "{\"BUSINESSID\" : \"" + _dataGrid.getCheckedIDs()[0] + "\"}";//業務主鍵 /** * 建立流程實例,能夠選擇是否當即啓動,可帶參數 * * <p> * 注意事項: * <ul> * <li>若是第1、二個參數爲空,則拋出異常 * <li>若是第一參數對應的流程定義找不到發佈版本,則拋異常 * </ul> * * @param processDefName 流程定義名稱 * @param processInstName 流程實例名稱 * @param processInstDesc 流程實例描述 * @param isStart 是否啓動流程實例 * *@param finishFirst 是否完成第一個工做項,取值爲true或false * @param relativeData 流程參數,格式爲{key1:value1,key2:value2}的JSON串 */ var flag = bpmclient.createProcessInstWithOption("vacation","請假流程管理","",true,false,params); if(flag){ mx.indicate("info", "流程建立成功"); //發起成功後處理業務邏輯 _dataGrid.load(); }else{ mx.indicate("info", "流程建立失敗"); } } else { mx.indicate("info", "選定記錄的流程已發送,不能再次發送!"); return; } } /** * 調用js流程推送 */ me._btnSendJS_onclick = function(){ me.view.form.save(function(p_data) { if(p_data) { savedObj = p_data.successful; if(!savedObj) { alert("信息保存【失敗】,不能發送流程!"); return; } var bpmclient = new bpmintegrate.utils.BPMClient(); /** * 完成工做項 * * @param workItemId 工做項ID */ var flag = bpmclient.finishWorkItem(me.workItemIdD); if(flag){ mx.indicate("info", "流程發送成功"); } } }); } /*******************************form自動填寫不渴編輯開始**************************************/ onload: me.controller.setDepId_onload, me.setDepId_onload = function() { me.view.getForm().entityContainer.data.setValue("depId", me.view.depId); me.view.getForm().setFieldReadOnly("depId", true); }; /*******************************前端調用後臺開始**************************************/ var client = new mx.rpc.RESTClient(); var startUrl = "~/../exam/rest/examfeedetail/updateStatus"; var businessData = { businessId : checkedID, status : status }; client.get(startUrl, businessData, function(p_flag) {} // End of callback function ); /*******************************weblet container使用**************************************/ var WebletContainer = null; function _initWebletView() { WebletContainer = new mx.weblets.WebletContainer({ $e: HSplitRightArea0.$e, webletID: "emp" }); //WebletContainer.view.getDataGrid().on("itemclick",me.controller._emp_onitemclick); } me.getWebletContainer = function(){ return WebletContainer; } /*******************************導出excel使用開始**************************************/ me._btnExportExcel_onclick = function() { me.view.getDataGrid().exportExcel( { tableName:"exam_fee_detail", columnNames:"fee_Id,emp_Id,fee,sub_Time,end_Time,fee_Status", columnCaptions:"報銷流水ID,員工ID,報銷金額,提交時間,結束時間,報銷進度", fileName:"報銷表單" }); }; /*******************************rendCell使用開始**************************************/ { name: "operate", caption: "操做" , isVirtual: true, editorType: "TextEditor" , renderCell:me.controller._btnOpreateColumn_onclick } me._btnOpreateColumn_onclick = function(p_item, $p_cell) { var editLinkEditor = new mx.editors.LinkEditor( { "type" : "imgtext",//指定連接的類型。 "width" : "30",//指定控件寬度。 "imageKey" : "1",//指定圖標名稱。 "text" : "編輯" }); editLinkEditor.on("click", me._btnSubEdit_onclick); var deleteLinkEditor = new mx.editors.LinkEditor( { "type" : "imgtext",//指定連接的類型。 "width" : "30",//指定控件寬度。 "imageKey" : "1",//指定圖標名稱。 "text" : "刪除" }); deleteLinkEditor.on("click", me._btnSubDelete_onclick); $p_cell.append(editLinkEditor.$e); $p_cell.append(deleteLinkEditor.$e); }; /** * datagrid單元格渲染變色 */ me._btnMasterItem_oncelledited = function(e) { if(e.column.name == "compName"){ e.cell.css("background-color","green"); } }; /*******************************Form field變色開始**************************************/ { name: "leader", caption: "法人", editorType: "TextEditor", onchanged:me.controller._btnSubItem_oncelledited}, me._btnSubItem_oncelledited = function() { //me.view.getForm().getEditor("leader").$e.css("background-color","red"); me.view.getForm().getEditor("leader").$e.find("input").css("background-color","red"); }; /*******************************FilteEditor開始**************************************/ //注意type用form仍是grid { name: "operFile", caption: "投標文件", editorType: "FileEditor", type: "form" , uploadMode: "blob" , tableName: "proj_unit_detail" , primaryKey: "ID" , colName: "OPER_FILE" }, /*******************************圖表使用開始**************************************/ ////圖表前端代碼 var lineContainer=null; var chartTitle={}; var chartAxes={}; var dataTable=null; var createLineChart=null; _initLineChartContainer(); _initRemoteChart(); //建立div,用於繪製圖表 function _initLineChartContainer(){ lineContainer=new mx.containers.Container({ id:"divLineChartContainer" }); me.addControl(lineContainer); } /** * create pie chart */ function _createLineChart(){ createLineChart = new mx.charts.ChartWrapper({ //設置圖表類型 plotType: "CategorizedHorizontal",// 柱狀圖 globalSettings : { animation:{ enabled:true } }, title: {text: "部門設備數統計"},//建立標題對象 height: "100%", width: "100%", // 設置圖表系列顯示方式。default_series_type 默認值 Bar,可選值 Bar、RangeBar、Line、RangeArea、RangeSplineArea、 // Spline、Marker、Area、Bubble、Candlestick、OHLC等。 data_plot_setting: { pie_series:{ label_settings:{ enabled:true, position:{ anchor:"Center", padding:20 }, format:"{%Name}-{%YPercentOfSeries}{numDecimals:1}%" } }, tooltip_settings:{ enabled:true, format:"{%Name}Sales: ${%Value}Percent: {%YPercentOfSeries}{numDecimals: 2}%" } }, chart_settings: { chart_background:{ border: {color: "blue", thickness: 2}, corners: {type: "Rounded"}, // type 默認值 Square,可選值 Square、Cut、Rounded、RoundedInner。分別表明方角、切角、圓角。 effects: {drop_shaddow: {enabled: true}} },//設置圖表背景。 axes: { y_axis: {title: {text: "設備數"}}, x_axis: {title: {text: "部門"}} } //設置圖表縱、橫座標標題。 }, data_plot_background: { fill: {type: "Gradient", opacity: 0.5}, //type 默認值 Solid,可選值 Solid、Gradient、Image,分別表明實線、漸變、圖片填充。 effects: {enabled: true, inner_shaddow: {enabled: true, distance: 5, angle: 30}} },//設置圖表數據區域背景。 palettes: {item: {color: "red, blue, yellow"}, gradient: {type: "Radial"}}//type 默認值 Linear,可選值 Linear、Radial,分別表明線性填充和輻射填充。 }); createLineChart.setData(dataTable); createLineChart.draw("divLineChartContainer"); } //初始化遠程表格屬性 function _initRemoteChart(){ /*chartTitle.text="部門設備數統計"; chartAxes.y_axis={title:{text:"設備數"}}; chartAxes.x_axis={title:{text:"部門"}}; dataTable = new mx.datas.DataTable({ rows: [ {cells:[{value:"江蘇"},{value:1000}]}, {cells:[{value:"南京"},{value:800}]}, {cells:[{value:"蘇州"},{value:600}]}, {cells:[{value:"揚州"},{value:650}]} ] });*/ chartTitle.text="設備數統計"; chartAxes.y_axis={title:{text:"設備數"}}; chartAxes.x_axis={title:{text:"公司"}}; var restClient = new mx.rpc.RESTClient(); var p_context=restClient.getSync( case4.mappath("~/rest/uapbm/chart/") ); p_context = "{rows:[{cells:[{value:'江蘇省電力公司'},{value:'2'}]},{cells:[{value:'南京電力公司'},{value:'1'}]},{cells:[{value:'蘇州電力公司'},{value:'1'}]}]}"; var jsonObj=eval("("+p_context+")"); dataTable = new mx.datas.DataTable(jsonObj); } ////圖表後臺代碼 @RequestMapping(value="/chart",method=RequestMethod.GET) public @RawResponseBody Object getChartValue() { @SuppressWarnings("unchecked") //根據公司名查詢出公司以及公司對應的設備數 List<Object> chartValueList = departBizc.getChartValue(); //封裝DataTable格式 StringBuffer dataTable=new StringBuffer(); dataTable.append("{rows:["); for (int i = 0; i < chartValueList.size(); i++) { Object[] obj=(Object[])chartValueList.get(i); if(i==chartValueList.size()-1){ dataTable.append("{cells:[{value:'"+obj[0]+"'},{value:'"+obj[1]+"'}]}"); } else{ dataTable.append("{cells:[{value:'"+obj[0]+"'},{value:'"+obj[1]+"'}]},"); } } dataTable.append("]}"); System.out.println(dataTable.toString()); return dataTable; //do not use toString() }