如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2021年6月11日

BPM系統如何使用jQuery動態顯示流程圖之一(含範例) --- 使用flowchart.js

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021-6-11

開發一個業務流程管理系統(BPM)需要透過圖形化的方式呈現流程或建立流程,如何使用Javascript動態呈現流程圖呢? 

下面是我應用flowchart.js程式庫建立的一個範例 :

畫面呈現如下 : 

 

這個範例上方Code是flowchart.js流程圖的控制碼,透過解析特有的語法呈現如下方的流程圖,

可以在Code區域更改控制碼,然後點擊執行,下方的流程圖就會改變。

點擊方塊作業回產生新的分頁執行相關的作業,例如: 點擊"填寫請購單",就會進入請購系統的開立請購單畫面,依此類推。

本文只是一個簡單的範例,也可以整合進Web應用系統,將控制碼改為透過比較友善的畫面進行設定,設定完儲存後自動產生控制碼,並呈顯新的流程圖,並透過後台程式儲存這個流程設定。

經過幾天的嘗試,我發現flowchart.js的缺點主要有三點 : 

1 流程圖繪製比較不具彈性,流程線只能選擇向右,向下與向左,不能決定每一條線繪製的

長短與位置,向左方繪製的流程線繪製會有問題,如下圖

   

2 決策節點只能有yes, no兩種選擇,不能有更多種選項。無法解決三種或三種以上條件的流程

,例如: 三種請購單類型分別走三種不同的審核流程。

 

3 流程線無法個別設定要顯示的文字。

  

其中,第二個缺點或許可以用parallel節點來取代,但是整體上我還是不太能夠接受這個套程式庫。

flowchar.js官方網址 : http://flowchart.js.org/

說明: https://www.jqueryscript.net/chart-graph/jQuery-Plugin-To-Generate-SVG-Based-Flowchart-Diagram.html

download : https://github.com/adrai/flowchart.js 

範例程式碼如下 :

<div>
Code:<br />
<textarea id="code" style="width: 100%;" rows="11">
st=>start: 開始
e=>end: 結束
op1=>parallel: 填寫請購單:>http://myweb.abc.com/purchaseapp/fill_form[blank]
op2=>operation: 主管審核:>http://myweb.abc.com/purchaseapp/sign_form[blank]
op3=>operation: 承辦人審核:>http://myweb.abc.com/purchaseapp/sign_form[blank]
op4=>operation: 作廢|cancelled:>http://myweb.abc.com/purchaseapp/cancel_form[blank]
cond1=>condition: 是否通過?|decision
cond2=>condition: 是否通過?|decision

st->op1
op1(path1, bottom)->op2(right)->cond1
op1(path2, left)->op4
cond1(yes)->op3(right)->cond2
cond1(no)->op1

cond2(yes)->e
cond2(no)->op1
</textarea>
</div>
<div><button id="run" type="button">執行</button></div>
<div id="canvas"></div>

<style type="text/css">
  .end-element, .start-element { fill : white; }
</style>
<script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://flowchart.js.org/flowchart-latest.js"></script>
<script>

    window.onload = function () {
        var btn = document.getElementById("run"),
            cd = document.getElementById("code"),
            chart;

        (btn.onclick = function () {
            var code = cd.value;

            if (chart) {
              chart.clean();
            }

            chart = flowchart.parse(code);
            chart.drawSVG('canvas', {
                  // 'x': 30,
                 // 'y': 50,              
                 // 'maxWidth': 3,//ensures the flowcharts fits within a certian width              
                'text-margin': 10,
                'font-size': 14,
                'font': 'normal',
                'font-family': '微軟正黑體',
                'font-weight': 'normal',
                'font-color': 'black',
                'line-color': 'black',
                'element-color': 'black',
                'fill': 'white',
                'yes-text': '核准',
                'no-text': '退回',
              
                  // 'line-width': 1,
                  'line-width': 2,
                  'line-length': 50,
                  // 'arrow-end': 'block',
                  'arrow-end': 'classic-wide-long',
                  'scale': 1,
                  'symbols': {
                    'start': {
                      'class': 'start-element'
                    },
                    'end':{                     
                      'class': 'end-element'
                    }
                  },
                  'flowstate' : {
                    decision : { 'fill' : '#C45879'},
                    cancelled : { 'fill' : 'gray'}
                 }
            });
            $('[id^=op1]').click(function(){
                alert('申請人填寫請購單');
            });            
            $('[id^=op2]').click(function(){
                alert('申請人上級主管審核');
            });            
            $('[id^=op3]').click(function(){
                alert('作業承辦人審核');
            });                
        })();
    };    

