SELECT AMC.SiblingOrder,M.SiblingOrder, AMC.Name 流程分類名稱, CASE WHEN SUBSTRING(ISNULL(Pro.ProID,AP.FreID),1,3) = 'PRO' THEN '流程' WHEN SUBSTRING(ISNULL(Pro.ProID,AP.FreID),1,3) = 'FAP' THEN '應用' END 類別, ISNULL(Pro.ProID,AP.FreID) 流程或表單編號, ISNULL(Pro.Name,AP.Name) 流程或表單名稱 FROM AF_ProcessMap M LEFT JOIN Pro_GenInf Pro ON M.ID = Pro.ProID LEFT JOIN Freqap AP ON M.Id = AP.FreID LEFT JOIN AF_ProcessMapCategory AMC ON M.ParentId = AMC.Id where 1=1 –AND AMC.Name = 'XIN' ORDER BY CAST(AMC.SiblingOrder AS INT) ASC,CAST(M.SiblingOrder AS INT) ASC
2021-01-26
[AF] 查詢流程分類SQL
2021-01-21
[AgentFlow]目前流程內容與狀態SQL
WITH A AS ( SELECT DISTINCT TK.RootID, A.ITEM15 , A.ITEM16 , A.ITEM4 , A.ITEM6 , A.ITEM8 , A.ITEM10 FROM TASK TK LEFT JOIN ART05801584407735351_Log B ON TK.TskID = B.TskID LEFT JOIN ART05801584407735351_Ins A ON B.InsID = A.InsID WHERE 1=1 AND A.ITEM15 <>'') SELECT A.ITEM15 聯單編號 , A.ITEM16 申請日期, A.ITEM4 機關名稱, A.ITEM6 申請人, A.ITEM8 申請人EMAIL, A.ITEM10 申請人連絡電話, TK.State, CASE TK.State WHEN 'complete' THEN '結案' WHEN 'running' THEN '執行中' END 案件狀態 FROM A LEFT JOIN Task TK ON A.ROOTID = TK.RootID WHERE TK.TYPE = 'root'
2020-09-08
[AgentFlow]常見的效能調教
版本 : AF3.7
設定檔 : PASE / applicationctx-cache.xml
為改善在不同的transaction工作中,因為存取到同一個cache 物件而造成cache lock互等的情況,AF3.7設計了一個存放cache queue pool的方式,將判斷到符合設定檔中定義的相關cache 物件,在update cache後就先放到pool中等transaction執行完成後再以另外的thread 慢慢消化更新pool 中存放的cache,好讓transaction可以繼續往下執行而不用等同一個cache lock release 後才能執行後續動作。但如果在流程Action 的Script 中有利用API 大量存取設定檔中定義的相關cache 物件,例如定時組織同步的流程,可能因為同時存取的cache 數量超過預設的queue pool size 而造成transaction停住而發生transaction time out 的情況,可以依需求自行調整PASE / applicationctx-cache.xml 設定檔中 queue pool size的大小,如下紅字:
< constructor-arg >
< value >1000 < /value >
< /constructor-arg >
備註 :
預設為1000,假設組織同步可能會更新組織相關物件,例如部門、職務、人員等,加總數量約10000,建議可調整為 12000 ~ 15000,約1.2 ~ 1.5 倍,但調大會佔用更多記憶體,所以要確保PASE設定的記憶體MAX數值是足夠的。
==============================================================================================================================
問題:為何我們上線AF效能出現異常問題 是遇到多位user再做查詢報表,
效能loading變慢,是不是有什麼要調整或者注意什麼事情?
回覆:
根據您提供 PASE Server log 附件檔案內容顯示,我們發現其主要原因說明如下:
1. 附件log內容顯示 出現了一大堆 [TDS Driver]Read timed out 訊息,
PASE Server 系統預設 sql server response time is 30s。
2. 請客戶檢查一下資料庫或網路是否正常,且資料庫儘可能的只服務PASE server。
3.請貴公司 MS-SQL Server 2000 系統 DBA針對執行較慢的sql 指令當中加入index,可加速PASE效能。 建議 index table 整理說明如下:
請在AF 資料庫資料庫加入index
CREATE INDEX IX_Tsk_E_S ON Task(ExeID,State)
CREATE INDEX IX_TskExeID ON Task(ExeID)
CREATE INDEX IX_TskParentID ON Task(ParentID)
CREATE INDEX IX_TskRootID ON Task(RootID)
CREATE INDEX IX_TskMemID ON Task(MemID)
CREATE INDEX IX_TskState ON Task(State)
CREATE INDEX IX_TskType ON Task(Type)
CREATE INDEX IX_TskKeyWord ON Task(KeyWord)
CREATE INDEX IX_Tsk_E_S_T ON Task(ExeID,State,Type)
CREATE INDEX IX_Tsk_R_S_M_E_T ON Task(RootID,State,MemID,ExeID,Type)
Other CREATE INDEX Field column by (INSID) for every Artifate Form(under project) such as :
ARTXXX_INS / ARTXXX_LOG ….etc .
For example :
1.CREATE INDEX IX_Tsk_E_S ON ARTXXX_INS (INSID);
2.CREATE INDEX IX_Tsk_E_S ON ARTXXX_LOG (INSID);
Some detail description by the following items :
ART123456789012_Form 表單元件屬性
ART123456789012_Ins 表單目前所存資料
ART123456789012_Log 表單各關當時資料
ART123456789012Item52 表單內table元件目前所存資料
ART123456789012Item52Log 表單內table件各關卡當時資料
所以我們設計之專案範例本身e-Form 就有Table 元件。
==============================================================================================================================
您好,
於 AF37 若 PASE log 中出現以下訊息, 表示 PASE 與資料庫的存取連線執行時間過久.
transaction timeout rollback :
Transaction has been marked as rollback-only: com.atomikos.spring.jdbc.tm0036200124
at com.flowring.cache.interceptor.caching.AbstractUpdatingInterceptor.invoke(AbstractUpdatingInterceptor.java:46)
這方面可以去調整
PASE\applicationctx-transaction.xml
bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
property name="transactionTimeout" value="預設180秒,這邊可加大"/
與調整
PASE\jta.properties
# Set the max timeout (in milliseconds) for local transactions
com.atomikos.icatch.max_timeout=預設300秒,這邊可加大
來延長連線時間, 不至於出現此訊息.
需注意的是, 存取連線的時間不可無限制延長,
需考慮資料庫本身的負荷等狀況來調整.
==============================================================================================================================
如果不是 Script 問題,那請問這段 Log 上面是否還有其他訊息?
如果沒有,也請您將 PASE\log4j.properties 的 log4j.category.pase.server 改為 DEBUG,例如:
log4j.category.pase.server=DEBUG
之後再重新手動啟動這筆流程,並將 Log 提供給客服,我們會盡快替您查看問題。
==============================================================================================================================
1. 當 PASE\build.xml 設定 maxmemory="128m"
以下 SQL 執行約 4.6 秒
2. 當 PASE\build.xml 設定 maxmemory="512m"
以下 SQL 執行約 1 秒
==============================================================================================================================
1.在 PASE 的設定內,將取消記憶體暫存功能打勾即可。
2.建議在正式機上不要將記憶體暫存取消。
3.WebAgenda 的 偵錯模式 請設定為 Developer,這樣才不會Web 端 Cache 住表單。
==============================================================================================================================
請編輯PDE\Cliient.bat與PDE\Server.bat 檔案最大記憶體。
%JAVAEXE% -Xms256m -Xmx512m -Dpde.debug=false pde.PDE %1
%JAVAEXE% -Dserver.debug=true -Xms1024m -Xmx2048m login.PDEServer
==============================================================================================================================
您好,
於 AF37 若 PASE log 中出現以下訊息, 表示 PASE 與資料庫的存取連線執行時間過久.
transaction timeout rollback :
Transaction has been marked as rollback-only: com.atomikos.spring.jdbc.tm0036200124
at com.flowring.cache.interceptor.caching.AbstractUpdatingInterceptor.invoke(AbstractUpdatingInterceptor.java:46)
這方面可以去調整
PASE\applicationctx-transaction.xml
bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
property name="transactionTimeout" value="預設180秒,這邊可加大"/
與調整
PASE\jta.properties
# Set the max timeout (in milliseconds) for local transactions
com.atomikos.icatch.max_timeout=預設300秒,這邊可加大
來延長連線時間, 不至於出現此訊息.
需注意的是, 存取連線的時間不可無限制延長,
需考慮資料庫本身的負荷等狀況來調整.
2020-08-05
[AgentFlow]資料夾建立方式
通常會建立捷徑,但是因應LoadBalence需要另外一種建立方式
先MEMO紀錄一下
mklink /d D:\Agentflow\apache-tomcat-8.0.52\webapps\WebAgenda\SIBH \\172.25.190.129\Flow\flowFileServer\SIBH
2020-07-28
[AgentFlow]設定Table元件欄位隱藏
//隱藏欄位
var csTab = Form.getComponent("Table2");
var vecCS = csTab.getColumnNodeVector();
var hidNodeCS = [vecCS.get( 6 )];
csTab.setColHiding(hidNodeCS);
//取消隱藏
var hidNodeCS = []; csTab.setColHiding(hidNodeCS);
[AgentFlow]呼叫WebService卻無值
需要在第一關的前置動作放入以下程式
當呼叫WebService後,二維陣列args是放到global
var ati = MyTask.getArtInstance();
var rootID = MyTask.getRootID();
var ght = Server.getGlobals(rootID);
try{
if (ght.size()>0){
var vc1 = ght.get("txtMapName");
var vc2 = ght.get("txtMapID");
var vc3 = ght.get("txtNote");
ati.setAppValue("txtMapName",ght.get("txtMapName"));
ati.setAppValue("txtMapID",ght.get("txtMapIDson"));
ati.setAppValue("txtNote",ght.get("txtNote"));
Server.addInfoLog(" 開啟參數 =" + vc1);
Server.addInfoLog(" 開啟參數 =" + vc2);
Server.addInfoLog(" 開啟參數 =" + vc3);
}
}catch (err){
Server.addInfoLog("開啟參數 Err log=" + err);
}
Server.deleteGlobals(rootID);
2020-06-30
[AgentFlow]母子表單傳值無動作
var parentForm = Form.getParentForm(); //抓取母表單物件
if(parentForm != null){
var sSerialNo = parentForm.getValue("txtSerialNo");
var t1 = parentForm.getComponent("Table1");
t1.clear();
var subFormID = "ART00281300671728569";
var sqlLoad = Client.SQLloadValue("SELECT * FROM " + subFormID + "_INS WHERE ITEM14 = '" +sSerialNo+"' ORDER BY ITEM26" );
for (var j=0; jvar dataList = sqlLoad.get(j);
t1.setValueAt(dataList.get("ITEM14"), j, 0);
t1.setValueAt(dataList.get("ITEM9"), j, 1);
t1.setValueAt(dataList.get("ITEM26"), j, 2);
t1.setValueAt(dataList.get("ITEM5"), j, 3);
t1.setValueAt(dataList.get("ITEM8"), j, 4);
}
t1.setModifyingRowIndex(-1);
Client.addExeLog("Refresh parentForm ..........>>>" );
}else{
Client.addExeLog("單號:" + txtSerialNo +"------->NoDataFound!!");
};
重點要加上 Form.setRefreshParentForm(true);
母表單才會有動作
2020-06-23
[AgentFlow]工作已損毀導致代辦工作有誤
–先備份一下 SELECT * INTO TASK_20200623 FROM TASK –查詢屬於已被刪除流程工作的 Task SELECT TskID, ProID FROM Task WHERE ( (ProID NOT IN (SELECT ProID FROM Pro_GenInf ) AND ProID LIKE 'PRO%') OR (ProID NOT IN (SELECT ProID FROM Iap_GenInf ) AND ProID LIKE 'IAP%')OR (ProID NOT IN (SELECT SignID FROM Sign_GenInf ) AND ProID LIKE 'SGN%') ) AND State<>'complete' AND State<>'dead' –將這些工作狀態都改成 dead 待辦就不會出現警告(修改前請先備份) UPDATE Task SET STATE = 'dead' WHERE ( (ProID NOT IN (SELECT ProID FROM Pro_GenInf ) AND ProID LIKE 'PRO%') OR (ProID NOT IN (SELECT ProID FROM Iap_GenInf ) AND ProID LIKE 'IAP%')OR (ProID NOT IN (SELECT SignID FROM Sign_GenInf ) AND ProID LIKE 'SGN%') ) AND State<>'complete' AND State<>'dead'
2020-05-23
[AgentFlow]部門組織查詢(遞迴查詢),由上而下或由下而上
--某部門從某部門往上找所有部門 DECLARE @DEPIDUP VARCHAR(20) DECLARE @NUM INT SET @DEPIDUP = 'DEP00061590139401173' SET @NUM = 0 ; WITH DEPUP AS( SELECT DEPID , PARENTID , 0 LEVEL FROM Dep_GenInf WHERE 1=1 AND DepID = @DEPIDUP UNION ALL SELECT B.DEPID , B.PARENTID , @NUM +1 LEVEL FROM DEPUP A , Dep_GenInf B WHERE A.PARENTID = B.DepID ) SELECT DUP.DepID , RG.RolID , RG.Name , MG.MemID , MG.UserName FROM DEPUP DUP LEFT JOIN Rol_GenInf RG ON DUP.DepID = RG.DepID LEFT JOIN Mem_GenInf MG ON RG.RolID = MG.MainRoleID --某部門從某部門往下找所有部門 DECLARE @DEPIDDOWN VARCHAR(20) SET @DEPIDDOWN = 'DEP00041590139241137' ; WITH DEPDOWN AS( SELECT DEPID , PARENTID FROM Dep_GenInf WHERE 1=1 AND DepID = @DEPIDDOWN --AND ParentID = 'company' UNION ALL SELECT B.DEPID , B.PARENTID FROM DEPDOWN A , Dep_GenInf B WHERE A.DepID = B.PARENTID ) SELECT DUD.DepID , RG.RolID , RG.Name , MG.MemID , MG.UserName FROM DEPDOWN DUD LEFT JOIN Rol_GenInf RG ON DUD.DepID = RG.DepID LEFT JOIN Mem_GenInf MG ON RG.RolID = MG.MainRoleID
2020-05-13
[AgentFlow]套用Bootstrap框架
AF套用Bootstrap,找時間研究一下 Bootstrap 檔案位置 /WebAgenda/ext/css/bootstrap.min.css ——-放HTML共用函式————- function switchPanel(targetId, idArray) { var targetEl = jQuery('#' + targetId); var objHeight = targetEl.height(); var moveToTop = 300; var currentHeight = objHeight + moveToTop + 400; targetEl.show(); jQuery.each( idArray, function( index, value ) { if ( value != targetId ) jQuery('#' + value ).hide(); }) targetEl.css('top', moveToTop); targetEl.css('visibility', 'visible'); jQuery('#ITEM1').animate({'height':currentHeight}, 'fast'); jQuery(parent.document.getElementById('artifact')).animate({'height':currentHeight}, 'fast'); //reFixTableHeader jQuery('iframe[src*=”table”]').each(function() { this.contentWindow.reFixTableHeader() } ) } //btnPanel 換顏色 function swicthPanelBtnColor(btnID, btnArray){ document.getElementById(btnID).classList.add("btnPanel", "btnPanel_navyBlue"); for(var i = 0; i< btnArray.length; i++){ document.getElementById(btnArray[i]).classList.remove("btnPanel_navyBlue"); } } ——-放HTML共用函式————- ——-放表單HTML事件onLoad———— var link = document.createElement('link'); link.type = 'text/css'; link.rel = 'stylesheet'; link.href = '/WebAgenda/ext/css/bootstrap.min.css'; document.getElementsByTagName("head")[0].appendChild(link); document.getElementsByTagName("body")[0].appendChild(link); var link2 = document.createElement('link'); link2.type = 'text/css'; link2.rel = 'stylesheet'; link2.href = '/WebAgenda/ext/css/reset.css'; document.getElementsByTagName("head")[0].appendChild(link2); document.getElementsByTagName("body")[0].appendChild(link2); var link3 = document.createElement('link'); link3.type = 'text/css'; link3.rel = 'stylesheet'; link3.href = '/WebAgenda/ext/css/form-page.css'; document.getElementsByTagName("head")[0].appendChild(link3); document.getElementsByTagName("body")[0].appendChild(link3); //設定button_green var btn_greenArr = [‘ITEM8’]; var classArray = [“btn”, “btn-info”]; addClass(btn_greenArr, classArray); //設定button_org var btn_orange = [‘ITEM17’]; var classArray = [“btn”, “btn-org”]; addClass(btn_orange, classArray); //設定button_gray var btn_gray = [‘ITEM18’]; var classArray = [“btn”, “btn-gray”]; addClass(btn_gray, classArray); //設定textField var txt_Arr = [‘ITEM19′,’ITEM3′,’ITEM6’,]; var classArray = [“form-control”]; addClass(txt_Arr, classArray); //設定comboBox var cboArray = [‘ITEM21’, ‘ITEM54’, ‘ITEM55’]; var classArray = [“form-control”, “form-control-w”]; addClass(cboArray, classArray); //設定panel //var panelArray = [‘ITEM82’, ‘ITEM83’, ‘ITEM84’, ‘ITEM398’, ‘ITEM431’, ‘ITEM442’]; //var classArray = [“btnPanel”, “btnPanel_blue”]; //addClass(panelArray, classArray); ////設定comboBox //var cboArray = [‘ITEM21’, ‘ITEM44’, ‘ITEM125’, ‘ITEM110’, ‘ITEM111’, ‘ITEM113’, ‘ITEM114’, ‘ITEM117’, ‘ITEM118’, ‘ITEM124’]; //var classArray = [“form-control”, “form-control-w”]; //addClass(cboArray, classArray); // ////設定button_green //var btn_greenArr = [‘ITEM8’, ‘ITEM131’, ‘ITEM132’]; //var classArray = [“btn”, “btn-green”]; //addClass(btn_greenArr, classArray); // ////設定button_org //var btn_orange = [‘ITEM127’]; //var classArray = [“btn”, “btn-org”]; //addClass(btn_orange, classArray); // ////設定button_gray //var btn_gray = [‘ITEM129’, ‘ITEM130’, ‘ITEM134’]; //var classArray = [“btn”, “btn-gray”]; //addClass(btn_gray, classArray); // ////設定textField //var txt_Arr = [‘ITEM3’]; //var classArray = [“form-control”]; //addClass(txt_Arr, classArray); // ////設定textArea //var txtArea_Arr = [‘ITEM71’]; //var classArray = [“form-control-Area”]; //addClass(txtArea_Arr, classArray); function addClass(objArray, clsArray){ for(var i = 0; i
[AgentFlow]呼叫WebService
2020-04-30
[AgentFlow]常見問題整理
2020-04-27
[Java]加解密
應用於AgentFlow package ext; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AES { private static SecretKeySpec secretKey; private static byte[] key; public static void setKey(String myKey) { MessageDigest sha = null; try { key = myKey.getBytes("UTF-8"); sha = MessageDigest.getInstance("SHA-1"); key = sha.digest(key); key = Arrays.copyOf(key, 16); secretKey = new SecretKeySpec(key, "AES"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public static String encrypt(String strToEncrypt, String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); } catch (Exception e) { System.out.println("Error while encrypting: " + e.toString()); } return null; } public static String decrypt(String strToDecrypt, String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); } catch (Exception e) { System.out.println("Error while decrypting: " + e.toString()); } return null; } /* public static void main(String[] args) { final String secretKey = "Taipei"; String originalString = "test@sdfasdf"; String encryptedString = AES.encrypt(originalString, secretKey); String decryptedString = AES.decrypt(encryptedString, secretKey); System.out.println(originalString); System.out.println(encryptedString); System.out.println(decryptedString); } */ }
2020-04-22
[AgentFlow]HttpURLConnection GET and POST
[AgentFlow]客製位置
AF Java檔案位置
=============================================================
//檔案名稱:HelloWorld.java
package ext;
public class HelloWorld{
public String getMessage(String userName){
return "Hello World!!" + userName;
}
}
=============================================================
//表單客製
檔案位置:apache-tomcat-8.0.35\webapps\WebAgenda\WEB-INF\classes\ext
{ALL:
var helloOb = new Packages.ext.HelloWorld();
var helloMessage = helloOb.getMessage("Chen");
}
=============================================================
//流程客製
檔案位置:PASE\ext
var helloOb = new Packages.ext.HelloWorld();
var helloMessage = helloOb.getMessage("Chen");
2020-04-21
[AgentFlow]Clear Cache
2015-05-02
[AgentFlow]SQL_組織
/* * 查詢多重職務 */ SELECT a.id, a.memid, a.username, a.loginid, b.name, b.id, c.name FROM mem_geninf a, dep_geninf b, rol_geninf c WHERE a.mainroleid = c.rolid AND c.depid = b.depid AND a.memid in (select memid from rol_mem group by memid having count(*) > 1) AND a.resign <> 'true' --指定非離職人員 AND b.id like '08%' --指定公司組織 order by username /* * 部門以下所有部門 */ SELECT * FROM dep_Geninf start with depid = 'DEP61131148392187557' connect by prior depid = parentid; /* * 部門以上所有部門 */ SELECT * FROM dep_Geninf start with depid = 'DEP61131148392187557' connect by prior parentid = depid; /* * 查詢目前MEMID專案職務 */ SELECT a.rolid, a.memid, b.parentid, b.prjid, b.name, b.synopsis, c.authorid, c.name prj_name FROM prjrol_mem a, prjrol_geninf b, project c WHERE a.memid = 'MEM47111273625147618' AND a.rolid = b.rolid AND b.prjid = c.prjid; /* * 更新所有專案職務給代理人 */ update prjrol_geninf set memid = '代理人memid' where memid = 'MEM47471276599403061'; /* * 關閉代理人資料 */ update deputy_geninf set state = 'false' WHERE memid ='MEM47111273625147618' SELECT a.*,rowid FROM deputyrule a WHERE memid = 'MEM41471180408852437' /* * 查詢人員清單(員工編號、員工姓名、部門代號、部門名稱、職稱) 01 = chen ,02 = chensource ,08 = 勤昆 ,09 = 東莞 */ SELECT c.id emp_id, c.username, d.id dep_id, d.name dep_name, a.name Title, a.synopsis real_title, c.resign, c.ONBOARDDATE, c.email FROM rol_geninf a, rol_mem b, mem_geninf c, dep_geninf d WHERE a.rolid = b.rolid AND b.memid = c.memid AND a.depid = d.depid AND d.id like '01%' AND c.resign = 'false' order by c.id /* * 查詢人員資料 */ SELECT * FROM mem_geninf WHERE memid='MEM48001281579688046' /* * 查詢部門資料 */ SELECT * FROM dep_geninf WHERE depid= 'DEP05211388484796125' /* * 查詢eflow帳號 */ SELECT * FROM eflow.mem_geninf WHERE username = '陳莉' /* * 更新資料庫人員 */ UPDATE mem_geninf SET email = 'yolinche@XXXX.com' WHERE loginid = 'a0682'
2015-04-18
[AgentFlow]SQL_流程
/* * 查詢目前流程數量 */ SELECT p.name, m.username, t.keyword, t.state, (to_date('1970/01/01', 'yyyy/mm/dd') + (t.starttime / 1000 / 86400)) as starttime, (to_date('1970/01/01', 'yyyy/mm/dd') + (t.endtime / 1000 / 86400)) as endtime FROM task t, pro_geninf p, mem_geninf m WHERE m.memid in (select c.memid from rol_geninf a, rol_mem b, mem_geninf c, dep_geninf d where a.rolid = b.rolid and b.memid = c.memid and a.depid = d.depid and d.id like '01%' and c.resign = 'false') AND t.proid = p.proid AND t.state in ('running') AND t.rootid = t.tskid AND t.memid = m.memid order by p.name, t.state, starttime desc /* * 查詢某task開始與結束時間並轉換 */ SELECT to_char((to_date('01-01-1970', 'DD-MM-YYYY') + (starttime + (8 * 60 * 60 * 1000)) / 86400000), 'yyyy/mm/dd hh24:mi:ss') as starttime, to_char((to_date('01-01-1970', 'DD-MM-YYYY') + (endtime + (8 * 60 * 60 * 1000)) / 86400000), 'yyyy/mm/dd hh24:mi:ss') as endtime FROM task WHERE tskid = 'Tsk000002966923' /* * 將long時間格式轉為正常格式 */ SELECT to_char((to_date('01-01-1970', 'DD-MM-YYYY') + (1427852861000 + (8 * 60 * 60 * 1000)) / 86400000), 'yyyy/mm/dd hh24:mi:ss') as 時間 FROM dual; /* * 將現在時間格式轉為Long */ SELECT sysdate 當前時間, (sysdate - to_date('01-01-1970', 'DD-MM-YYYY')) * 86400000 - (8 * 60 * 60 * 1000) Long_Time FROM dual; /* * 查詢目前身上代辦事項 */ SELECT ART_GENINF.NAME, ART_STATE.NAME, MEM_GENINF.USERNAME, TASK.STARTTIME FROM ARTINSTANCE JOIN ART_GENINF ON ART_GENINF.ARTID = ARTINSTANCE.ARTID JOIN TASK_ARTINS ON TASK_ARTINS.astid = ARTINSTANCE.ASTID AND TASK_ARTINS.INSID = ARTINSTANCE.INSID JOIN ART_STATE ON ART_STATE.ASTID = ARTINSTANCE.ASTID JOIN TASK ON TASK.TSKID = TASK_ARTINS.TSKID JOIN MEM_GENINF ON MEM_GENINF.MEMID = TASK.MEMID WHERE LOGINID = 'a0682'
2014-08-12
2013-11-07
[AgentFlow]常用程式碼
將Oracle時間字串轉換為時間
系統單月抓出來有空格,雙月無空格
var str = new java.lang.String("05-8月-13"); str = str.replaceAll(" ",""); var inFormatter = new java.text.SimpleDateFormat("dd-MM月-yy"); var inDate = inFormatter.parse(str); var flowDate = new Packages.pase.agenda.MyDate(inDate); flowDate.addDay(flowDate.toString(),21); var outDate = new java.util.Date(flowDate); var outFormatter = new java.text.SimpleDateFormat("yyyy/MM/dd"); Form.setValue("script",outFormatter.format(outDate));
DepID取得部門主管欄位,再透過部門主管欄位取得主管職務MemID
var rol = Client.getDepartment("DEP02671199157696281").getManagerID(); var DivisionMemid = Client.getRole(rol).getMemberList().get(0); Form.setValue("script",DivisionMemid );
專案職務取MemId與姓名
var prjRoleID = "ROL03451172741554296"; var prjmemid = Client.getRole(prjRoleID).getMemberList().get(0); var MemberBymID = Client.getMember(prjmemid).getName(); Form.setValue("script",MemberBymID );
Name_To_MemId
var mem=Client.getMemberByCName("王小明"); var mail=mem.getID(); Form.setValue("script",mail);
MemID_To_RoleID
var MemberRecord = Client.getMember("MEM47111273625147618"); var RoleID = MemberRecord.getMainRoleID(); Form.setValue("script",RoleID );