對接釘釘審批過程記錄(C#版本)

釘釘開放平臺:API總覽 - 釘釘開放平臺

按照開放平臺操作指引,進入到釘釘開發者后臺:開發者后臺統一登錄 - 釘釘統一身份認證,進行應用創建。

按照開放平臺指引下載釘釘SDK(新版)。

在vs引入釘釘dll文件。

  • 獲取應用接入token:
 public class GetToken{public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);}public static string DingtalkToken(){AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetTokenRequest getTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetTokenRequest{ClientId = "你的clientid,在開發者后臺查看",ClientSecret = "你的secret,在開發者后臺查看",GrantType = "client_credentials",};var res = client.GetToken("你的組織corpid,需要管理員在釘釘管理后臺查看", getTokenRequest);return res.Body.AccessToken;}}
  • 獲取用戶id:
public class GetUser
{public static AlibabaCloud.SDK.Dingtalkcontact_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkcontact_1_0.Client(config);}public static string GetUserId(string token,string username){AlibabaCloud.SDK.Dingtalkcontact_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserHeaders searchUserHeaders = new AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserHeaders();searchUserHeaders.XAcsDingtalkAccessToken = token;AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserRequest searchUserRequest = new AlibabaCloud.SDK.Dingtalkcontact_1_0.Models.SearchUserRequest{QueryWord = username,Offset = 0,Size = 10,FullMatchField = 1,};try{var res = client.SearchUserWithOptions(searchUserRequest, searchUserHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());string uid = res.Body.List.First();return uid;}catch (TeaException err){if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){Console.WriteLine(err.Code);Console.WriteLine(err.Message);var a = err.AccessDeniedDetail["requiredScopes"];foreach (var item in (List<object>)a){Console.WriteLine(item.ToString());}}}catch (Exception _err){TeaException err = new TeaException(new Dictionary<string, object>{{ "message", _err.Message }});if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){Console.WriteLine(err.Code);Console.WriteLine(err.Message);}}return "";}
}
  • 發起流程:
