K3 CLOUD API接口说明书V2.0

本文档详细介绍了K3 Cloud WebAPI V2.0的架构、接口功能及调用方法,包括登陆验证、表单数据查看、保存、提交、审核、反审核和删除等操作。采用的技术包括Kingdee.BOS.WebApi.FormService.dll、ServicesStub.dll和Client.dll,适用于.NET Framework 4.0平台,支持C#客户端调用。文档还提供了C# SDK辅助类和无组件引用的示例代码,便于开发人员进行系统集成。
摘要由CSDN通过智能技术生成

K3Cloud WebAPI 接口说明书_V2.0

修改记录

Ver. No

发版日期

编制人

批准人

修改的章节号

V1.0

2016/8/9

     

   

初始版本

V2.0

2017/1/19

附录6


   

1. 概述 

1.1. 目的 

1.2. 范围 

1.3. 适用对象 

1.4. 参考资料 

2. 问题与解决策略 

3. 目标和约束 

4. WebAPI架构 

4.1. 采用的技术 

4.1.1. Kingdee.BOS.WebApi.FormService.dll 

4.1.2. Kingdee.BOS.WebApi.ServicesStub.dll 

4.1.3. Kingdee.BOS.WebApi.Client.dll 

4.1.4. 开发工具 

5. WebAPI接口详细描述 

5.1.1. 登陆验证接口 

5.1.2. 查看表单数据接口 

5.1.3. 保存表单数据接口 

5.1.4. 批量保存表单数据接口 

5.1.5. 提交表单数据接口 

5.1.6. 审核表单数据接口 

5.1.7. 反审核表单数据接口 

5.1.8. 删除表单数据接口 

5.1.9. 表单数据查询接口 

5.1.10. 自定义WebAPI接口 

6. 附录(集成相关知识分享) 

  1. 概述
    1. 目的

为异构系统访问K/3Cloud系统数据提供通用的接口。

当企业规模逐渐增大时,作为支撑业务运营的IT建设也变得越来越重要,不过往往企业的IT建设过程中会发现某一家软件供应商基本不能完全覆盖企业所有的业务运营流程,这样的结果就是,企业上的IT系统很多很全,从ERP到HR、CRM、PDM、OA等,貌似所有的业务都覆盖到了,但实际上因为这些系统的不集成,而形成了企业很多新的信息孤岛,非常不利于企业的后续的管理和战略发展。K/3Cloud从现今和往后的发展趋势来看,也不可避免会遇到上述问题,毕竟企业经营的多样化,并不是所有的业务都能在K/3Cloud中完成,所以我们必须在产品架构上支持更好的与外部系统进行协同。

    1. 范围

    • 适用版本:V5.0和后续版本
    1. 适用对象

本文档适用于:

  • 开发工程师:参考,对系统集成的实现获取全局性的设计指导

    1. 参考资料

  1. 问题与解决策略

愿景

关注点

描述与示例

  1. 目标和约束

目标:

  • 提供对K/3Cloud单据和基础信息查看、保存、提交、审核、反审核和删除功能;
  • 提供对K/3Cloud单据和基础信息的查询功能

约束:

  • 数据操作接口仅支持以基础资料编码、单据编号或直接以表单主键去操作数据
  • 支持对某一具体单据的数据查询,但多单关联查询需要二开接口实现。
  1. WebAPI架构

    1. 采用的技术

K/3 Cloud WebAPI是一种轻量级的、可维护的、可伸缩的 Web 服务。采用HTTP+JSON,也就是用RESTful的方式来开发。使用.NET Framework 4.0为开发平台,源代码使用C#编写。整个框架由三个组装件组成。

      1. Kingdee.BOS.WebApi.FormService.dll

此组装件包含WebAPI主要接口的功能实现。部署在应用层服务器。

      1. Kingdee.BOS.WebApi.ServicesStub.dll

此组装件主要包含WebAPI接口定义,扩展接口定义以及登陆验证接口。部署在应用层服务器。

      1. Kingdee.BOS.WebApi.Client.dll

此组装件为WebAPI的客户端组件,封装了一些在异构系统客户端访问WebAPI的方法,适用于C#程序调用。由于它应用于异构系统客户端,所以此组装件需要拷贝到异构系统客户端环境中。非C#程序调用可以不用拷贝。

      1. 开发工具

.Net FrameWork 4.0

Microsoft Visual Studio 2012

  1. WebAPI接口详细描述
      1. 登陆验证接口

服务地址:

http://ServerIp/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc

接口参数:

参数列表

