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

2015年11月25日

三十年來筆者工作用與學習過的程式語言

作者: Fred Wang (FW知識瑣記) 日期: 2015/11/25, 2016/6/8(修訂)

盤點1985~2015年,三十年來筆者工作使用與學過的程式語言。

在工作上,有專案開發與維護經驗的程式語言
1.網站開發,網頁應用系統(Web Application)
     1.1 PHP, Codeignitor(framework)
     1.2 Java, JSP, Structs(framwwork)
     1.3 前台設計 - Javascript, jQuery, HTML, CSS
2. 資料處理
     2.1 SAP ABAP/4 -世界排名第一的ERP ERP平台 "SAP" 專用的程式語言,通常是中大型企業使用。
     2.2 VB,  VBX - VBX是Microsoft Word, Excel內的自動化語言,可與Microsoft SQL Server整合,對個人與小型公司而言,可以採用此技術做為便宜的資料處理方案。
     2.3 SQL : Oracle, SQL Server, mySQL,SQLite等資料庫的標準查詢語言,可以直接在這些資料庫提供的Script Editor或透過Toad編輯SQL命令,直接查詢或存取資料庫。
     2.4 COBOL : 個人經驗是用於早期大型系統 IBM S/36與王安電腦系統做資料處理。
     2.5 Clipper, DBaseIII, Foxbase : 開發小型的商業應用系統。  註:現在已經沒甚麼人在用了
3. 業務流程開發
     3.1 Notes Script on Lotus Notes
     3.2 Java on Agentflow
     3.3 PHP+Javascript on ProcessMaker
4. 自動化應用 :
     4.1 AutoIT, PHP  透過這些語言強大的字串處理函式,開發自動化機器程式,排程自動執行,如Web Crawler,Data Parser,B2B,C2B, G2B應用等。

在工作上, 僅維護無專案開發經驗的程式語言
1. Python : 個人經驗是應用於通訊介面
2. C, C++ : 自動化應用,資料處理 等
3. RPGII   : 個人經驗是於早期大型系統 IBM S/36做資料處理,註:現在已經沒甚麼人在用了

只有在學校學過, 寫過作業或個人練習的程式語言
1. Pascal  : 資料結構課。
2. Fortran, Basic, VB : 計算機概論課, 用VB寫一些小遊戲。
3. Assembly : 電腦安全課,實驗反組譯並改寫病毒程式。
4. Prolog, Lisp : 人工智慧課。

不同的程式語言適合不同的應用,沒有最好的,只有最合適的。把程式語言當成工具, 用對工具後, 把較多的時間用在思考解決問題的方法,及最好的邏輯來解決問題。

2015年11月23日

ProcessMaker流程開發 - ProcessMaker的Trigger能做甚麼? 使用的時機?

作者: Fred Wang (FW知識瑣記) 日期: 2015/11/23


ProcessMaker的Trigger提供流程設計大量客製化功能與彈性, 提供流程進行過程中的後端資料處理, 根據官方文件與筆者的實作案例,列出下面的應用 :

資訊取得
1. 取得 使用者, 使用者主管,代理人等資訊
2. 取得 流程流程監督人資訊
3. 取得流程名稱, 關卡(Task)名稱 , 單據(Dynaform)名稱
4. 取得案件備忘資訊
5. 查詢ProcessMaker任意資料庫表格的內容(使用executeQuery)
6. 存取與開啟公共區的檔案
7. 存取流程與案件的全域變數, ProcessMaker客製化資料表(PM Table)與外部資料庫
8. 取得下個關卡被指派的使用者
9. 取得欄位的文字標籤

內容設定與轉換
1. 設定表單填寫的預設值
2. 顯示案件清單在一個Grid內
3. 動態產生網頁連結
4. 增加案件備忘資訊
5. 資料格式轉換, 例如移除金額欄位的千位分隔號與幣別符號, 轉成數字
6. 設定某一流程的案件計數器
7. 產生輸出文件檔案

使用者設定
1. 使用者新增,更改, 指定群組

流程處理
1. 跳過案件的某個關卡
2. 導到特定的案件或步驟
3. 流程中斷跳離
4. 錯誤處理
5. 重導到其他網頁(Redirection)
6. 案件新增, 暫停, 取消與刪除

