二开案例.WebApi.单据查询.查询待办任务并生成审批链接

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.WebApi.单据查询.查询待办任务并生成审批链接

【应用场景】

WebApi,查询待办任务列表,生成审批链接。


【案例演示】

查询用户demo的所有待办任务,并生成待办列表和审批链接,供第三方系统发起工作流审批。

星空的待办列表:

第三方访问星空接口后生成的待办列表:


【准备工作】

<1>完成第三方系统登录授权配置,并获取用于第三方系统登录接口的关键数据(数据中心ID、应用ID、登录账号,用户秘钥)。

参考资料:【第三方系统单点登录到金蝶云指南】https://vip.kingdee.com/article/9788


<2>创建demo用户相关的工作流待办任务,如下图。



【实现步骤】

<1>使用单元测试工程,编写如下测试代码。

using Kingdee.BOS.BusinessEntity.Login;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.Client;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Text;

namespace Jac.XkDemo.BOS.WebApiTests
{
    /// <summary>
    /// WebApi.单据查询.查询待办任务并生成审批链接
    /// </summary>
    [TestClass]
    public class WFAssignmentBillExecuteBillQueryAndBuidAuditLinkTest
    {
        [TestMethod]
        public void Test()
        {
            #region 通过WebApi接口获取待办列表数据
            // 星空站点Url
            var webSite = "http://172.17.2.100/k3cloud/";
            var approvalUrl = "http://172.17.2.100/k3cloud/html5/index.aspx?ud=";
            // 数据中心ID(账套ID)
            var dbId = "602f2c09aee85f";
            // 登录账号          
            var userName = "demo";
            //第三方系统应用Id             
            var appId = "JCTest";
            //第三方系统应用秘钥             
            var appSecret = "d625dd54ae944dc8bb8a692a79c9a1e6";
            // 登录语言
            var lcId = 2052;
            // 登录
            var client = new K3CloudApiClient(webSite);
            var loginResult = client.LoginByAppSecret(dbId, userName, appId, appSecret, lcId);
            var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
            //登录结果类型等于1,代表登录成功
            if (resultType != 1)
            {
                Assert.IsFalse(true);
                return;
            }
            // 获取demo用户的待办列表
            /*
{
"FormId": "WF_AssignmentBill",
"FieldKeys": "FASSIGNID,FTitle,FContent,FTmpId.FProcessType",
"FilterString": "FReceiverId=100008 AND FStatus=0",
"OrderString": "FCreateTime DESC",
"TopRowCount": 0,
"StartRow": 0,
"Limit": 100,
"SubSystemId": ""
}
             */
            var dataObj = new
            {
                FormId = "WF_AssignmentBill",
                FieldKeys = "FASSIGNID,FTitle,FContent,FTmpId.FProcessType",
                FilterString = "FReceiverId=100008 AND FStatus=0",
                OrderString = "FCreateTime DESC",
                TopRowCount = 0,
                StartRow = 0,
                Limit = 100,
                SubSystemId = ""
            };
            var data = JsonConvert.SerializeObject(dataObj);
            var assignList = client.ExecuteBillQuery(data);
            if (assignList == null || assignList.Count == 0)
            {
                Assert.IsFalse(true);
                return;
            }
            #endregion
            #region 根据待办列表数据,生成每个待办任务的审批链接
            // 生成审批链接
            // 参考资料:【第三方系统单点登录到金蝶云指南】https://vip.kingdee.com/article/9788
            var timestamp = (DateTimeFormatUtils.CurrentTimeMillis() / 1000).ToString(); // 时间戳
            var signArgs = new[] { dbId, userName, appId, appSecret, timestamp }; // 签名
            var sign = SHA1Util.GetSignature(signArgs);
            var arg = new SimplePassportLoginArg();
            arg.appid = appId;
            arg.dbid = dbId;
            arg.lcid = lcId.ToString();
            arg.origintype = "SimPas";
            arg.signeddata = sign;
            arg.timestamp = timestamp;
            arg.username = userName;
            arg.entryrole = string.Empty;
            arg.formtype = string.Empty;
            arg.pkid = string.Empty;
            // 输出HTML
            var sbHtml = new StringBuilder();
            sbHtml.AppendLine("<ul>");
            foreach (var assign in assignList)
            {
                var assignId = assign[0].ToString(); // 待办任务内码
                var title = assign[1].ToString(); // 待办任务标题
                var content = assign[2].ToString(); // 待办任务内容
                var processType = assign[3].ToString(); // 待办任务使用的工作流类型
                // 开始拼接审批链接
                arg.otherargs = assignId;
                // 根据FProcessType决定formid是用工作流的还是审批流(310是审批流),工作流任务=WF_AssignmentApprovalH5,审批流=AP_ApprovalAssignHandleH5
                arg.formid = processType == "310" ? "AP_ApprovalAssignHandleH5" : "WF_AssignmentApprovalH5";
                var argJosn = KDObjectConverter.SerializeObject(arg);
                var argJsonBase64 = Encoding.UTF8.GetBytes(argJosn).ToBase64();
                var InfoUrl = approvalUrl + argJsonBase64;
                sbHtml.AppendLine(string.Format("<li><h3>{0}</h3>{1}<a href=\"javascript:window.open('{2}');void(0);\"> 处理 </a></li>", title, content, InfoUrl));
            }
            sbHtml.AppendLine("</ul>");
            var html = string.Format(HtmlTemplate, sbHtml.ToString());
            Console.WriteLine(html);
            // 生成HTML文件
            File.WriteAllText(@"C:\test.html", html);
            Assert.IsTrue(true);
            #endregion
        }
        /// <summary>
        /// HTML模版
        /// </summary>
        const string HtmlTemplate = @"
<html>
<head>
    <title>金蝶云星空-工作流待办任务列表</title>
</head>
<body>
    {0}
</body>
</html>
";
    }
}