参数含义

 备注  

acctID

账套Id,从管理中心数据库查询获得
参考查询:select FDATACENTERID from T_BAS_DATACENTER

必须

username

用户登陆名

必须

password

密码

必须

lcid

语言id,选择哪种语言访问,参考:中文2052,英文1033,繁体3076

非必须,引用SDK组件辅助类调用则必须

返回参数:

参数列表

参数含义

 备注  

LoginResultType

        //激活
        Activation = -7,
        //云通行证未绑定Cloud账号
        EntryCloudUnBind = -6,        
        //需要表单处理
        DealWithForm = -5,
        //登录警告
        Wanning = -4,
        //密码验证不通过(强制的)
        PWInvalid_Required = -3,
        //密码验证不通过(可选的)
        PWInvalid_Optional = -2,
        //登录失败
        Failure = -1,
        //用户或密码错误
        PWError = 0,
        //登录成功
        Success = 1

管理员登陆可能出现返回-5的情况,这种情况在api验证时也可认为是允许的,具体可以根据实际情况来定。

var result = JObject.Parse(ret)["LoginResultType"].Value<int>();
            if (result == 1||result==-5)
            {
                return true;
            }

调用参考:

  1. SDK辅助类示例(引用Kingdee.BOS.WebAPI.Client.dll):

说明:下文中出现的client都为此处进行过登陆验证的ApiClient实例。

            ApiClient client = new ApiClient("http://192.168.66.60/k3cloud/");

            string dbId = "5756960b27b1aa"; //AotuTest117

            bool bLogin = client.Login(dbId, "demo", "888888", 2052);

            if (bLogin)

            {

                //todo:登陆成功处理业务

            }

  1. 无引用组件示例(不引用金蝶的组件):

说明:以下HttpClient为自定义客户端调用辅助类,下文中所指HttpClient都表示这个类。

using System;

using System.Collections.Generic;

using System.IO;

using System.Net;

using System.Text;

using Newtonsoft.Json.Linq;

using Newtonsoft.Json;

public class HttpClient

    {

        /// <summary>

        /// Seivice URL

        /// </summary>

        public string Url { get; set; }

        /// <summary>

        /// 内容

        /// </summary>

        public string Content { get; set; }

        /// <summary>

        /// Cookie,保证登录后,所有访问持有一个Cookie;

        /// </summary>

        static CookieContainer Cookie = new CookieContainer();

        /// <summary>

        /// HTTP访问

        /// </summary>

        public string AsyncRequest()

        {

            HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;

            httpRequest.Method = "POST";

            httpRequest.ContentType = "application/json";

            httpRequest.CookieContainer = Cookie;

            httpRequest.Timeout = 1000 * 60 * 10;//10min

            using (Stream reqStream = httpRequest.GetRequestStream())

            {

                JObject jObj = new JObject();

                jObj.Add("format", 1);

                jObj.Add("useragent", "ApiClient");

                jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());

                jObj.Add("parameters", Content);

                jObj.Add("timestamp", DateTime.Now);

                jObj.Add("v", "1.0");

                string sContent = jObj.ToString();

                var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);

                reqStream.Write(bytes, 0, bytes.Length);

                reqStream.Flush();

            }

            using (var repStream = httpRequest.GetResponse().GetResponseStream())

            {

                using (var reader = new StreamReader(repStream))

                {

                    return ValidateResult(reader.ReadToEnd());

                }

            }

        }

        private static string ValidateResult(string responseText)

        {

            if (responseText.StartsWith("response_error:"))

            {

                return responseText.TrimStart("response_error:".ToCharArray());

            }

            return responseText;

        }

    }

登陆验证参考:

HttpClient httpClient = new HttpClient();

httpClient.Url = "http://192.168.66.60/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";

List<object> Parameters = new List<object>();

Parameters.Add("558cbb01bfc79b");//帐套Id

Parameters.Add("Administrator");//用户名

Parameters.Add("888888");//密码

Parameters.Add(2052);

httpClient.Content = JsonConvert.SerializeObject(Parameters);

var iResult = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value<int>();

if (iResult == 1){

//todo:验证成功,处理业务

}

      1. 查看表单数据接口

服务地址:

http://ServerIp/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc

接口参数:

参数列表

参数含义

 备注  

formid

表单Id,格式参考:"IV_SALESIC"//表示发票

必须

data

数据包,Number表示单据编号或者基础资料编码,Id为主键,CreateOrgId为创建组织Id。格式参考:"{\"CreateOrgId\":0,\"Id\":0,\"Number\":\"SVINV00000003\"}"