郵件通知
1. 取得(多個)使用者的郵箱地址,用來產生寄件者清單
2. 將檔案加入郵件附件
3. 郵件中包含流程檔案管理中的附件檔
4. 傳送使用者上傳的檔案
5. 傳送程式產生的檔案
6. 信件中加入HTML連結與圖片
7. 信件中包含表格資訊
8. 送信件給一個案件目前的使用者
9. 送信件給目前案件使用者的主管
10. 送信件給下一關卡的使用者
11. 送信件給前面關卡的使用者
12. 送信件給一個案件所有參與者
13. 送信件給一個部門的所有成員
14. 送信件給一個群組的所有成員
15. 送信件給某種角色的所有使用者
16. 關閉案件並傳送通知

ProcessMaker的Trigger透過PHP程式碼,使用ProcessMaker提供的功能函式,可以進行上面各類應用的開發。

ProcessMaker的使用時機有五個
1. Before Dynaform 也就是輸入表格顯示前
    應用1 : 在第一個關卡, 案件開始(@@INDEX==1)可以設定案件的預設值
    應用2 : 可用來設定每一關卡的預設值

2. After Dynaform 此時使用者已經按下"送出/下一步",但關卡資料尚未寫入資料庫
    應用 : 檢查使用者的輸入值,可以讓游標停留在有問題的欄位,並讓該欄位用紅框顯示。

3. Before Assignment 此時關卡資料已經寫入資料庫, 但下一關卡負責人尚未被指派
    應用 : 如果下一工作階段採Vaue Based Assignment, 可以在此指定下一關負責人

4. Before Routing 此時案件的下一關卡Routing紀錄尚未寫入資料庫(wf_.APP_DELEGATION表格)
     應用 : 在第一個關卡,申請人勾選案件作廢,在此時機將此案件取消

5. After Routing 此時案件的下一關卡Routing紀錄已經寫入資料庫(wf_.APP_DELEGATION表格) 

    應用1 : 通知下一關簽核人
    應用2 : 如果是簽核關卡,簽核人選擇退件,則發送退件通知給簽核人
    應用3 : 最後一個關卡,在此可以發送案件審核完成通知

ProcessMaker流程開發 - Javascript in Dynaform功能與限制

作者: Fred Wang (FW知識瑣記) 日期:2015/11/23

ProcessMaker使用者介面客製化,除了使用Dynaform Designer外,可以使用Javascript來客製化,更改外觀,進行資料檢查等,提升ProcessMaker動態輸入表格(Dynaform)的可用性與功能。下面說明在ProcessMaker中Javascript能做甚麼? 不能做甚麼?

Javascript在Dynaform,能做甚麼?
1. 可以根據使用者行為動態隱藏與顯示欄位
2. 可以改變欄位的文字與風格屬性
3. 可以提供訊息和警示協助與指引使用者
4. 可以驗證與標準化輸入到欄位內的資料
5. 可以自動插入值到欄位內
6. 可以計算欄位間的值
7. 可以管理網格欄位的操作
8. 可以在Submit前檢查資料並強制使用者變更內容
9. 可以開啟與關閉其他的視窗

Javascript是瀏覽器端的程式語言,由瀏覽器來解析與執行。由於安全理由,Javascript對伺服器端的資料存取與操作控制有一些限制。

Javascript在Dynaform,不能做甚麼?
1. 無法存取不在DynaForm內的資料
2. 不能存取伺服器中的資料庫
3. 不能執行伺服器中的作業
4. 無法執行外部程式

2015年11月19日

流程管理平台ProcessMaker 基本觀念(名詞解釋)

作者: Fred Wang (FW知識瑣記) 日期: 2014/11/19, 修訂:2015/11/19


        學習ProcessMaker的第一步, 是了解ProcessMaker中使用到的一些名詞。基本上,ProcessMaker是與BPMN相容的,許多定義也是與BPMN標準相同,若您使用過BPMN相容的流程工具,下面很多名詞與觀念應該可以很容易了解。

一 流程(Process)

     一個流程(Process),可對應到一個業務流程,是一些工作階段(Task)的集合,這些工作階段有一個或多個輸入與輸出,流程的輸出可能是一個有形的物品或服務

二 案件(Case)

     一個案件(Case),是流程定義的一個實例,一個商業案件(Business Case)可以說是一個進行中的工作(Word in Progress)。一個案件就是執行一個流程的過程。一個案件從開始到結束都使用相同的案件編號。

