本文介绍了企业信息化中IT系统间数据集成的重要性,特别针对重庆某客户的MES系统与金蝶云星空ERP系统的数据交互需求。金蝶云星空提供了WebApi接口用于数据访问,包括单据查看、保存等功能,并详细说明了两种对接MES与ERP的方法:使用SDK辅助类和无引用组件的方式,并通过示例展示了HttpClient类的实现,最后列举了MES系统与ERP系统交互的具体接口如登录、BOM数据读取、生产订单数据读取及单据保存等。
一、业务背景
当企业规模逐渐增大时,随着企业信息化的推进,企业上的IT系统越来越多,从ERP到MES、CRM、PDM、SRM等,为了解决信息孤岛,这些异构系统之间需要进行数据集成。
近期,重庆某客户的MES系统与金蝶云星空(ERP)系统之间需要进行数据交互,来打通MES系统与ERP系统的连接。
二、金蝶云星空webapi接口介绍
金蝶云星空提供了通用的WebApi接口,方便异构系统访问ERP系统数据。
金蝶云星空WebAPI是一种轻量级的、可维护的、可伸缩的 Web 服务。采用HTTP+JSON,即RESTful的方式来开发。使用.NET Framework 4.0为开发平台,源代码使用C#编写
目标与约束
目标:
提供对ERP单据和基础信息的查看、保存、提交、审核、反审核和删除等功能;
提供对ERP单据和基础信息的查询功能;
约束:
数据操作接口仅支持以基础资料编码、单据编号或直接以表单主键去操作数据;
支持对某一具体单据的数据查询,但多单关联查询需要二开接口实现。
三、MES与金蝶云星空(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 { /// <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; } }
1. 登录接口
2. 读取BOM数据接口
01 MES系统访问金蝶云星空(WebApi集成方式):读取BOM数据接口
3. 读取生产订单数据接口
02 MES系统访问金蝶云星空(WebApi集成方式):读取生产订单数据接口
4. 生产补料单单据保存接口
03 MES系统访问金蝶云星空(WebApi集成方式):生产补料单单据保存接口
5. 生产退料单单据保存接口
04 MES系统访问金蝶云星空(WebApi集成方式):生产退料单单据保存接口
6. 生产入库单单据保存接口
05 MES系统访问金蝶云星空(WebApi集成方式):生产入库单单据保存接口
7. 推送生产任务:调用MES系统提供的WCF接口
[06 金蝶云星空推送生产任务:调用MES系统提供的WCF接口]