/** * K3Cloud WebAPI C# 客户端骨架 * 语言:C# (.NET Framework 4.x / .NET Core) * 覆盖:登录/查询/查看/保存/删除/提交/审核/反审核/下推/自定义操作 * 依赖:Newtonsoft.Json * * 使用说明: * 1. 替换 ServerUrl / AcctId / AppId / AppSecret 为实际值 * 2. 首次调用 LoginByAppSecret() 建立会话,后续请求自动携带 Cookie */ using System; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace MyCompany.Integration { public class K3CloudClient { private readonly string _serverUrl; private readonly HttpClient _httpClient; private readonly CookieContainer _cookieContainer; public K3CloudClient(string serverUrl) { _serverUrl = serverUrl; _cookieContainer = new CookieContainer(); var handler = new HttpClientHandler { CookieContainer = _cookieContainer }; _httpClient = new HttpClient(handler); } private async Task PostAsync(string serviceName, params object[] args) { var url = $"{_serverUrl}{serviceName}.common.kdsvc"; var content = new StringContent( JsonConvert.SerializeObject(args), Encoding.UTF8, "application/json" ); var resp = await _httpClient.PostAsync(url, content); var text = await resp.Content.ReadAsStringAsync(); return JToken.Parse(text); } /// 应用授权登录(推荐) public async Task LoginByAppSecret(string acctId, string appId, string appSecret, int lcid = 2052) { return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret", acctId, appId, appSecret, lcid ); } /// 用户密码登录 public async Task LoginByUser(string dbId, string userName, string password, int lcid = 2052) { return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser", dbId, userName, password, lcid ); } /// 单据查询(返回二维数组) public async Task ExecuteBillQuery(string formId, string fieldKeys, string filterString = "", int startRow = 0, int limit = 0) { var data = new { FormId = formId, FieldKeys = fieldKeys, FilterString = filterString, StartRow = startRow, Limit = limit }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.BusinessDataService.ExecuteBillQuery", data ); } /// 查看单据详情 public async Task View(string formId, long keyValue) { var data = new { CreateOrgId = 0, Number = "", Id = keyValue }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View", formId, JsonConvert.SerializeObject(data) ); } /// 保存单据 public async Task Save(string formId, object model) { var data = new { Model = model, IsDeleteEntry = "true", ValidateFlag = "true", NumberSearch = "true" }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", formId, JsonConvert.SerializeObject(data) ); } /// 删除单据 public async Task Delete(string formId, params long[] keyValues) { var data = new { CreateOrgId = 0, Numbers = "", Ids = string.Join(",", keyValues) }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete", formId, JsonConvert.SerializeObject(data) ); } /// 提交单据 public async Task Submit(string formId, params long[] keyValues) { var data = new { CreateOrgId = 0, Numbers = "", Ids = string.Join(",", keyValues) }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit", formId, JsonConvert.SerializeObject(data) ); } /// 审核单据 public async Task Audit(string formId, params long[] keyValues) { var data = new { CreateOrgId = 0, Numbers = "", Ids = string.Join(",", keyValues) }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit", formId, JsonConvert.SerializeObject(data) ); } /// 反审核单据 public async Task UnAudit(string formId, params long[] keyValues) { var data = new { CreateOrgId = 0, Numbers = "", Ids = string.Join(",", keyValues) }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.UnAudit", formId, JsonConvert.SerializeObject(data) ); } /// 下推单据 public async Task Push(string targetFormId, string keyValues, string ruleId = "") { var data = new { Ids = keyValues, RuleId = ruleId, TargetFormId = targetFormId, IsEnableDefaultRule = "true", CustomParams = new { } }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Push", JsonConvert.SerializeObject(data) ); } /// 执行自定义操作 public async Task ExecuteOperation(string formId, string opNumber, params long[] keyValues) { var data = new { CreateOrgId = 0, Numbers = "", Ids = string.Join(",", keyValues) }; return await PostAsync( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExcuteOperation", formId, opNumber, JsonConvert.SerializeObject(data) ); } } }