一、业务背景
当企业规模逐渐增大时,随着企业信息化的推进,企业上的IT系统越来越多,从ERP到MES、CRM、PDM、SRM等,为了解决信息孤岛,这些异构系统之间需要进行数据集成。
近期,重庆某客户的SRM系统与金蝶云星空(ERP)系统之间需要进行数据交互,来打通SRM系统与ERP系统的连接。
二、金蝶云星空webapi接口介绍
金蝶云星空提供了通用的WebApi接口,方便异构系统访问ERP系统数据。
金蝶云星空WebAPI是一种轻量级的、可维护的、可伸缩的 Web 服务。采用HTTP+JSON,即RESTful的方式来开发。使用.NET Framework 4.0为开发平台,源代码使用C#编写
目标与约束
目标:
- 提供对ERP单据和基础信息的查看、保存、提交、审核、反审核和删除等功能;
- 提供对ERP单据和基础信息的查询功能;
约束:
- 数据操作接口仅支持以基础资料编码、单据编号或直接以表单主键去操作数据;
- 支持对某一具体单据的数据查询,但多单关联查询需要二开接口实现。
三、SRM与金蝶云星空(ERP)的对接需求
以下示例提供两种方式:
1)SDK辅助类示例(引用Kingdee.BOS.WebAPI.Client.dll)
下载链接: https://pan.baidu.com/s/1RthbrrtUgeqWGi-eLM-yjg
提取码: eqin
2) 无引用组件示例(不引用金蝶的组件):
http://ServerIp/K3Cloud/接口命名空间.接口实现类名.方法,组件名.common.kdsvc
说明:以下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
{
///
/// Seivice URL
///
public string Url { get; set; }
///
/// 内容
///
public string Content { get; set; }
///
/// Cookie,保证登录后,所有访问持有一个Cookie;
///
static CookieContainer Cookie = new CookieContainer();
///
/// HTTP访问
///
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;
}
}
1. 登录接口
金蝶云星空(WebApi集成方式):免密码登录接口
2. 读取供应商数据接口
01 SRM系统访问金蝶云星空(WebApi集成方式):读取供应商数据接口
3. 读取采购订单数据接口
02 SRM系统访问金蝶云星空(WebApi集成方式):读取采购订单数据接口
4. 读取委外订单数据接口
03 SRM系统访问金蝶云星空(WebApi集成方式):读取委外订单数据接口
6. 读取BOM数据接口
访问金蝶云星空(WebApi集成方式):读取BOM数据接口
访问金蝶云星空(WebApi集成方式):读取BOM展开结果数据接口
7. 读取物料的数据接口
07 SRM系统访问金蝶云星空(WebApi集成方式):读取物料数据接口
8. 采购订单保存接口
08 SRM系统访问金蝶云星空(webapi):采购入库单保存接口
9. SRM系统访问金蝶云星空(webapi):供方订单承诺期回写采购订单接口
09 SRM系统访问金蝶云星空(webapi):供方订单承诺期回写订单接口
10. SRM系统访问金蝶云星空(webapi):读取工序委外单
10. SRM系统访问金蝶云星空(webapi):读取工序委外单
11.SRM系统访问金蝶云星空(webapi):写入工序委外入库单
11.SRM系统访问金蝶云星空(webapi):写入工序委外入库单
12. SRM系统访问金蝶云星空(webapi):供方承诺期回写工序委外单
12. SRM系统访问金蝶云星空(webapi):供方承诺期回写工序委外单