对接钉钉审批过程记录(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;



     }


 }

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

相关推荐
千舟软件17 小时前
报修系统对接企业微信和钉钉的3种方式_千舟报修云
服务器·钉钉·企业微信
TST-魚爷7 天前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
疯子的梦想@9 天前
Prometheus 接入 Alertmanager 与钉钉机器人,附中文模板和完整踩坑记录
机器人·钉钉·prometheus
xiaogai_gai10 天前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
2601_9520477913 天前
金蝶云星空销售订单附件查询接口权威教程(BOS_Attachment)
python·机器人·钉钉
2601_9520477913 天前
聚水潭售后退仓单同步到金蝶云·星空退货单:轻易云实战教程
大数据·机器人·钉钉·制造
standxy14 天前
钉钉报销单到金蝶付款单:采购付款单据同步实战
钉钉·集成
xixingzhe215 天前
钉钉文档-插入mermaid绘图
钉钉
浪潮BB机15 天前
钉钉闪记后续AI处理太弱?2026主流智能工具实测横评
人工智能·钉钉·语音识别·效率工具·ai工具·录音转写·会议纪要
长弓三石18 天前
钉钉与飞书机器人接入企业级智能体过程及排障实录
人工智能·机器人·钉钉·飞书·企业级harness