iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
0
Software Development

BPM企業流程-EFGP開發路程系列 第 15

[Day 15] EasyFlow GP--Web表單元件-Dropdown 下拉式選項

今天要分享的是另一個常用的元件,下拉式選項- https://ithelp.ithome.com.tw/upload/images/20171218/20105722bRDrUU1DVn.png
選項的內容值可以直接寫在選項內,也可以抓取資料庫的值。
方式一.直接寫選項值
點選元件後,到[設定選項],將要放入的下拉值設定好。
如下圖,設定幣別有台幣和美金,兩種選項。

  • 顯示值為下拉選項看到的表面值。
  • 實際值為下拉選項實際意義的價值Value。
    https://ithelp.ithome.com.tw/upload/images/20171218/20105722IWVKPbBjMU.pnghttps://ithelp.ithome.com.tw/upload/images/20171218/20105722sROTuUIMwo.png

方式二.透過SQL抓資料值
EFGP的BPM文件也有介紹說明方式,在此忽略,細節請登入EFGP看BPM文件。
我在此分享BPM文件沒有介紹,我很常用的抓資料方式,兩行就搞定。

     //抓取SQL註冊器的資料代號,當下拉式選項
var tSqlId = "getTTafz";
FormUtil.appendOptionBySqlId(tSqlId,"dwnTT");  //第二個參數,為下拉式選項元件代號。

在此要留意,SQL註冊器的Select 欄位數要為兩個,前面放表面值 後面放實際值。
以此範例為例。
https://ithelp.ithome.com.tw/upload/images/20171218/20105722ZFxDFuEq45.png

通常載入資料到下拉選項的語法會寫在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 鎖定下拉式選項值。


上一篇
[Day 14] EasyFlow GP--Web表單元件-Button 資料選取器進階應用
下一篇
[Day 16] EasyFlow GP--Web表單元件-Grid 表格
系列文
BPM企業流程-EFGP開發路程21

1 則留言

0
vicentli
iT邦新手 3 級 ‧ 2017-12-21 14:01:32

謝謝樓主分享文章,我最近也剛開始接觸EasyFlow GP,以前也沒寫程式的底。
不曉得方不方便加Line交流,想多了解一些EasyFlow GP的應用範圍,
及寫程式要注意的部份
目前看是只有應用在WF、ESS、自定單據流程,但我想EFGP應不只如此?
程式部份,我在寫流程設計的部門條件判斷時碰到:想抓部門前3碼,但發現一些語句
例如 表單名稱.UnitID.substring(0,3)==='111' 或
先在表單裡寫了 var id = document.getElementByID("UnitID").value;
流程設計判斷裡再用id.substring(0,3)
似乎都不能用會出錯,變成要土法煉鋼把整個公司的部門都寫出來很麻煩,
不知前輩是怎麼解決,謝謝。
另外,寫程式語法問題可以問鼎新客服嗎?怕問了太蠢,哈
因為這個好像是維護人員需自己加強的部份,鼎新客服應該是幫忙解決系統問題?

看更多先前的回應...收起先前的回應...
恩恩 iT邦新手 5 級‧ 2017-12-21 14:16:46 檢舉

寫程式語法問題可以問鼎新客服嗎?怕問了太蠢,哈
因為這個好像是維護人員需自己加強的部份,鼎新客服應該是幫忙解決系統問題?

這部分當然可以問鼎新的客服喔,我剛開始接觸時,連document.getElementByID("") 抓資料都會寫錯,因為我寫成
document.getElementById(""),這個小錯誤,讓我整整苦思找BUG2天...,後來也是靠EFGP服務幫我"看"出來!!

趁你現在還有維護合約要多加詢問客服,以免像我...已經沒有合約囉/images/emoticon/emoticon20.gif

回覆正題:
流程設計的判斷
1.應該是要用[],而不是()
2.要用 : 而不是 ,
3.使用== 而不是===

EX: 表單.元件[起:迄]=='XXX'
apmt420.pmk02[0:3]=='EXP'

PS:你問的這個例子我當初也碰過,還好當時有EFGP客服可以問。

謝謝版大!成功了!請問這是js語法,還是java的語法?我還特地去FB發問js怎麼寫,結果不能用,想說是我寫的js語法有錯嗎
其他問題我再問EFGP客服好了,感謝您
我也有把大小寫搞錯過,流程IE可以跑、chrome不能跑
也是抓2天才找到

恩恩 iT邦新手 5 級‧ 2017-12-21 15:53:05 檢舉

我想這是EFGP的語法,哈哈~
因為我當時有問題,就直接問客服。

你有問題還是可以在這邊發問喔,也許我也不會,然後我們一起解決或問了客服後,你我都長知識囉!!/images/emoticon/emoticon07.gif

太感謝了!/images/emoticon/emoticon07.gif
我剛就開了個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 白搭

恩恩 iT邦新手 5 級‧ 2017-12-22 09:16:43 檢舉

客服的意思不是縮短寫法,而是要你換到WEB表單JavaScript裏頭,寫TA001遇到1111,2222,3333...時,TEST_hdn="Y"
表單流程的流程條件當TEST_hdn="Y" 流程如何走...
我想是因為你要判別的TA001不是一個群組資料,而是分散的資料,所以會寫的比較長

哇,真的很感謝你!我是知道他要我去表單裡寫,只是我還真不會寫,剛剛還在想該怎麼寫,不然上來itehlp問Python寫法好了,不用再進表單裡寫。沒想到一上來就看到您的回覆,感謝你給的提示!

我要留言

立即登入留言