CreateOrgId:非必须
Id和Number:任选一个

返回参数:

参数列表

参数含义

 备注  

ResponseStatus

操作状态

操作是否成功,如果失败,具体失败原因

Result

单据数据包

单据完整数据内容

调用参考:

  1. SDK辅助类示例(引用Kingdee.BOS.WebAPI.Client.dll):

string sJson = "{\"Number\":\"SVINV00000003\"}";  

var result = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View",

new object[] { "IV_SALESIC", sJson });

  1. 无引用组件示例(不引用金蝶的组件):

 HttpClient httpClient = new HttpClient();

 httpClient.Url = "http://192.168.66.60/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc";

 List<object> Parameters = new List<object>();

 //业务对象Id

 String formid = "IV_SALESIC";//发票

 Parameters.Add(formid);

  //Json字串

  string data = "{\"Number\":\"SVINV00000003\"}";

  Parameters.Add(data);

  httpClient.Content = JsonConvert.SerializeObject(Parameters);

  var result = httpClient.AsyncRequest();

      1. 保存表单数据接口

服务地址:

http://ServerIp/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc

接口参数:

参数列表

参数含义

 备注  

formid

表单Id,格式参考:"BD_Currency"//表示币别

必须

data

数据包,数据格式参考以币别为例:"{\"Creator\":\"\",
\"NeedUpDateFields\":[\"\"],
\"Model\":{\"FNumber\":
\"PRENB001\",
\"FName\":\"牛币\",\"FCODE\":\"CNYY\",
\"FPRICEDIGITS\":6,
\"FAMOUNTDIGITS\":2,
\"FPRIORITY\":0,
\"FIsShowCSymbol\":true}}"

Creator:非必须
NeedUpDateFields:非必须,如果是更新单据而不是新增一个单据,可以设置这个数据集合,内容为字段标识,使用逗号分隔,如果需要更新表体数据,则需要填写表体的标识。一般情况下,如果Model中只填写了需要更新的字段信息,没有其他冗余的字段,那么这个参数不需要设置,否则其他冗余字段会覆盖ERP中的源单数据。
Model:必须,Model数据格式说明:所有字段和实体都是用元素的标识来识别。单据头字段直接填写字段标识和数据,子单据头字段需要先申明是子单据头信息,然后再填写其字段信息,例如\"SubHeadEntity\":{\"FBARCODE\":\"20305\"}如果是单据体字段则需要申明为集合,例如:\"EntryDetail\":[{第1条明细},{第N条明细}],需要用中括号括起来。
另外要注意的是更新单据时,表体信息必须填写明细表体的主键,如果不填写,将会删除源单的表体,而没有主键的数据会视为新增,有明细主键的视为更新。

返回参数:

参数列表

参数含义

 备注  

ResponseStatus

操作状态
{"ResponseStatus":{"ErrorCode":"",

"IsSuccess":false,

"Errors":[{"FieldName":"",

"Message":"","DIndex":0}],

"SuccessEntitys":[{"Id":"","Number":"","DIndex":0}],

"SuccessMessages":[{"FieldName":"","Message":"","DIndex":0}]}

IsSuccess:操作是否成功,
Errors:如果失败,具体失败原因
DIndex:原始数据行号

调用参考:

1)SDK辅助类示例(引用Kingdee.BOS.WebAPI.Client.dll):

//业务对象Id

string sFormId = "SAL_OUTSTOCK";  //销售出库单  

//Model字串

string sContent = "{\"Creator\":\"\",\"NeedUpDateFields\":[],\"Model\":" +            "{\"FID\":\"0\",\"FStockOrgId\":{\"FNumber\":\"210\"},\"FBillTypeID\":{\"FNumber\":\"XSCKD01_SYS\"},\"FBillNo\":\"CSDGBC21002\",\"FCustomerID\":{\"FNumber\":\"CUST0073\"},\"SubHeadEntity\":{\"FExchangeRate\":6.51},\"FEntity\":[{\"FEntryID\":\"0\",\"FMATERIALID\":{\"FNumber\":\"03.001\"},\"FStockID\":{\"FNumber\":\"CK002\"},\"FRealQty\":324,\"FBaseUnitQty\":324},{\"FEntryID\":\"0\",\"FMATERIALID\":{\"FNumber\":\"03.001\"},\"FStockID\":{\"FNumber\":\"CK004\"},\"FRealQty\":220,\"FBaseUnitQty\":220}]]}}";

object[] saveInfo = new object[]

{

   sFormId,

