对接钉钉审批过程记录(C#版本)

钉钉开放平台:API总览 - 钉钉开放平台

按照开放平台操作指引,进入到钉钉开发者后台:开发者后台统一登录 - 钉钉统一身份认证,进行应用创建。

按照开放平台指引下载钉钉SDK(新版)。

在vs引入钉钉dll文件。

  • 获取应用接入token:
cs 复制代码
 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:
cs 复制代码
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 "";
    }
}
  • 发起流程:
cs 复制代码
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,//发起人id
            ProcessCode = "你的单据id,由管理员在钉钉后台OA审批相应单据查看",
            DeptId = 1234567,//部门id,由管理员在通讯录查询相应部门id

            FormComponentValues = 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获取审批流程状态:
cs 复制代码
 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;



     }


 }

注意:以上操作需要接口权限,具体在实际调试过程中按照返回提示结合操作指引在钉钉开发者后台申请相应权限。

相关推荐
后青春期的诗go4 天前
金蝶云星空插件开发记录(一)
c#·钉钉·金蝶云星空·插件开发
Dark_programmer12 天前
钉钉小程序 - - - - - 小程序内打开OA文档链接
小程序·钉钉
热爱生活的五柒12 天前
系统代理开启时,钉钉页面加载失败
钉钉
阿三081212 天前
钉钉 AI 深度赋能制造业 LTC 全流程:以钉钉宜搭、Teambition 为例
人工智能·低代码·钉钉·teambition
极新12 天前
163起融资,梅卡曼德融资额夺冠,钉钉、百度智能云10周年,汉桑科技IPO| 2025年8月人工智能投融资观察 · 极新月报
科技·百度·钉钉
Dolphin_Home12 天前
IT需求提示未读信息查询:深度技术解析与性能优化指南【类似:钉钉已读 功能】
性能优化·钉钉
fruge13 天前
钉钉机器人消息发送 npm 库:ddmessage-fruge365
机器人·npm·钉钉
yfs102417 天前
钉钉补卡事件处理方案
java·数据库·钉钉
AI指北18 天前
每周AI看 | 微软开源VibeVoice-1.5B、OpenAI历史性交棒、网易云商出席AICon全球人工智能开发与应用大会
大数据·人工智能·ai·微软·钉钉·在线客服·ai agent
HillVue21 天前
无招想让钉钉重新酷起来
eclipse·钉钉