三 案件變數(Case Variables)

     案件變數是ProcessMaker案件執行過程中存放資訊的特殊變數,只有在案件執行的過程中才有效。在動態輸入表格(Dynaform)中的每一個欄位,如textboxes, checkboxes, dropdown boxes與grid objects等,都有一個相關的案件變數,與該欄位名稱相同,且會存放使用者在欄位中輸入的值。當使用者在Dynaform中按下Submit按鈕(或"下一步"連結)後,每個欄位對應的案件變數就會被建立用來存放輸入的值。

四 關卡(Task)

     一個關卡(Task)是一系列有相同目的的工作步驟(Steps)的組合。而關卡的集合形成一個流程。一個關卡(Task)與一個活動(activity)有點不同,一個活動(activity)是一個關卡(Task)的實例。關卡相對與活動就類似流程相對於案件。 關卡與流程是定義,活動與案件是實例(實際進行的工作)。

五 動態輸入表格(Dynaform)

     Dynaform也稱為Dynamic Forms,是在ProcessMaker中設計客製的輸入表格,用來在案件執行過程中與使用者互動的界面。Dynaform讓使用者以圖形化的界面查看與輸入資料,在設計上,對任何使用者應該要直覺好用。

六 主動態表格(Master Dynaform)

     主動態表格用來呈現單筆記錄,欄位預設是垂直排列的。 主動態表格是獨立的表格,不可以嵌入到其它的表格中。

七 框格(Grid)

     框格表格(Grid Form)用來呈現多筆記錄,每一筆記錄的欄位以水平方向排列,一筆記錄一列。Grid form也可以使用特殊的彙整功能,如合計(sum)來進行特定欄位的加總計算。

八 插件(Plugin)

     插件用來增加ProcessMaker額外的功能,或客製化界面與資料庫。

九 流程圖(Process Map)

      流程圖是商業流程各工作階段與引導法則(如上個工作階段到下個工作階段的條件)的視覺表示法. Admin可以直接從流程圖增加新的或修改現有的案件與引導法則。

十 權限(Permissions)

     賦予使用者或群組存取ProcessMaker特定元件(如文件,Dashboard, Case Notes)的法則(rule)。

十一 流程權限(Process Permissions)

     流程權限用來給予使與者或群組對案件或案件中的物件(如DynaForms, Input Documents and Output Documents)唯讀的權限 . 預設只有流程指定的使用者可以開啟相關個案. 為了允許其他使用者可以看到(但不能變更)案件中的資料, 可以指定流程權限 給這些使用者. 流程權限也提供進階的控制功能,設定其他使用者可以查看的是某些特定關卡的資訊.

十二 流程總管(Process Supervisor)

     一個流程的流程總管有權檢視該流程所有的案件(Cases)。 通常一個組織的經理或部門主管會被指定為某個流程的總管。流程總管可以給定所有個案讀與寫的權限。

十三 角色(Roles)

     角色包含對ProcessMaker中特定範圍,特定功能的權限。基本上ProcessMaker包含三種角色 PROCESSMAKER_ADMIN, PROCESSMAKER_MANAGER和PROCESSMAKER_OPERATOR, 這些角色可以設定存取 ADMIN 選單, Users tab等功能的權限.

十四 步驟(Steps)

     一個步驟(Steps)是一個清楚定義的動作(action)。可能是人工的動作或自動化的動作。 一個關卡(Task)由一個或多個步驟所組成。例如: 上傳一份文件,填寫一個Dynaform, 下載一份PDF or DOC文件。

十五 事件(Events)

     流程中多數的動作是由使用者手動執行。但某些動作需要在特定的時間執行. 在ProcessMaker中, 事件(events) 就是在一個工作階段或一系列的工作階段開始或結束時才能執行的行動(actions) , 因此事件需要排程器cron做正確的設定. 因為事件與工作階段的運作緊密相關, 它們只有在工作階段尚未結束時才能執行. 如果選定的工作已經完成(或這個個案被暫停/取消或刪除),這事件就不會執行.

     事件可能是傳送郵件訊息或執行一個trigger. 2.0版後增加了第三個事件"條件事件", 條件事件根據特定案件的狀態來執行.  註: 事件必須從第二個關卡以後(含)才能執行。