   sContent

};

//调用保存接口

var ret = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", saveInfo);

以下示例说明如何更新单据的表体信息:

更新内码为100017的单据,新增两行表体数据,原有100024和100025行数据保留,如果源单中还有其他分录则删除。

 string sFormId = "STK_MISCELLANEOUS";//其他入库单

 string sContent = "{\"Creator\":\"\",\"NeedUpDateFields\":[],\"Model\":{\"FID\":\"100017\",\"FEntity\":[{\"FEntryID\":\"100024\"},{\"FEntryID\":\"100025\"}," +                  "{\"FMATERIALID\":{\"FNumber\":\"A.0060480933\"},\"FUnitID\":{\"FNumber\":\"03\"},\"FSTOCKID\":{\"FNumber\":\"PRTSH\"},\"FQty\":\"200\",\"FBASEQTY\":\"200\",\"FPlanAmount\":\"132856\",\"FBASEUNITID\":{\"FNumber\":\"03\"},\"FEntryNOTE\":\"2015-7-29\",\"FAmount\":\"132856\",\"FPRICE\":\"664.28\",\"FEntrySelfA9725\":\"2015072802\",\"FEntrySelfA9733\":\"19881\",\"FEntrySelfA9734\":\"2015-6-3\",\"FEntrySelfA9737\":\"200\",\"FEntrySelfA9740\":\"0\",\"FEntrySelfA9738\":\"1\",\"FEntrySelfA9739\":\"2\",\"FEntrySelfA9735\":\"664.28\"}," +

"{\"FMATERIALID\":{\"FNumber\":\"A.0060480933"},\"FUnitID\":{\"FNumber\":\"03\"},\"FSTOCKID\":{\"FNumber\":\"PRTSH\"},\"FQty\":\"200\",\"FBASEQTY\":\"200\",\"FPlanAmount\":\"132856\",\"FBASEUNITID\":{\"FNumber\":\"03\"},\"FEntryNOTE\":\"2015-7-29\",\"FAmount\":\"132856\",\"FPRICE\":\"664.28\",\"FEntrySelfA9725\":\"2015072802\",\"FEntrySelfA9733\":\"19881\",\"FEntrySelfA9734\":\"2015-6-3\",\"FEntrySelfA9737\":\"200\",\"FEntrySelfA9740\":\"0\",\"FEntrySelfA9738\":\"1\",\"FEntrySelfA9739\":\"2\",\"FEntrySelfA9735\":\"664.28\"}]}}";

object[] saveInfo = new object[]

{

    sFormId,

    sContent

};

//调用保存接口

var ret=

client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", saveInfo);

2)无引用组件示例(不引用金蝶的组件):

HttpClient httpClient = new HttpClient();

 httpClient.Url = "http://192.168.66.60/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc";

 List<object> Parameters = new List<object>();

 //业务对象Id

 String formid = "SAL_OUTSTOCK";//销售出库为例

 Parameters.Add(formid);

  //Json字串

  string data = "{\"Creator\":\"\",\"NeedUpDateFields\":[],\"Model\":" +            "{\"FID\":\"0\",\"FStockOrgId\":{\"FNumber\":\"210\"},\"FBillTypeID\":{\"FNumber\":\"XSCKD01_SYS\"},\"FBillNo\":\"CSDGBC21002\",\"FCustomerID\":{\"FNumber\":\"CUST0073\"},\"SubHeadEntity\":{\"FExchangeRate\":6.51},\"FEntity\":[{\"FEntryID\":\"0\",\"FMATERIALID\":{\"FNumber\":\"03.001\"},\"FStockID\":{\"FNumber\":\"CK002\"},\"FRealQty\":324,\"FBaseUnitQty\":324},{\"FEntryID\":\"0\",\"FMATERIALID\":{\"FNumber\":\"03.001\"},\"FStockID\":{\"FNumber\":\"CK004\"},\"FRealQty\":220,\"FBaseUnitQty\":220}]]}}";

  Parameters.Add(data);

  httpClient.Content = JsonConvert.SerializeObject(Parameters);

  var result = httpClient.AsyncRequest();

      1. 批量保存表单数据接口

服务地址:

http://ServerIp/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc

接口参数:

参数列表

参数含义

 备注  

formid

表单Id,格式参考:"SAL_SaleOrder"//表示销售订单

必须

data

数据包,格式参考以销售订单为例:

"{\"NeedUpDateFields\":[],\"BatchCount\":\"2\",

\"Model\":[{\"FID\":\"0\",\"FBILLTYP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值