</script>



2021年6月10日

台灣COVID-19累計確診死亡率高於全球平均值的疑問,真正的原因是甚麼?

作者: Fred F.M. Wang (FW知識瑣記) 日期:2021-6-10

台灣今天累計確診死亡率為2.7824%
2.7824% = 333(死亡人數) / 11,968(確診人數)
高於全球平均,我覺得怪怪的,為什麼台灣確診死亡率這麼高?

台灣感染的病毒株太毒嗎? 這個病毒多挑台灣老人感染嗎? 好像不是這樣。

排除上面兩點猜測,以台灣醫療水準高, 且醫療尚未崩潰的情況,台灣確診死亡率不應該高於全球平均,可以解釋的是台灣篩檢數量過低,已感染未篩檢到的人可能還很多。

以篩檢方式來看,很多國家採用普篩,台灣則是有症狀者才進行篩檢,最近才漸漸進行社區或工廠的普篩。採用普篩的方式會抓出更多染疫者,因此分母會比較大,確診死亡率就會比較低。

如果上面的解釋是正確的,以全球平均確診死亡率(2.1609%)來換算,台灣確診人數應該至少是 20,696人。
20,696 = 333(死亡人數) / 2.1609%

因此,台灣已感染未篩檢到的人可能會多於8,728人(20,696減11,968),因此,可能還有八九千人是無症狀感染者或症狀輕微未就醫篩檢者

退步原來是向前

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021-6-10

很多年前在馬偕健檢中心等待做健檢,休息室中掛一幅畫,畫中有一首詩,是五代後梁契此和尚寫的插秧偈 :

"手把青秧插滿田, 低頭便見水中天; 心地清淨方為道, 退步原來是向前。"
當時並沒有很深的感受,到了五十歲,生了一場大病,才深刻體會這首詩的深意。

我五十歲以前汲汲營營於提升自己的能力,在工作上自我要求很高;五十歲後試著放下放慢,學習過更平衡與更健康的人生。就像插秧一樣,看似後退,其實仍然是向前,只是面對人生的視野不同,角度不同。

2021年6月3日

猶太人在全球的影響力(未完)

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021/6/2

COVID-19疫情,以色列能超快速取得與施打疫苗,讓我對猶太人的影響力刮目相看,整理一下猶太人在全球的影響力。

一 財富

世界7大富豪猶太人占4席(2020/4月)。

美國猶太人600萬,只佔美國總人口的2.3%,但
美國10大猶太裔富豪就占了美國一半的財富,美國富豪排行榜前40名中有18名是猶太人,美國400大富豪排行榜中,有45%是猶太人。(2017/12月Forbes)