public class DingtalkProcess
{public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);}public static string StartProcess(string Token,string Uid,string Now, string Code, string Name,string Group,string Address){AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders();startProcessInstanceHeaders.XAcsDingtalkAccessToken = Token;string InstanceId = "";AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "日期",Value = Now,ComponentType = "DDDateField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "編碼",Value = Code,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "名稱",Value = Name,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "分組",Value = Group,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues{Name = "地址",Value = Address,ComponentType = "TextField",};AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest{OriginatorUserId = Uid,//發起人idProcessCode = "你的單據id,由管理員在釘釘后臺OA審批相應單據查看",DeptId = 1234567,//部門id,由管理員在通訊錄查詢相應部門idFormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues>
{formComponentValues0, formComponentValues1, formComponentValues2, formComponentValues3, formComponentValues4
},};try{var ResponseId=client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());InstanceId = ResponseId.Body.InstanceId;}catch (TeaException err) {Console.WriteLine(err.Code);Console.WriteLine(err.Message);var a=err.AccessDeniedDetail["requiredScopes"];foreach (var item in (List<object>)a){Console.WriteLine(item.ToString());}}return InstanceId;}
}
  • 根據釘釘流程審批實例id獲取審批流程狀態:
 public class GetInstance{public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient(){AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();config.Protocol = "https";config.RegionId = "central";return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);}public static GetProcessInstanceResponse GetProcess(string token,string processId) {AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders getProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders();getProcessInstanceHeaders.XAcsDingtalkAccessToken = token;AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest getProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest{ProcessInstanceId = processId,};try{var res= client.GetProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());return res;}catch (TeaException err){if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){// err 中含有 code 和 message 屬性,可幫助開發定位問題}}catch (Exception _err){TeaException err = new TeaException(new Dictionary<string, object>{{ "message", _err.Message }});if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)){// err 中含有 code 和 message 屬性,可幫助開發定位問題}}return null;}}

注意:以上操作需要接口權限,具體在實際調試過程中按照返回提示結合操作指引在釘釘開發者后臺申請相應權限。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917857.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AFSIM入門教程03.03:更新所有依賴庫版本

系列索引&#xff1a;AFSIM入門教程索引 上一篇中更新了tiff庫版本&#xff0c;本文將更新所有使用到的依賴庫版本。 失敗了 依賴庫 首先獲取哪些庫被使用了。打開源碼目錄&#xff0c;搜索# Configure the 3rd_party&#xff0c;可以看到調用第三方庫的代碼。 官方提供的…

完美解決hive external表中csv字段內容含“,“逗號的問題

為解決hive表中csv字段內容含","逗號的問題&#xff0c;網上幾乎都是說要用org.apache.hadoop.hive.serde2.OpenCSVSerde。 使用方法為&#xff1a; 1、mysql導出時&#xff0c;加一個ENCLOSED BY ‘"’&#xff0c; 示例&#xff1a; mysql -h 10.16.0.10 -P …

【Git】修改本地和遠程的分支名稱

其原理是&#xff1a; 對于本地&#xff1a;可直接修改分支名稱&#xff1b;對于遠程&#xff1a;不可直接重命名分支&#xff0c;所以應該將修改好名稱的分支以新分支的形式推送上遠程倉庫&#xff0c;之后將新分支與遠程新分支關聯&#xff0c;之后可選擇刪除舊分支# 例子&am…

ubuntu24.04安裝selenium、chrome、chromedriver

實驗環境&#xff1a;kaggle notebook、colab notebook1、安裝chrome!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb!sudo dpkg -i google-chrome-stable_current_amd64.deb!sudo apt-get install -f!export QT_QPA_PLATFORMoffscreen!sudo…

西門子PLC基礎指令6:讀取時鐘指令、設置時鐘指令、使能含義與注意

讀/寫指令 1. 讀取時鐘 指令 READ_RTCREAD_RTC &#xff08;RTC 全稱是 Real - Time Clock&#xff0c;即實時時鐘 &#xff09;指令的主要作用是將 CPU 內部實時時鐘&#xff08;RTC&#xff09;的當前日期和時間信息讀取出來&#xff0c;并存儲到以指定字節地址&#xff08;圖…

GeoTools 結合 OpenLayers 實現緩沖區分析

前言? 緩沖區分析是地理信息系統&#xff08;GIS&#xff09;空間分析的核心功能之一。它通過圍繞點、線或面等地理實體&#xff0c;自動生成指定距離&#xff08;或寬度&#xff09;的等距區域&#xff08;緩沖區&#xff09;。該功能為量化空間鄰近度、評估影響范圍、識別潛…

SpringBoot 接入SSE實現消息實時推送的優點,原理以及實現

SpringBoot 接入SSE實現消息實時推送的優點,原理以及實現 前言 上一篇文章 我寫的關于SpringBoot整合t-io是websocket實時通信的文章中我們可以了解到 websocket是雙向通信的,而且需要TCP連接的支持,今天在這里我要說的SSE(Server-Sent Events) 是一個單項通信的消息實時推…

創建型設計模式:對象誕生的藝術與智慧

&#x1f3ad; 創建型設計模式&#xff1a;對象誕生的藝術與智慧 &#x1f4a1; 溫馨提示&#xff1a;本文將以輕松有趣的方式帶你探索設計模式的世界&#xff0c;就像在聽一個關于"如何優雅地生孩子"的故事一樣&#xff01; &#x1f6aa; 傳送門&#xff1a;在開始…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘gensim’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘gensim’問題 摘要 在使用 PyCharm 2025 進行 Python 開發時&#xff0c;常常需要通過 pip install 安裝第三方包以豐富項目功能。但在安裝 gensim 等包時&…

【嵌入式電機控制#26】BLDC:三相模擬采集

之前有些網友試著用有刷的平均電流法采集三相&#xff0c;還搞了個閉環控制。求&#xff01;結果直接把驅動板給干沒了......做過仿真的朋友們都知道&#xff0c;無刷電機的相電流波形是介于方波和正弦波的。如果拿平均電流去測量&#xff0c;很不靠譜。這節內容為大家分享采集…

ref存儲對象和reactive深度響應式遞歸地對對象的嵌套屬性進行響應式處理

ref 不會遞歸地對 對象 或 數組 中的每個屬性或元素進行深度響應式處理。如果你需要遞歸處理嵌套屬性&#xff0c;reactive 是更適合的選擇。讓我通過具體的例子來展示這一點。 例子&#xff1a;ref 存儲對象和嵌套對象 1. 使用 ref 存儲嵌套對象&#xff1a; import { createA…

小鵬汽車前端面經

前端基礎與瀏覽器機制 (Front-End Fundamentals & Browser Mechanics) 這些問題涵蓋了Web工作的基本原理&#xff0c;包括網絡、渲染和瀏覽器特性。 1. 瀏覽器渲染與性能 (Browser Rendering & Performance) URL輸入發生什么&#xff1f;(What happens when you type a…

利用DeepSeek編寫go語言按行排序程序

聽說google出品的go語言也是系統開發中常用的&#xff0c;性能到底怎么樣&#xff0c;還是老辦法&#xff0c;讓DeepSeek寫個程序跑一下&#xff0c;基于以往的經驗&#xff0c;直接讓它同時編寫有緩沖和無緩沖版本。 package mainimport ("bufio""fmt"&qu…

《解構Angular組件變化檢測:從自動到手 動的效能突破》

為何有時數據更新后視圖卻無動于衷?為何看似簡單的操作會引發連鎖式的性能損耗?要解開這些疑問,需要穿透表層的API調用,深入到框架設計的底層邏輯中去。變化檢測的核心使命,是確保視圖層能夠準確反映數據層的當前狀態。這種"數據-視圖"的同步關系,是所有前端框…

書單 | AI編程+Python+Go三大核心領域書單

這份書單聚焦AI編程、Python開發、Go語言三大核心領域&#xff0c;精選6本本月 最具前瞻性的技術圖書&#xff0c;為你構建"工具鏈業務層系統層"的全棧能力。 1、人人皆可Vibe編程&#xff1a;玩轉氛圍編程 作者&#xff1a;池志煒,薛志榮 本書圍繞Vibe編程這一AI驅…

Kali Linux 2025.2基于MITRE ATTCK框架

從徹底革新的菜單結構到新增的13款尖端工具&#xff0c;再到首次支持智能手表Wi-Fi注入&#xff0c;Kali Linux 2025.2為紅隊、藍隊以及安全研究人員提供了更高效、更直觀的工具生態。菜單結構大變革&#xff1a;基于MITRE ATT&CK框架Kali Linux 2025.2最引人注目的變化之一…

javacc實現簡單SQL解析器

文章目錄前言本章節源碼需求1&#xff1a;實現一個最簡單的select sql要求實現jj文件編譯測試需求2&#xff1a;理解Token及其他屬性說明javajj文件需求3&#xff1a;實現解析得到SQL語法樹 & 精確點位資料獲取前言 博主介紹&#xff1a;?目前全網粉絲4W&#xff0c;csdn…

Odoo OWL前端框架全面學習指南 (后端開發者視角)

核心理念&#xff1a; 將您熟悉的Odoo后端MVCORM架構思想&#xff0c;完整映射到前端OWL組件化開發中&#xff0c;讓您在熟悉的概念體系下&#xff0c;快速掌握新的技術棧。第一部分&#xff1a;核心概念映射與環境搭建內容摘要&#xff1a; 本部分旨在建立后端與前端最核心的概…

Java開發工具包,jdk,idea,VMware,rocketmq,redis,CentOS7

Java開發工具包&#xff0c;jdk&#xff0c;idea&#xff0c;VMware&#xff0c;rocketmq&#xff0c;redis&#xff0c;CentOS7 下載地址 通過網盤分享的文件&#xff1a;Java開發環境工具包 鏈接: https://pan.baidu.com/s/1eJqvPx5DYqtmXgmEtOl8-A?pwdcj1f 提取碼: cj1f –…

macOS Python 安裝

目錄 一、確認系統環境 二、安裝 &#xff08;一&#xff09;下載安裝包 &#xff08;二&#xff09;安裝過程 三、配置環境變量 四、驗證安裝 一、確認系統環境 在安裝 Python 之前&#xff0c;我們先簡單了解一下自己的 MACOS 系統。可以點擊屏幕左上角的蘋果菜單&…