一、前言
自從上次 水了一篇 寫了一篇5分鐘快速接入釘釘實現考勤後過了1個多月的時間,我福樂裡又和大家見面了,今天我來聊聊工作流的那些事。
想必各位攻城獅都做過或者接觸過OA系統,說到OA系統肯定離不開一個技術話題,那就是工作流~實現的手段五花八門,有公司內部自己獨立研發、有結合其他三方外掛然後編寫業務程式碼實現的、也有直接採購工作流產品的。那我們今天就來聊下釘釘工作流和如何快速接入。我們分為下面幾個步驟來逐步講解。
1.為什麼選擇釘釘工作流?
2.釘釘工作流的優缺點有哪些?
3.我們如何對接進行實現?
二、為什麼選擇釘釘工作流
這裡就不做長篇描述了,既然你與我能夠在這裡相見,那就說明你在做技術方案的時候也進行了初步篩選,我們選釘釘的想法很簡單,有這樣一套產品,又有開放平臺文件對接,有釘釘的團隊不斷的版本升級迭代,而我們又不想重複造輪子所以就選擇了相對來說大廠的產品,公司的企業溝通也使用的是釘釘,自帶移動端優勢,所以就選擇了釘釘工作流
三、釘釘工作流的優缺點有哪些?
優點:
1.統一使用者體驗。
以前:列如OA系統是有很多業務介面的,不同的流程,使用者是需要挑戰到系統的不同介面的,使用者是需要熟悉每個介面和流程的
現在:統一使用釘釘智慧工作流,審批處理流程體驗一致
2.提升辦公效率
以前:如果企業內部有多個系統,而多個系統中都用到了工作流,則到了審批環節時,都需要審批人進入多個系統進行流程審批,操作畢竟繁瑣,且非常容易遺漏,有的系統甚至是沒有移動端的,導致審批人進行審批的難度加大
現在: 在釘釘工作臺待辦統一入口,直觀檢視所有企業待處理事項
3.對於開發者價值
1.無需關注工作流事項內部流程狀態同步過程,只需關注產品業務場景,還可以節省企業開發成本
2.自帶移動端,讓審批人無需用電腦登入即可一秒審批
說了這麼多優點,那沒缺點嗎?答案肯定是否定的,缺點肯定有,在我們使用的過程中總結了如下幾點
1.審批的流程節點比較死板,必須發起的時候就要計算全部的流程步驟,中途是不能通過介面進行改變流程的
2.表單因為是釘釘自帶,所以如果你想在釘釘上填寫表單發起流程的話難度大,因為不能資料聯動以及資料關聯,所以複雜的表單還是在自己系統發起,釘釘上只做展示
四、我們如何對接進行實現?
首先有2兩種方式,方式一為指定審批人,方式二為複用釘釘審批後臺設定的審批流程。 這裡我講下指定審批人的方式。
1.開啟審批管理後臺,地址: https://aflow.dingtalk.com/dingtalk/web/query/dashboard?dinghash=aflowSetting#/aflowSetting
2.建立流程表單:
然後填寫表單的基礎設定,這裡我直接填測試流程
然後進行釘釘表單的配置,隨便配了2個文字框,如下
流程設計這裡不用管,因為這裡我用的是直接指定審批人的方式(通過介面傳審批人列表)
3.第三步開始擼程式碼,先引用釘釘審批sdk,下載地址如下:
C#:https://open-dev.dingtalk.com/download/openSDK/cshap
JAVA:https://open-dev.dingtalk.com/download/openSDK/java
PHP:https://open-dev.dingtalk.com/download/openSDK/php
直接上發起的示例程式碼:
OapiProcessinstanceCreateRequest request = new OapiProcessinstanceCreateRequest
{
ProcessCode = "PROC-0DAD7345-5F92-42D7-A306-D22ABC13D2DA",//剛才建立的表單模板id
OriginatorUserId = "XXX",//發起人釘釘id
DeptId = Convert.ToInt64("xxx"),//發起人部門id
Approvers = "XXX,XX",//多個審批人用逗號分隔,按傳入的順序依次審批
CcList = "XX,XX",//抄送人列表
CcPosition = "START_FINISH",//開始和結束都提醒抄送人
};
//表單集合
List<OapiProcessinstanceCreateRequest.FormComponentValueVoDomain> list = new List<OapiProcessinstanceCreateRequest.FormComponentValueVoDomain>();
//表單內容
list.Add(new OapiProcessinstanceCreateRequest.FormComponentValueVoDomain() { Name = "標題", Value = "這是一個標題"});
list.Add(new OapiProcessinstanceCreateRequest.FormComponentValueVoDomain() { Name = "內容", Value = "這是一個內容" });
request.FormComponentValues_ = list;
//呼叫釘釘介面
var _client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create");
var appToken = (await _dingtalkService.GetDingToken()).Access_token;
var result= _client.Execute(request, appToken);
好了,我們的流程就發起成功了,如下圖:
文章的最後,順帶分享下幾個踩坑問題
1.釘釘上表單配置控制元件。如果通過介面發起時沒傳 則報錯
2.表單模板id需要url上取,沒有直觀的地方展示
3.釘釘配置的表單標題名稱不能有空格,有空格則報錯
下期預告:打造釘釘分發平臺,實現審批事件回寫和通訊錄事件回寫