今天要分享的是另一個常用的元件,下拉式選項-
選項的內容值可以直接寫在選項內,也可以抓取資料庫的值。
方式一.直接寫選項值
點選元件後,到[設定選項],將要放入的下拉值設定好。
如下圖,設定幣別有台幣和美金,兩種選項。
方式二.透過SQL抓資料值
EFGP的BPM文件也有介紹說明方式,在此忽略,細節請登入EFGP看BPM文件。
我在此分享BPM文件沒有介紹,我很常用的抓資料方式,兩行就搞定。
//抓取SQL註冊器的資料代號,當下拉式選項
var tSqlId = "getTTafz";
FormUtil.appendOptionBySqlId(tSqlId,"dwnTT"); //第二個參數,為下拉式選項元件代號。
在此要留意,SQL註冊器的Select 欄位數要為兩個,前面放表面值 後面放實際值。
以此範例為例。
通常載入資料到下拉選項的語法會寫在Form Open() 表單開啟時。
但這會遇到一個狀況,當選項有A,B,C三種資料時,第一關卡選B,
執行到下一關卡時,系統執行Form Open又會重新再載入一次資料
這時選項B的紀錄已被刷掉。這是我起初開發表單時常遇到的狀況。
所以請大家務必在Form Open時,先載入下拉選項的資料,再加入
以下語法,讓下拉選項的隱藏值定住選項值。
//當新增一個下拉選項的元件時,系統也同步會新增一個 元件代號_hdn 的隱藏元件
var dwn_B_hdn=document.getElementById("dwn_B_hdn");
if (dwn_B_hdn != null) { //要表單送出後,系統才會建立此隱藏元件,所以寫這一行當判斷
var tSelectdwn_B=eval(dwn_B_hdn.value); //注意要以eval() 轉換值。
DWRUtil.setValue("dwn_B", tSelectdwn_B); //第一個參數為下拉選項的元件代號。
補充另一種做法,將SQL語法寫在FORM 裡。
//下拉式選單 -簽核層級
var dwn_FunLevel_hdn=document.getElementById("FunLevel_hdn");
var tSql2 = "select functionLevelName,functionLevelName from FunctionLevel where organizationOID='"+mainOrgOID+"' order by levelValue DESC";
FormUtil.appendOption("EFGP",tSql2,"FunLevel"); //第三個參數是下拉選項的元件代號。
if (dwn_FunLevel_hdn != null) {
var tSelectdwn_FunLevel=eval(dwn_FunLevel_hdn.value);
DWRUtil.setValue("FunLevel", tSelectdwn_FunLevel);
}
結論:
使用 FormUtil.appendOptionBySqlId 載入SQL註冊器的選項值,或FormUtil.appendOption載入SQL語法
使用 DWRUtil.setValue 鎖定下拉式選項值。
謝謝樓主分享文章,我最近也剛開始接觸EasyFlow GP,以前也沒寫程式的底。
不曉得方不方便加Line交流,想多了解一些EasyFlow GP的應用範圍,
及寫程式要注意的部份
目前看是只有應用在WF、ESS、自定單據流程,但我想EFGP應不只如此?
程式部份,我在寫流程設計的部門條件判斷時碰到:想抓部門前3碼,但發現一些語句
例如 表單名稱.UnitID.substring(0,3)==='111' 或
先在表單裡寫了 var id = document.getElementByID("UnitID").value;
流程設計判斷裡再用id.substring(0,3)
似乎都不能用會出錯,變成要土法煉鋼把整個公司的部門都寫出來很麻煩,
不知前輩是怎麼解決,謝謝。
另外,寫程式語法問題可以問鼎新客服嗎?怕問了太蠢,哈
因為這個好像是維護人員需自己加強的部份,鼎新客服應該是幫忙解決系統問題?
寫程式語法問題可以問鼎新客服嗎?怕問了太蠢,哈
因為這個好像是維護人員需自己加強的部份,鼎新客服應該是幫忙解決系統問題?
這部分當然可以問鼎新的客服喔,我剛開始接觸時,連document.getElementByID("") 抓資料都會寫錯,因為我寫成
document.getElementById(""),這個小錯誤,讓我整整苦思找BUG2天...,後來也是靠EFGP服務幫我"看"出來!!
趁你現在還有維護合約要多加詢問客服,以免像我...已經沒有合約囉
回覆正題:
流程設計的判斷
1.應該是要用[],而不是()
2.要用 : 而不是 ,
3.使用== 而不是===
EX: 表單.元件[起:迄]=='XXX'
apmt420.pmk02[0:3]=='EXP'
PS:你問的這個例子我當初也碰過,還好當時有EFGP客服可以問。
謝謝版大!成功了!請問這是js語法,還是java的語法?我還特地去FB發問js怎麼寫,結果不能用,想說是我寫的js語法有錯嗎
其他問題我再問EFGP客服好了,感謝您
我也有把大小寫搞錯過,流程IE可以跑、chrome不能跑
也是抓2天才找到
我想這是EFGP的語法,哈哈~
因為我當時有問題,就直接問客服。
你有問題還是可以在這邊發問喔,也許我也不會,然後我們一起解決或問了客服後,你我都長知識囉!!
太感謝了!
我剛就開了個case問客服,碰到例如
請購單建立作業(PURI05)[GP25(PR)].TA001=='1111' or 請購單建立作業(PURI05)[GP25(PR)].TA001=='2222' or 請購單建立作業(PURI05)[GP25(PR)].TA001=='3333' or 請購單建立作業(PURI05)[GP25(PR)].TA001=='4444' or 請購單建立作業(PURI05)[GP25(PR)].TA001=='5555'有沒比較簡單的寫法XD
不然這樣寫很長一串,又麻煩
鼎新回覆流程設計師是用python寫的,不過我問他怎麼縮減程式碼,他建議用javascript寫在hdn物件,流程再用hdn物件來判斷…意思就是 你自己想辦法寫XD 白搭
客服的意思不是縮短寫法,而是要你換到WEB表單JavaScript裏頭,寫TA001遇到1111,2222,3333...時,TEST_hdn="Y"
表單流程的流程條件當TEST_hdn="Y" 流程如何走...
我想是因為你要判別的TA001不是一個群組資料,而是分散的資料,所以會寫的比較長
哇,真的很感謝你!我是知道他要我去表單裡寫,只是我還真不會寫,剛剛還在想該怎麼寫,不然上來itehlp問Python寫法好了,不用再進表單裡寫。沒想到一上來就看到您的回覆,感謝你給的提示!