当前位置: 首页 > news >正文

对接钉钉审批过程记录(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.xdnf.cn/news/1250101.html

相关文章:

  • C++与C语言实现Stack的对比分析
  • 基于 kubeadm 搭建 k8s 集群
  • Go语言数据类型深度解析:位、字节与进制
  • 深度学习(pytorch版)前言:环境安装和书籍框架介绍
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • 基于串口实现可扩展的硬件函数 RPC 框架(附完整 Verilog 源码)
  • iOS混淆工具有哪些?在集成第三方 SDK 时的混淆策略与工具建议
  • docker容器临时文件去除,服务器容量空间
  • 力扣137:只出现一次的数字Ⅱ
  • 企业级Linux服务器安全:防火墙规则配置与Web/SSH服务优化指南
  • 进阶向:Python开发简易QQ聊天机器人
  • 微软的BitLocker加密
  • DM数据库的安全版本SYSDBA无法修改其他用户密码?
  • Go语言 单元测试
  • 企业通讯与营销技术融合创新:定制开发开源AI智能名片S2B2C商城小程序的协同价值研究
  • 【数字图像处理系列笔记】Ch03:图像的变换
  • dify之推送飞书群消息工作流
  • selenium操作指南
  • python中的推导式
  • Linux Vi常用指令总结
  • AI 软件工程开发 AI 算法 架构与业务
  • AI+UI:如何用智能算法提升设计效率10倍?
  • 虚幻GAS底层原理解剖五 (AS)
  • 设计模式—桥梁模式(Bridge)
  • Spring Boot全局异常处理与日志监控实战指南
  • 华硕携多款明星电竞显示器亮相 ChinaJoy2025,联袂 TCL 华星打造沉浸体验
  • 鼠标下滑时回跳问题
  • 从 “认知优势” 到现实赋能:DPVR AI Glasses 重构智能穿戴价值
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter
  • 4、docker数据卷管理命令 | docker volume