<2>运行单元测试,即可生成包含了待办任务的审批链接的HTML文件,如下图。

对应HTML源码如下:

<html>

<head>

    <title>金蝶云星空-工作流待办任务列表</title>

</head>

<body>

    <ul>

<li><h3>您有待办任务需要处理</h3>您有待办任务需要处理<a href="javascript:window.open('http://172.17.2.100/k3cloud/html5/index.aspx?ud=eyJkYmlkIjoiNjAyZjJjMDlhZWU4NWYiLCJ1c2VybmFtZSI6ImRlbW8iLCJhcHBpZCI6IkpDVGVzdCIsInNpZ25lZGRhdGEiOiI4MDhjOTA0N2IwMDc2ZjRiYjA4M2MxMjRjMTIxMTVjZGZiZmJmNjJiIiwidGltZXN0YW1wIjoiMTY2MzgwODUzNSIsImxjaWQiOiIyMDUyIiwib3JpZ2ludHlwZSI6IlNpbVBhcyIsImVudHJ5cm9sZSI6IiIsImZvcm1pZCI6IldGX0Fzc2lnbm1lbnRBcHByb3ZhbEg1IiwiZm9ybXR5cGUiOiIiLCJwa2lkIjoiIiwib3RoZXJhcmdzIjoiNjMxMTlhZDU1MDljOGIwMjJlIiwib3Blbm1vZGUiOm51bGx9');void(0);"> 处理 </a></li>

<li><h3>CGDD000483待处理</h3>您有待办任务需要处理<a href="javascript:window.open('http://172.17.2.100/k3cloud/html5/index.aspx?ud=eyJkYmlkIjoiNjAyZjJjMDlhZWU4NWYiLCJ1c2VybmFtZSI6ImRlbW8iLCJhcHBpZCI6IkpDVGVzdCIsInNpZ25lZGRhdGEiOiI4MDhjOTA0N2IwMDc2ZjRiYjA4M2MxMjRjMTIxMTVjZGZiZmJmNjJiIiwidGltZXN0YW1wIjoiMTY2MzgwODUzNSIsImxjaWQiOiIyMDUyIiwib3JpZ2ludHlwZSI6IlNpbVBhcyIsImVudHJ5cm9sZSI6IiIsImZvcm1pZCI6IldGX0Fzc2lnbm1lbnRBcHByb3ZhbEg1IiwiZm9ybXR5cGUiOiIiLCJwa2lkIjoiIiwib3RoZXJhcmdzIjoiNjA3Njg1YzkwYjkxODciLCJvcGVubW9kZSI6bnVsbH0=');void(0);"> 处理 </a></li>

</ul>

</body>

</html>


<3>点击超链接【处理】,即可免登陆跳转到当前待办任务的审批界面,如下图。

---------------------------------------------------------------------------------------------------------

【参考资料】

【二开案例.WebApi.单据查询.待办任务列表查询】https://vip.kingdee.com/article/353193228084599808

【第三方系统单点登录到金蝶云指南】https://vip.kingdee.com/article/9788

【第三方系统集成星空工作流】https://vip.kingdee.com/article/183922

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.WebApi.单据查询.查询待办任务并生成审批链接

【应用场景】WebApi,查询待办任务列表,生成审批链接。【案例演示】查询用户demo的所有待办任务,并生成待办列表和审批链接,供第三方系统...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息