dorado
///校驗名稱長度 end/
---------------------------------------------------------------------------------------
var type = arg.data.get("TYPE");
var change =? arg.data.get("CHANGE_STATE");
if(type != 3){
?if(change == "A"){//綠色
??arg.dom.style.background = "#37FF37" //"#37B44A"?
?}else if(change == "U"){//藍色
??arg.dom.style.background = "#C1EFEF"//"#00BFF3"?
?}else if(change == "D"){//紅色
??arg.dom.style.background = "#FDDFED"//"#EE1D24"?
?}else{
??arg.dom.style.background = ""?
?}
}else{
?arg.dom.style.background = ""?
}
arg.processDefault = true;
-----------------------------------------------------
遍歷樹結構的表
SELECT *
? FROM ocm_kpi_write_act_v
?WHERE ocm_graph_card_id = '8a58bc943f9d7e35013f9d7fb2dc0003'
CONNECT BY PRIOR ID = parent_id
?START WITH parent_id = '-1';
select *
? from ocm_kpi_write_act_vs m
?where m.OCM_GRAPH_CARD_ID = '8a58bc943f9d7e35013f9d7fb2dc0003';
------------------------------------------------------------------
SELECT *?
? FROM OCM_KPI_WRITE_V?
? WHERE ocm_graph_card_id='8a58bc883f884a4d013f88666ad90006'?
?CONNECT BY PRIOR ID = parent_id?
?START WITH parent_id ='-1'
? --8a58bc943f9d7e35013f9d7fb2dc0003
??
select *?
? from ocm_kpi_write_vs t?
? where t.OCM_GRAPH_CARD_ID ='8a58bc943f9d7e35013f9d7fb2dc0003';
? OCM_KPI_WRITE_V
??
? OCM_KPI_WRITE_VS
? ----------------------------------------------
-----------dataType屬性beforeDataChange------判斷開始日期小于結束日期
switch(arg.property){
?case "ACT_START_DATE" :
? var endDate = arg.entity.get("ACT_END_DATE")
? var startDate = arg.newValue;
? var ds = view.id("dataSetOcmActPlan").getData("#");
? if(startDate>endDate){
? ?dorado.MessageBox.alert("字段【開始時間】不能大于字段【結束時間】");
??arg.entity.set("ACT_END_DATE",arg.newValue)
? }
?break;
?case "ACT_END_DATE" :
??var startDate = arg.entity.get("ACT_END_DATE")
?? var endDate = arg.newValue;
?? var ds = view.id("dataSetOcmActPlan").getData("#");
?? if(startDate>endDate){
?? ?dorado.MessageBox.alert("字段【結束時間】不能小于字段【開始時間】");
???arg.entity.set("ACT_START_DATE",arg.newValue)
?? }
?break;
}
------------------------------------------------------------------------------------
dataTree的寬窄屬性:position:200;
--------------從session中獲取當前登錄人的部門ID-------------------------------------------------------------------
public String getSessionDeptId(){
??return SessionHelper.getCurrentDeptId();
?}
String userId = SessionHelper.getLoginSysUserId();
??String ip = SessionHelper.getClientIp();
----------------------------------------
部門ID轉NAME---:要注意名字的統(tǒng)一
@Transient
?public String getHrDeptName() {
??SysDeptLoader sdLoader = SpringFactory.getBean("SysDeptLoader");
??String hrDeptName = sdLoader.getSysDeptNameBySysDeptId(this.getHrDeptId(), "zh_CN");
??return hrDeptName;
?}
--------------------------------
POJO首頁返回流程狀態(tài)
---
@Autowired
?@JdbcDaor
?private IJdbcDao jdbcDao;
?
?@Autowired
?CommonHibernateDao commonHibernateDao;
?
?@DataProvider
?public void getDataWithBpmEntryV(Criteria criteria, Object parameter, Page page) {
??jdbcDao.page("CompositeOcmGraphCard", criteria, parameter, page);
??Collection<Record> records = page.getEntities();
??for (Record r: records){
???String activityNames=new BpmEntity().getEntityActivityNamesByFormId(commonHibernateDao,r.getString("ID").toString());
???/*//String activityNames = "測試綜合圖卡";
???bpmToolService.getActivityNamesByFormId(r.getString("ID").toString()) ;
???//String state = "已經完成";
???bpmToolService.getProcessStateByFormId(r.getString("ID").toString()) ;*/
???String state = new BpmEntity().getEntityStateByFromId(commonHibernateDao,r.getString("ID").toString());
???//流程實例ID
???String entryId =? new BpmEntity().getEntityIdByFromId(commonHibernateDao, r.getString("ID").toString());
???String executionId =? new BpmEntity().getExecutionId(commonHibernateDao, r.getString("ID").toString());
???String taskId =? new BpmEntity().getTaskId(commonHibernateDao, r.getString("ID").toString());
???
???r.put("ATTRIBUTE_10", entryId);
???r.put("ACTIVITY_NAMES", activityNames);
???r.put("ACTIVITY_STATE", state);
???r.put("ATTRIBUTE_09", executionId);
???r.put("ATTRIBUTE_08", taskId);
??}
?}
---------------------------------------------------------------------?
var data = view.get("#dataSetAddForm.data:#");
--------------------------------
dataTree樹上高亮顯示
---------------
var ocmKpiWriteId =view.get('#dataSetOcmActPlan').getData('#').get('ocmKpiWriteId');
var firstNode =view.get("#dataTree").get('firstNode');
queryNode(firstNode,true);
return true;
------------------樹節(jié)點上取值-----
???var currentEntity = this.id("treeGrid").get("currentEntity");
if (currentEntity) {
?//根節(jié)點和戰(zhàn)略角度節(jié)點不能被刪除
??????? if (currentEntity.get("PARENT_ID") !=-1 && currentEntity.get("TYPE") !="3" ) {
---
//遞歸查找樹上對應節(jié)點? mac2013-7-10
function queryNode(node,sign){
?if(sign){
??var nodes=node.get('nodes');
??nodes.each(function(obj){??
?????? var OCM_KPI_WRITE_ID=obj.get('data').get('OCM_KPI_WRITE_ID');
???//alert(obj.get('data').get('NAME')+"OCM_KPI_WRITE_ID---"+OCM_KPI_WRITE_ID+"---"+ocmKpiWriteId);
????????? if(obj.get('data').get('OCM_KPI_WRITE_ID')==ocmKpiWriteId){
??? ?//alert(obj.get('data').get('NAME')+'!!!!!');
????obj.highlight();?
????return false;
??? }else{
??? ?var sd=queryNode(obj,true);
??? }
? });
?}else{
??//alert(1);
??return false;
?}
}
----------------------------------------------------------
table行高亮顯示
--
var change = arg.data.get("CHANGE_STATE");
if (change == "A") {//綠色
??? arg.dom.style.background = "#fff100" //"#37B44A"?
}else if (change == "U") {//藍色
??????? arg.dom.style.background = "#00FF00"//"#00BFF3"?
}else if (change == "D") {//紅色
??????????? arg.dom.style.background = "#EE1D24"?
}else {
? arg.dom.style.background = ""
}
arg.processDefault = true;
----------------操作,詳細鏈接--------------------------------------
var id = arg.data.get("id");
jQuery(arg.dom).empty();
jQuery(arg.dom).xCreate({
??? tagName: "A",
??? href: "#",
??? content: "詳細",
??? style: "font-size:13px",
??? onclick: function(){
??view.get("#detailIframe").set("path","${web.contextPath}/avicit/ocm/kpimanager/ocmactplan/view/actsubproject/OcmActSubProjectDetail.d7?isFlow=true&id=" + id);
??view.get("#dialogDetail").show();
?}});
------------------------------------------------
var button1 = $DomUtils.xCreate({
?tagName: "button",
?id:"button1",
?content: "Click Me",// 定義按鈕的標題?
?onclick: function(){
??// 定義onclick事件????
??alert("Button clicked.");
?}},{
?tagName: "button",
?content: "Click You",// 定義按鈕的標題?
?onclick: function(){
??// 定義onclick事件???
?}}??
);
-------------------------------------------
//找到dataTreeGrid的property列綁定onGetCellEditor監(jiān)聽事件
view.get("#dataTreeGrid1").findColumns(property)[0].set({
??? trigger: view.get("#recommendDropdown"),?? //綁定下拉框
??? onGetCellEditor :function(self, arg){
??????? //獲取ajax對象
??????? var ajaxGetListAction = view.get("#ajaxGetDropDownItem");
???????
??????? //設置ajax請求參數
??????? ajaxGetListAction.set("parameter",param);
??????? //執(zhí)行ajaxAction請求獲取下拉框值
??????? ajaxGetListAction.execute(function(result){
??????? view.get("#recommendDropdown").set("items",result);
??????? });
??? }
});
----------------------------
onGetCellEditor :function(self, arg){
??? arg.editor.set("trigger",view.get("#recommendDropdown"))
?}
-----------------
---------------------------table設置某一列的只讀---------
?view.get("#MainData").findColumns("YEAR_FROM")[0].set({
?? // trigger: ,?? //綁定下拉框
??? onRenderCell :function(self, arg){
?var v=?arg.data.get("YEAR_FROM");
?????? if(v=='2012'){??? ?
??? arg.cellEditor.createEditorControl();//獲取對應的Editor對象
? // arg.editor.set("readOnly",true);
??? }else{
??? //?arg.editor.set("readOnly",false);
??? }
??? }
});
--------------------------------------------
jQuery(arg.dom).empty();
jQuery(arg.dom).xCreate({
??? tagName: "A",
??? href:"#",
??? content:arg.data.get("YEAR_FROM"),
?style:"font-size:12px;color:red"
});
----------------------------------
---js替換訪問路徑------------------
$ReportRoot="rqreport/reportJsp/showReport.jsp?raq=/subjectOcmCardReport.raq&cardId=";
var rootPath='${web.contextPath}';
var ServerNAME=rootPath.substring(1);
localPath=rootPath.replace(ServerNAME,$ReportRoot);
-------------------------------------------
----------------------------------------
dynaRowHeight : boolean from AbstractGrid[WriteBeforeReady]?
是否支持動態(tài)行高的功能。
----------------------------------------------
stretchcolumnsmode
表格列的寬度調整模式
---------------
--dataTreeGrid的Column的屬性onRenderCell事件
var context = {};
var status = arg.data.get("planType");
var png="";
if(status == '晴天'){
?png = "qing";
}else if(status == '陰天'){
?png = "yin";
} else if(status == '大雨'){
?png = "yu";
} else if(status == '多云'){
?png = "duoyun";
} else{
?arg.dom.innerHtml ="<a href=#>"+status+"</a>";
}
arg.dom.innerHTML="<img src ='../../../../images/"+png+".png' height = '20px' alt ="+status+">"+status;
dorado.TipManager.initTip(arg.dom.parentNode, {
??content : {
???tagName : "IMG",
???src : $url("../../../../images/"+png+".png"),
???style : "width: 128px; height: 128px; margin: 8px"
??},
??arrowDirection : "top",
??arrowAlign : "left"
?});
------------------------------------
table判斷當前數據是否存在
var table = view.get("#MainDataprofession");
if(null!=table.getCurrentItem()){?
-------------------------------------
view.get("#menuOrg").show({
?position:{
??left:arg.event.pageX,
??top:arg.event.pageY
?}
});
-------------------------------
平臺選人頁
[{loginName:CREATED_BY},{name:CREATED_BY_NAME}]
selectUser_Trigger
---------------------、
樹節(jié)點onRenderNode()事件
var selected = arg.node.get("data.searchSelectedFlag");
arg.dom.style.fontWeight = selected ? "bold" : "";
arg.dom.style.background = selected ? "#3399ff" : "";
arg.dom.style.padding = selected ? "0 4px" : "";
arg.dom.style.color = selected ? "white" : "";
arg.processDefault = true;
-------------------------------------------------
El表達式
兩種EL表達式
–靜態(tài)EL表達式:${expression} ,在創(chuàng)建目標對象癿過程中一次性癿求值。
–勱態(tài)EL表達式:$${expression},以勱態(tài)代理癿方式創(chuàng)建目標對象,并在外界每一次讀取相應屬性時迕行求值。
?基本詫法
–${3x2} =6
–${3>2} =true
–${empty(foo)} - empty()是內置癿函數,用亍刞斷傳入參數是否為null戒空字符串。
–${foo>0? "enabled":"disabled"} - 條件表達式。
–${foo["bar"]}戒${foo.bar]} - 讀取map中癿bar鍵值。
-----------------------------------------------------
----dorado系統(tǒng)變量和參數
不線程無關(仸何配置文件中都可以使用)
–null - 表示null
–env - 用亍獲取系統(tǒng)環(huán)境變量。${env.JAVA_HOME}戒${env["JAVA_HOME"]}
–system - Java癿系統(tǒng)屬性,即System.getProperties()對象。
–configure - 用亍獲取Dorado7癿配置信息。${configure["runMode"]}
?不線程相關(通常僅在處理Http請求癿線程中可以使用)
–argument - 用亍獲取當前配置文件中癿參數值,僅可用亍View.xml
–context - 當前線程中癿DoradoContext。
–ctx - 用亍簡化對DoradoContext癿getAttribute方法癿訪問。${ctx["foo"]}相當亍${context.getAttribute("foo")}
–util - 基本工具類,見com.bstek.dorado.core.el.ExpressionUtilsObject癿javadoc。
–request - 當前癿HttpServletRequest對象。
–req - 用亍簡化對request癿getAttribute方法癿訪問。 ${req["foo"]}相當亍${request.getAttribute("foo")}
–param - 用亍簡化對request癿getParameter方法癿訪問。 ${param["foo"]}相當亍${request.getParameter("foo")}
–session - 當前癿HttpSession對象。
–servletContext - 當前癿SerlvetContext對象。
–web - 基本工具類,見com.bstek.dorado.web.WebExpressionUtilsObject癿javadoc。
?如有需要,開發(fā)人員可以自行擴展出更多癿隱式變量。
------------------------------------------------------------------
特殊EL隱式變量
$${this}或$${this.foo}
–此種隱式變量通常只用在DataType癿Reference屬性中。
this表示當前正在處理癿數據實體對象,即系統(tǒng)正在嘗試獲取該數據實體對象癿Reference屬性癿值。
–此種EL表達式癿實際求值范圍是在Client端癿JavaScript環(huán)境中
------------------------------------------------------------------
------------布局
Dorado7目前提供癿布局管理器:
–DockLayout 停靠式布局
–AnchorLayout 錨定式布局
–FormLayout 表單時布局
–HBoxLayout 水平箱式布局
–VBoxLayout 垂直箱式布局
–NativeLayout (其實什么都丌做癿布局)
-----------------------------------------------
----添加事件
一個事件下可添加多個監(jiān)聽函數,可使用下面癿兩種方法。
button1.set("onClick", function(self) {
// 此方法只能定義一個監(jiān)聽函數
});
戒
button1.addListener("onClick", function(self) {
//此方法可以為一個事件添加多個監(jiān)聽函數
});
?Dorado7中所有癿事件都只支持self和arg返兩個事件參數。
–self總是激發(fā)事件癿對象自身。
–arg癿類型不具體癿事件類型有關,很多情況下是一個JSON對象,其中可能包含有非常豐富癿傳入信息。
-----------------------------------------
---processDefault----
很多beforeXXX事件癿arg參數中都支持一個名為processDefault癿可寫屬性,用亍通知系統(tǒng)是否要執(zhí)行該事件所代表癿后續(xù)操作。
employeeDataType.addListener("beforeRemove", function(self, arg) {
if (arg.entity.get("married")) {
dorado.MessageBox.alert("已婚癿員工丌能被初除!");
arg.processDefault = false;
}
});
?拋出一個異常,同樣可以達刡類似癿目癿。
employeeDataType.addListener("beforeRemove", function(self, arg) {
if (arg.entity.get("married")) {
throw new dorado.Exception("已婚癿員工丌能被初除!");
}
});
-------------------------------------
---手動創(chuàng)建一個button按鈕擁戴了特殊的$type類型
例如下面癿代碼也可以用來創(chuàng)建一個Button。
{
$type: "Button",
caption: "Say Hello",
onClick: function(self, arg) {
dorado.MessageBox.alert("Hello!");
}
}
------------------------------
獲取控件推薦的方法
–this.get("#buttonOK") 今后推薦癿方法,原因是當你需要迕一步操作buttonOK時會非常方便。
例如this.get("#buttonOK.caption")可以直接獲得Button癿caption屬性。
-------------------------------
根據標簽獲得一批對象癿方法包括:
this.get("^foo") 今后推薦癿方法。例如:this.set("^foo.disabled", true)
this.tag("foo") 今后丌再推薦。
------------------------------
View癿get和set中更多使用技巧
–this.get("title") - 讀取View自身癿屬性
–this.get("#buttonOK")
–this.get("^foo")
–this.get("@DataTypeProduct") - 根據名稱獲得某個DataType
----------------------------------------
?$url() - 用亍轉換URL
–">images/icon.gif"將轉換為"/appContextPath/images/icon.gif"
–"skin>widget.css"將轉換為Dorado當前當前皮膚路徂下癿widget.css癿URL。
因為skin是預設癿URL前綴代表當前皮膚癿根路徑
--------------------------------------
?$DomUtils.xCreate() - 根據以JSON形式定義癿組件癿模板信息快速癿創(chuàng)建DOM元素
$DomUtils.xCreate({
tagName: "button",
content: "Click Me",// 定義按鈕癿標題
style: {// 定義按鈕癿style
border: "1px black solid",
backgroundColor: "white"
},
onclick: function() {// 定義onclick事件
alert("Button clicked.");
}
});
-----------------------------------
dorado遍歷循環(huán)數組list
數組.each() - Dorado7擴展了標準癿Array使乊可支持each迭代,
除Array之外Dorado7還提供EntityList、KeyedList等集合特性癿對象也支持each迭代。
var s = '';
['A', 'B', 'C'].each(function(item) {
s += item;
});
// 最終絀果為s == "ABC"
--------------------
刜步接觸一系列對象
–DataSet - 數據集
–DataType - 數據類型(通常用亍描述以數據實體及其中各個屬性)
–DataProvider - 用亍為Dorado提供數據(即將業(yè)務逡輯層中癿數據尋入刡Dorado中)
–DataResolver - 不DataProvider癿作用相反,用亍將Dorado中癿數據交迓給業(yè)務逡輯層。
--------------------------------------------
DataPath癿一些示例(1)
null(即空) - 相當亍直接迒回被查詢癿數據。
?- 同上。
[#current] -表示頂層集合中癿當前Department。
# - 同上。
[#dirty] - 表示頂層集合中所有在客戶端被改變過癿(包含被初除癿)Department。
#.employees - 表示頂層集合中當前Department中所有癿Employee。
#.#employees - 表示頂層集合中當前Department中癿當前Employee。
.departments(R) - 表示除頂層Department外所有其它Department癿集合。
#departments(R) - 表示各層當前Department癿集合。
#departments(leaf) - 表示最末端癿當前Department。即通過丌斷癿嘗試獲取當前Department中癿當前Department,直刡最末端那個Department。
departments(R).employees[@.get("salary")>5000 && @.get("sex")=="male"] - 表示所有Department中癿薪水高亍5000癿男性Employee。
departments(R).employees.id - 表示迒回所有Employee對象癿id屬性值癿集合。
----------取值--------------------------------------
DataSet.getData和DataSet.queryData
–getData默認只迒回DataPath命中癿第一筆數據,可能是Entity,也可能是EntityList。
–queryData返回DataPath完整的執(zhí)行結果,且默認只返回Entity(只在使用#等確定只可能有最多一個命中數據實體癿DataPath時)或Entity癿數組。
-----------------------------------------------
Trigger表示文本編輯框右側癿快捷按鈕
DropDown是Trigger癿一種特例,特指各種下拉框
TabControl比較常用的屬性包括:
? AwaysShowButtons 顯示導航按鈕
? CurrentTab 當前默認的標簽頁
? ShowMenuButton 顯示菜單按鈕
? TabMinWidth 標簽頁簽的最小寬度
? TabPlacment 標簽頁簽的顯示位置
其它屬性可以通過Client API查詢。
------------------------
----
在樹節(jié)點的OnDataRowClick中編寫代碼打開tab標簽頁
我們用IframeTab打開tabControl;
// 定義Tab變量
var tab = {};
// self 代表事件所屬的控件,此處指 Tree對象
// self.get("currentNode")表示獲取當前被點擊的節(jié)點。
with (self.get("currentNode")) {
// 制定當前的tab為IFrameTab
tab.$type = "IFrame";
// 定義新Tab的標簽
tab.caption = get("label");
// 定義Tab的Path
// get("userData")表示獲取當前節(jié)點的UserData屬性,
// 也就是剛才設定的 sample.chapter01.HelloWorld.d
tab.path = get("userData");
tab.name = get("label");
tab.closeable = true;
}
// 如果當前節(jié)點有指定的Path則打開新的tab
if (tab.path) {
with (this.get("#tabControl")) {
// 根據name查找是否已經打開過當前的Tab。
// 如果沒有打開過,則需要添加一個新的Tab
var currentTab = getTab(tab.name);
if(currentTab){
tab = currentTab;
}else{
// 獲取ID為tabControl的對象,并添加一個新的Tab
// 設定ID為tabControl的對象的當前Tab為新創(chuàng)建的Tab
tab = addTab(tab);
}
// 設定當前的Tab為制定的tab
set("currentTab", tab);
}
}
------------------------------------
在action的onSuccess事件中
self.get("returnValue")的含義就是獲得ajax調用返回的結果;
例子:
// 獲取用戶在editor中的輸入值
var value = this.get("#editor1.value");
// 把輸入的值作為參數傳遞給action2并觸發(fā)Ajax2的執(zhí)行
// 當ajax2執(zhí)行成功后會觸發(fā)回調函數方法,在這里就是function(result){..}
// 執(zhí)行結果作為參數傳遞給方法。這里的執(zhí)行結果為result對象
this.get("#action2").set("parameter",value).execute(function(result){
dorado.MessageBox.alert(result);
})
----------------
在button1的onclick事件中編寫的代碼:
// 獲取AjaxAction對象
var action = this.get("#aciton1");
// 調用Dorado提供的prompt方法
dorado.MessageBox.prompt("Please input two numbers here", {
// 默認的值
defaultText: "3,5",
// 當用戶提交輸入的數值時觸發(fā)的回調方法,參數為輸入的值
callback: function(text){
var nums = text.split(",");
// 將參數拼裝成JSON形式
var parameter = {
num1: nums[0],
num2: nums[1]
};
// 調用AjaxAction
action.set("parameter", parameter).execute(function(result){
dorado.MessageBox.alert(nums[0] + " * " + nums[1] + " = " + result);
});
}
});
--------------------=======================================================
ajax返回多個參數例子
后臺方法:
@Expose
public Properties getSystemInfo() {
Properties info = new Properties();
info.setProperty("product", DoradoAbout.getProductTitle());
info.setProperty("vendor", DoradoAbout.getVendor());
info.setProperty("version", DoradoAbout.getVersion());
return info;
}
--
在action的onSuccess事件中編寫代碼:
var info = self.get("returnValue");
dorado.MessageBox.alert("product :" + info.product + "\n" +
"vendor :" +
info.vendor +
"\n" +
"version : " +
info.version);
------------------------------------------------------------------
Listener:這樣配置
listener :spring:dynaView1#beforeButton2Init(類#方法名)類注解@Component
Caption :測試按鈕
id :button2
-------
?if(str.substr(0,4)!="010-" || str.substr(4).length!=8 ||?
???????????? isNaN(parseFloat(str.substr(4))))?
?? alert("無效的電話號碼!");
ocm_commom_if_p.Get_DeptName_ByIds(ISSUE_RANGE) AS ISSUE_RANGE_NAME,
?pt6.get_session_info.Get_User_Id? NAME,
-----------------
jsp獲取根路徑
<%@page?import="avicit.platform6.commons.utils.ViewUtil"%>
<%
/* String path = request.getContextPath();
out.println(path); */
out.print(ViewUtil.getRequestPath(request)+"platform/ocm/OcmKpiWriteChangeAction/updateZlMapXml.action");
%>
---
路由設條件
流程expr腳本寫法
#{流程變量=="1"}
-------------------
數據庫里邊更改流程按鈕的順序
bpm_button流程按鈕
由字段button_order控制
getProcessTaskParameter(formId);
---
||||||||||||||||||||||||||||||||||||||||||||||
流程引擎入口
processEngine
---
組織機構適配器
OrganAdapter比如取所有的用戶,或者通過用戶id取對象;
|||||||||||||||||||||||||||||||||||||||||||
流程發(fā)布主表 bpm_deployment
流程發(fā)布子表 bpm_deployprop
流程大字段 表:bpm_lob
流程表單權限配置表: bpm_ext_form_securior
bpm_ext_task_attribute t where t.pd_id='';流程定義id可以把廢的流程從表里刪掉
bpm_form 流程表單
bpm_hist_procinst t 流程實例表
bpm_hist_task? 流程代辦表
---
bpm_track? 流程跟蹤表?? 流程實例id:hprocl_? select * from bpm_track t where t.hprocl_='20143233';
---------------------
如果只是單線流程
只有一個流程實例id一個executeId;
--------------------
如果有分支的話,有一個流程實例id,多個executeId;
------------------------
保存表單
固定js寫法
window.saveFormData = function(processInstanceId,executionId){}
------------------------------------
dataType的onDataChange事件里邊
switch(arg.property){
?case "ISSUE_RANGE":
?var id = arg.newValue;
?if($dialogFlag =="PubEdit"){
??//通過手寫回傳值
?view.id($subDataName).getCurrentItem().set("issueRange",id)
?}else{
?//通過手寫回傳值
?view.id($subDataName).getCurrentItem().set("ISSUE_RANGE",id)
?}
?break;
?case "ISSUE_RANGE_NAME":
?var deptName = arg.newValue;
??if($dialogFlag =="PubEdit"){
???//通過手寫回傳值
??view.id($subDataName).getCurrentItem().set("issueRangeName",deptName)
??}else{
??//通過手寫回傳值
??view.id($subDataName).getCurrentItem().set("ISSUE_RANGE_NAME",deptName)?
??}
?break;
}
-----------------
js處理日期
var date = new Date();
2 date.formatDate("Y-m-d");?? // 返回類似"2000-09-25"的字符串
3 date.formatDate("H:i:s");?? // 返回類似"23:10:30"的字符串
4 date.formatDate("Y年m月d日 H點i分s秒");?? // 返回類似"2000年09月25日 23點10分30秒"的字符串
var dateFrom =review_Date.formatDate("Y-m-d 00:00:00");
var dateTo =review_Date.formatDate("Y-m-d 23:59:59");
dbm文件的日期格式必須是TIMESTAMP-DateTime否則查不出來
parameter.set("P_REVIEW_DATE_From",dateFrom);
parameter.set("P_REVIEW_DATE_To",dateTo);
-----------------------
流程詳細頁,啟動按鈕打開詳細頁方法
top.addTab("人生若只如初見",encodeURI("${web.contextPath}/"+taskUrl+""),"dorado/client/skins/~current/common/icons.gif","taskTodo"," -0px -120px");
替換//parent.window.location.replace(getPath()+"/"+taskUrl);
----------------------------------------------
現在生產的模塊實現類里邊會報紅
1SysLogUtil
import avicit.platform6.modules.system.syslog.service.SysLogUtil;
把上面的替換成下面的這個
import avicit.platform6.core.api.system.syslog.service.SysLogUtil;
-------------------------
/**
?* Date轉String
?* @param {Object} date
?*/
date2Str =? function(date){
?if (date != null) {
??var newDate = new Date();
??newDate.setTime(date);
??var year = newDate.getFullYear();
??var month = newDate.getMonth() < 9 ? "0" + (newDate.getMonth() + 1) : (newDate.getMonth() + 1);
??var day = newDate.getDate() < 9 ? "0" + newDate.getDate() : newDate.getDate();
??var dateStr = year + "-" + month + "-" + day;
??return dateStr;
?}else{
??return "";
?}
}
---------------------------------------
/**
? * 獲取當前登錄用戶所在部門id以及用戶id
? */
?@Expose
?public String getCurrentDeptId(){
??String name = SessionHelper.getLoginSysUser().getName();
??String id = SessionHelper.getLoginSysUser().getId();
??return SessionHelper.getCurrentDeptId()+","+SessionHelper.getCurrentDeptTl().getDeptName();
?}
-----dorodo獲取當前登陸用戶id當前登錄人id
?var currentUser = '${session.getAttribute('userId')}';
----=dorado獲取部門id?
?var currentDeptId = '${session.getAttribute('CURRENT_DEPT').getId()}';
?--------------------------getSecretLevel
?var currentUser = '${session.getAttribute('CURRENT_LOGINUSER').getId()}';
?var currentUser = '${session.getAttribute('CURRENT_LOGINUSER').getSecretLevel()}';
?//$deptId='${session.getAttribute('CURRENT_DEPT').getId()}';
//$secretLevel='${session.getAttribute('CURRENT_LOGINUSER').getSecretLevel()}';
---------------------------------------------------------------------------
?
?一:在數據的添加時一般注意的方法
在主從表中的添加方法中,在datapilot中的onSubControlAction(self.arg)中的代碼是:
?var code = arg.code;
???
?? switch(code){
???? case "+":
???? //得到主表的數據集對象
???? var dataset = this.get("#dataSetMainSubAddForm");
?????
???? //得到主表的數據集
???? var ds = dataset.getData("#");
?????
???? //根據主表的數據集得到其中的那個reference對應的數據集
???? var subdataset = ds.get("ocmStraPlanMainChild");
?????
???? //根據得到的數據集向其中插入一條對象,注意的是:這里的deptId不是數據庫中的字段,而是實體類的屬性
???? subdataset.insert({deptId:currentDept.get("id")});
?????
???? //防止系統(tǒng)自動的添加一行
???? arg.processDefault = false;
???? break;
?? }
-------------------------------------------------
http://blog.csdn.net/q326527970/article/details/6966317
http://blog.csdn.net/q326527970/article/category/928276
http://wiki.bsdn.org/pages/viewpage.action?pageId=9176117
http://wiki.bsdn.org/pages/viewpage.action?pageId=3670442
var dsBranch = this.id("dsBranch");var branch = dsBranch.getData("#");//獲取當前的分公司實體對象var dept = dsBranch.getData("#.#.dept");//獲取當前分公司的當前部門實體對象var employee = dsBranch.getData("#.#dept.#employee");//獲取當前分公司的當前部門的當前員工實體對象?
------------------------------
var parameter = view.get("#queryForm.entity");
var actCode = parameter.get("actCode");
---------------table 列上的onGetCellEditor事件置空列值
arg.data.set("ISSUE_RANGE_NAME",'')
arg.data.set("ISSUE_RANGE",'')
--------------table列上onRenderCell 上語法dom對象
arg.dom.innerHTML="";
------------查詢處理日期
var dateFrom = view.get("#dataSetQuery").getData("#").get("P_CHECK_DATE_FROM");
var dateTo = view.get("#dataSetQuery").getData("#").get("P_CHECK_DATE_TO");
//將查詢區(qū)審核開始時間設置為當天最小時間--審核結束時間設置為最大時間
if(typeof(dateFrom)!='undefined'){
dateFrom = dateFrom.formatDate("Y-m-d 00:00:00")
view.get("#dataSetQuery").getData("#").set("P_CHECK_DATE_FROM",dateFrom)
}
if(typeof(dateTo)!='undefined'){
dateTo = dateTo.formatDate("Y-m-d 23:59:59")
view.get("#dataSetQuery").getData("#").set("P_CHECK_DATE_TO",dateTo)
}
var parameter = view.get("#queryForm.entity");
view.get("#dataSetMcjBusinessInfo").set("parameter",parameter).flushAsync();
--------------------------------
form中的Link
href:javascript:window.showMainFileUpload("QUALITY_MANAGE_FILE")
------------------------------
///控制列表只能單選 begin 2013-07-07 DingRui/
var dataGrid = view.get("#MainData");
var selections = dataGrid.get("selection");?
if (selections.length == 0) {
?dorado.MessageBox.alert("請選擇記錄");
?return "false";
}
if (selections.length > 1) {
?dorado.MessageBox.alert("只允許選擇一條數據記錄!");
?return "false";
}
///控制列表只能單選 end/
parseInt($secretLevel);
planDate.substring(0,4)
var date = new Date();
var Y=date.getFullYear();
var M=(date.getMonth())+1;
var D=date.getDate();
----------------table 行背景顏色-----------------
//反饋時間
var factFinishDate =? arg.data.get("FACT_FINISH_DATE");
//里程碑時間
var planDate =? arg.data.get("PLAN_DATE");
//當前系統(tǒng)時間
var date = new Date();
var Y=date.getFullYear();
var M=(date.getMonth())+1;
var D=date.getDate();
//里程碑年\月\日
planDateY = planDate.formatDate("Y-m-d").substring(0,4);//2012-12-09
planDateM = planDate.formatDate("Y-m-d").substring(5,7);
planDateD = planDate.formatDate("Y-m-d").substring(8,10);
//反饋時間
var factFinishDate =? arg.data.get("FACT_FINISH_DATE");
//里程碑時間
var planDate =? arg.data.get("PLAN_DATE");
//當前系統(tǒng)時間
var date = new Date();
var date1=???? date.formatDate("Y-m-d");
var date2 =? date1.replace(/-/g,"/");
var toDate = new Date(date2);
var planDate1= planDate.formatDate("Y-m-d");
var planDate2=? planDate1.replace(/-/g,"/");
var toPlan = new Date(planDate2);
if(factFinishDate != null && factFinishDate !=""){?
var factFinishDate1= factFinishDate.formatDate("Y-m-d");
var finishDate2=? factFinishDate1.replace(/-/g,"/");
var toFinish= new Date(finishDate2);
?????? if(toFinish.getTime()>toPlan.getTime()){
??? ?arg.dom.style.background = "#FFFF00";//黃色
??? }else{
??? ?arg.dom.style.background = "#00B050";//綠色
??? }
}else{
?if(toDate.getTime()>toPlan.getTime()){
??arg.dom.style.background = "#FF0000";//紅色
?}else{
??arg.dom.style.background = "#000798";//藍色
?}
}
//alert(toFinish.getTime());
--------------------------------------------------------------------------
/**
?* 隨機生成32位字符串
?*/
$getRandomString = function(){
?? len = 32;
??? var $chars = '0123456789abcdefhijkmnprstwxyz'; // 默認去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1
??? var maxPos = $chars.length;
??? var pwd = '';
??? for (i = 0; i < len; i++) {
??????? pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
??? }
??? return pwd;
}
----------------------------------
//在保存按鈕的事件里邊調用檢驗中文長度的校驗
///獲得中文字符長度 begin 2013-07-01 DingRui//
String.prototype.getBytes = function(){
??? var cArr = this.match(/[^\x00-\xff]/ig);
??? return this.length + (cArr == null ? 0 : cArr.length);
}
///獲得中文字符長度 end//
///校驗字段的長度 begin 2013-07-01 DingRui//
//在dataType的字段上,添加自定義效驗,
lengthValidate = function(fields, describe, length){
?var flag = true;
?var data = view.get("#dataSetOcmKpiWrite.data:#");
?var field = data.get(fields);
?if(field != null){
??if(field.getBytes() > length){
???dorado.MessageBox.alert("【" + describe + "】文本內容過多,長度應小于" + length + "個字符!");
???flag = false;
??}
?}
?return flag;
}
///校驗字段的長度 end//
例子:if(describe != null){
?if(describe.getBytes() > 1000){
??dorado.MessageBox.alert("【描述】文本內容過多,長度應小于1000個字符!");
??return;
?}
}
金額格式 displayFormat:#,##0.00
///
?var adata = arg.data;
?var id = adata.get("ID");
?var data = view.get("#dataSetFeedBack.data").first();?
?var count = 0;
?while(data!=null){
??var fid = data.get("MCJ_PRODUCT_INFO_ID");
??if(fid==id){
???count++;
??}
??data = view.get("#dataSetFeedBack.data").next();
?}
?if(count>0){
??var javaScript ="javascript:showFeedInfo('"+arg.data.get("ID")+"','"+arg.data.get("PRODUCT_NAME")+"')" ;
??arg.dom.innerHTML="<a href = # onclick ="+javaScript+">編輯</a>"
?}else{
??var javaScript ="javascript:showFeedInfo('"+arg.data.get("ID")+"','"+arg.data.get("PRODUCT_NAME")+"')" ;
??arg.dom.innerHTML="<a href = # onclick ="+javaScript+">填寫</a>"
?}
-----------------------------------------------------------------
view 的onCreate事件中調用后臺
$importDocByArmyDemand= function(){
?//獲取查詢區(qū)數據
? var data =? view.get("#dataSetQuery").getData("#");
? var unitName = typeof(data.get("P_UNIT_NAME")) == 'undefined' ? "" : data.get("P_UNIT_NAME") ;
? var manageDept = typeof(data.get("P_MANAGE_DEPT")) == 'undefined'? "" : data.get("P_MANAGE_DEPT") ;
? var hrDeptName = typeof(data.get("P_HR_DEPT_NAME")) == 'undefined' ? "" : data.get("P_HR_DEPT_NAME") ;
? var unitType = typeof(data.get("P_UNIT_TYPE")) == 'undefined'? "" : data.get("P_UNIT_TYPE") ;
? var provinceCode = typeof(data.get("P_PROVINCE_CODE")) == 'undefined'? "" : data.get("P_PROVINCE_CODE") ;
? var dataParas = "unitName="+unitName+"&manageDept="+manageDept+"&hrDeptName="+hrDeptName+ "&unitType="+unitType+"&provinceCode="+provinceCode;
? dorado.MessageBox.confirm('確認生成軍用單位名錄編制?',function(){
?? var urls = '${web.contextPath}/platform/mcj/mcjarmyinfoword/mcjArmyInfoExpWord?'+ encodeURI(dataParas);
????? window.open(urls,"_self");
? });
}
------------------------------------------------------------------------------
---view全選然后將對象放入數組中
!function(){
?var uploadAction = view.get('#uaUpload2');
?var selections = view.get('#dgFiles.selection');
?if(!selections || selections.length == 0){
??return;
?}
?if(!selections.length){
??selections = [selections];
?}
?var selectionCopy = [];
?for (var i = 0; i < selections.length; i++) {
??selectionCopy.push(selections[i]);
?}
????
?for(var i=0;i<selectionCopy.length;i++){
??var entity = selectionCopy[i];
??if(entity){
???uploadAction.removeFile(entity.get('id'));
???entity.remove();
??}
?}
};
----------------------------------------------
獲取dataset對應的查詢form表單的值
var entityList = this.id("dataSetOmsMonthReportGrid").queryData ();
--------------------------------------------
dataTyp中只有id的時候,還有一種方式顯示name頁不用寫視圖
引入一個虛擬字段.reference,設置屬性:dataProvider:類#方法
parameter:$${this.BUSINESS_TYPE}
-0-------------------------
給文本框賦值
this.get("#TextEditor_Id").doSetText("我的全部");
取值
this.get("#TextEditor_Id.value")
---------------------
------------------------===
文本框的Map屬性加通用代碼,trigger屬性設置屬性
給文本框加一個下拉列表,在屬性上綁定trigger/然后在TextEditor的屬性onAttributeChange中寫入下面代碼
實現樹動態(tài)擴展層次。(dataTreeGrid控件的層次擴展)
var treeGird = this.id("weaveOmsPlanOperateTreeGrid");
switch (this.get("#treeExpendText.value")) {
??? case "1":
??????? treeGird.get("bindingConfigs")[0].expandLevel = 1;
??????? this.id("dataSetOmsPlanOperateGridV").flush();
??????? break;
??? case "2":
??????? treeGird.get("bindingConfigs")[0].expandLevel = 2;
??????? this.id("dataSetOmsPlanOperateGridV").flush();
??????? break;
??? case "3":
??????? treeGird.get("bindingConfigs")[0].expandLevel = 3;
??????? this.id("dataSetOmsPlanOperateGridV").flush();
??????? break;
??? case "4":
??????? treeGird.get("bindingConfigs")[0].expandLevel = 4;
??????? this.id("dataSetOmsPlanOperateGridV").flush();
??????? break;
??? case "5":
??????? treeGird.get("bindingConfigs")[0].expandLevel = 5;
??????? this.id("dataSetOmsPlanOperateGridV").flush();
??????? break;
}
------------------------------------------------------------
給樹節(jié)點添加圖表
在dataTreeGrid的屬性onRenderNode事件里邊寫下面代碼
var node = arg.node,data = node.get("data");
if (data.get("planType") == '1') {
??? $(arg.dom).empty().xCreate([{
??????? tagName: "IMG",
??????? src: $url(">images/wbs.gif"),
??????? style: "left: 4px;top: 4px"
??? },{
??????? tagName: "SPAN",
??????? contentText: node.get("label")
??? }]);
}
if (data.get("planType") == '2') {
??? $(arg.dom).empty().xCreate([{
??????? tagName: "IMG",
??????? src: $url(">images/task.gif"),
??????? style: "left: 4px;top: 4px"
??? },{
??????? tagName: "SPAN",
??????? contentText: node.get("label")
??? }]);
}
if (data.get("planType") == 'PRO') {
??? $(arg.dom).empty().xCreate([{
??????? tagName: "IMG",
??????? src: $url(">images/pro.gif"),
??????? style: "left: 4px;top: 4px"
??? },{
??????? tagName: "SPAN",
??????? contentText: node.get("label")
??? }]);
}
-----------------------------------------------
當前樹,判斷滿足邏輯條件后的節(jié)點顯示顯影
///
var treeGrid = this.id("weaveOmsPlanOperateTreeGrid");
//獲去項目信息節(jié)點實例
var firstNode = treeGrid.get("firstNode");
var firstEntity = firstNode.get("data");
var fbUserId = firstEntity.get("puid");//項目信息節(jié)點發(fā)布范圍人員userIds
var projPrincipal = firstEntity.get("projPrincipal"); //項目信息節(jié)點項目主管
var hrDeptId = arg.data.get("hrDeptId");//當前樹節(jié)點部門id
if(arg.data.get("planName")!=undefined){
?//當前節(jié)點不為根節(jié)點時
if(arg.data.get("id")!=firstEntity.get("id")){
?//當前用戶 不為 項目信息項目主管?
if(projPrincipal!=$currentUserId){
?//當前登錄人部門與經營計劃節(jié)點責任部門不一致時
?if($currentDeptId!=hrDeptId){
??//當前登錄人不在項目信息節(jié)點的發(fā)布范圍內
??fbUserId=","+fbUserId+",";
??var curUserId = ","+$currentUserId+",";
??if(fbUserId.indexOf(curUserId)==-1){
???var currentNodes = 0;
???var currentParents = 0;?
???var childCommand = view.get("#selectActionChildIsYz");
???childCommand.set("parameter",{nodeId:arg.data.get("id")}).execute(function(result){
????currentNodes = result;
???});
???var selectParentNodesMatchHrDeptId = view.get("#selectParentNodesMatchHrDeptId");
???selectParentNodesMatchHrDeptId.set("parameter",{id:arg.data.get("id"),hrDeptId:hrDeptId}).execute(function(result){
????currentParents = result ;
???});
???//alert("currentNodes="+currentNodes+"currentParents="+currentParents);
???if(currentNodes !=1 && (currentParents==0 || currentParents==null)){
?????//刪除當前節(jié)點
?????arg.node.remove();?
???}
???
??}
?}
?}
}
}
-----------------------------------------------------------------------------------------------
根據條件動態(tài)的給樹節(jié)點顯示復選框,樹的onDataNodeCreate事件中
if (arg.data.get("planStatus")=="1" && arg.data.get("planStatus")!="9"){
?? arg.node.set("checkable",true);
?}
if (arg.data.get("planStatus")=="9" && arg.data.get("parentId")=='ROOT' && arg.data.get("planType")=='PRO'){
?var action = view.get("#issueCountAction");
?var id = arg.data.get("id");
???? action.set('parameter',{'id':id}).execute(function(result){
? if (result !=1 ){
? ?arg.node.set("checkable",true);
? }
?})
}
----------------------------------------
在dataTreeGrid的事件onNodeCheckedChange
var treeGrid = view.get("#omsPlanOperateTreeGridSendAuditing");
?var currentNode = treeGrid.get("currentNode");
//當前數據的父節(jié)點
?var checkable = currentNode.get("checkable");
?if (checkable==true){
??if? (currentNode.get("checked")==true){
?????????????? $checkchild(currentNode);
??????? }else{
????? $uncheckchild(currentNode);
??}
?}
/**
?* 選中所有的子節(jié)點
?* @param {Object} treeGrid
?*/
$checkchild = function(currentNode){
?// 判斷是否存在復選框
??currentNode.set("checked",true);
??var hasChildIs = currentNode.get("hasChild")
????? if (hasChildIs==true) {
????????? currentNode.expand();
????????? var nodes = currentNode.get("nodes");
????????? var curNode;
????????? if (nodes != null) {
????????????? var iter = nodes.iterator();
????????????? while (iter.hasNext()) {
????????????????? curNode = iter.next();
???????var checkable = curNode.get("checkable");
????????if (checkable==true){
??????????? curNode.set("checked",true);
????????}
????????????????? $checkchild(curNode);
????????????? }????????
????? }?
?????? }????
}
---
/**
?* 不選中所有的子節(jié)點
?* @param {Object} treeGrid
?*/
$uncheckchild = function(currentNode){
?// 判斷是否存在復選框
??currentNode.set("checked",false);
??var hasChildIs = currentNode.get("hasChild")
????? if (hasChildIs==true) {
????????? currentNode.expand();
????????? var nodes = currentNode.get("nodes");
????????? var curNode;
????????? if (nodes != null) {
????????????? var iter = nodes.iterator();
????????????? while (iter.hasNext()) {
????????????????? curNode = iter.next();
??????var checkable = curNode.get("checkable");
???????if (checkable==true){
?????????curNode.set("checked",false);
???????}
????????????????? $uncheckchild(curNode);
????????????? }????????
????? }?
?????? }????
}
--------------------------------------------------------------------
轉載于:https://www.cnblogs.com/hui1107464497/p/4502087.html
總結
- 上一篇: 自动发送邮件(整理版)
- 下一篇: (软件工程复习核心重点)第十章面向对象设