其中有

  • 臉書老闆馬克·祖克柏(Mark Zuckerberg),
  • 谷歌兩位創始人 拉里·佩奇和謝爾蓋·布林
  • 微軟前總裁,NBA快艇隊老闆 史蒂夫·鮑爾默
  • 甲骨文老闆勞倫斯·艾利森(Lawrence Ellison)
  • 英特爾公司前CEO 安迪葛洛夫
  • 戴爾公司老闆 麥可·戴爾
  • 洛克菲勒家族
  • 美孚石油公司羅斯柴爾德家族
  • 梅鐸新聞集團 魯柏·梅鐸
  • 星巴克老闆霍華德‧舒爾茨(Howard Schultz)
  • 華爾街摩根財團,高盛、雷曼兄弟、所羅門兄弟等投資公司
  • 艾克塞斯工業集團老闆 萊恩·布拉瓦特尼克
  • 彭博社老闆麥克·彭博(Michael Bloomberg)
  • 全球最大賭博集團拉斯維加斯桑德斯集團老闆 謝爾登·阿德爾森
  • 股神 華倫·巴菲特 
  • 投資家 吉姆·羅傑斯
  • 金融巨鱷貨幣投機家喬治·索羅斯,
  • 對沖基金大佬、素有華爾街狼王之稱 卡爾‧伊坎


二 影響力

猶太人占全世界諾貝爾獎項的五分之一的得主。
猶太人共拿走了 19%的化學獎、26%的物理獎、28%的生理與醫學獎、41%的經濟學獎。


在非科學領域,猶太人還拿走了 13%的諾貝爾文學獎,1/3 以上的普立茲獎,1/3 以上的奧斯卡獎,近 1/3 的西洋棋冠軍。

現任的美國 8 位大法官中,有 3 位是猶太人。

20 世紀最重要的科學家愛因斯坦、研發小兒麻痺疫苗的沙克、名導演伍迪艾倫

參考來源:

1 一整天 我們的生活都離不開猶太人

 

 

2021年5月26日

當醫生的大多是為了賺比較多錢嗎?

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021/5/26

當醫生那麼辛苦,工作時間長,又有醫療糾紛(治不好還被告),醫院暴力,疫情時期還有染疫的風險,哪為啥還那麼多高中畢業生第一志願是醫學系?

有些人說,為了賺得比較多錢,真的是這樣嗎? 


農業社會的台灣,醫師是社會地位高且高薪的工作,所以會讀書的孩子,會因為賺得比較多錢選擇當醫師。

近二三十年來台灣因為科學園區高科技業起飛,其實也有不少優秀的孩子,成績可以錄取醫學系,但選擇了電子電機系等理工科系,不再像過去功課最好的都一定選擇讀醫學系。

根據我就讀醫學系的女兒了解,現代醫學系學生中除了家中經濟條件較差的學生會因經濟因素選擇讀醫學系之外,很少高中生畢業時是為了多賺錢才選擇醫學系的。

主要選擇醫學系的原因大致分為下面三種,

第一種 : 傳統觀念的影響,因為功課好,家長老師或自己都認為理當該讀醫學系,通常在觀念比較傳統的地區,家庭或學校,有些學生在校成績非常優秀,在申請校系時,就會被老師約談,耳提面命一定要填醫學系,這樣學校的榜單會比較好看。

第二種 : 家族因素,父母是醫生或家族有多人是醫生,耳濡目染下,自然而然就立志當醫生,也有些受迫於醫生父母的壓力,一定要讀醫學系才行。

第三種 : 個人志向與興趣,有從小受如史懷哲等傳記名人的影響,也有因自己或家人為病所苦或重要親人因病過世等因素立定志願當醫生。,有從小受如史懷哲等傳記名人的影響,也有因自己或家人為病所苦或重要親人因病過世等因素立定志願當醫生。也有對生命科學相關學科有興趣而選擇醫學系的。

醫學系需要讀六年(醫學書籍內容繁多難念),兩年PGY(非執業醫生),再受多年沒日沒夜辛苦的專科醫師訓練(不同科別訓練時間不同),才能獨當一面當主治醫師。這時候,其他在台積電,聯發科工作的同學年薪都兩三百萬了,剛當上主治醫師還不如這些同學的薪水高呢? 

註:學測或指考可以錄取醫學系的學生,在成績上都可以錄取台清交的電機系

所以不要誤解,時代已經不同了。