UAP Readme:
上機考試開發步驟:
1.建立uap項目
配置數據庫連接
2.配置server地址
http://localhost:8080/sguap-server/environment/platform/Version1.0.0
3.白名單開啟相關功能:
client_include_modules.properties (bpm)
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"
5.在uap項目的policy.xml文件中開啟exam模塊項目
<module-repository id="workspace" path="F:\\UAP\\uapspace">
<module>exam</module>
</module-repository>
6.建立后綴pm的文件,導入持久化模型,設置主鍵,建立表關系
7.建立名為main的ui文件,畫出主布局,生成主weblet頁面代碼
8.通過場景生成相關頁面的weblet
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>如果第一、二個參數為空,則拋出異常
* <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()
}
