C#调用SAP S4/HANA Gateway Service
公司使用SAP,并且实施公司做了一些提供报表数据的接口供调用,首先说明一下我对SAP不熟悉
但SAP用到的接口信息提供大家参考一下,这些Gateway Service使用的是DCP方式写的,SAP提供数据的协议叫:OData
相关资料大家自行百度、Google、bing
进入T-Code:SEGW
点击Open Project按钮打开对应的接口
双击DPC_EXT之后就进入类构建器,类似于WebService的东西吧
这里要注意的是有HeaderSet、ItemSet的区别,但我不知道有什么区别.....
前边说到用OData,这里必须要重定义一下HEASERSET_GET_ENTITYSET
主要是为了让方法可以获取得到OData的Token
然后有一个方法前面有绿色的,双击这个方法就可以进入代码编写界面
至此,SAP相关的我知道的也就到这里了,SAP的开发语言叫:ABAP
这个我也不熟悉就不误人子弟了
现在直接上代码,看看C#怎么调用SAP提供的接口
private Model.APIReturn ZOBIAPI(string PlantCode, DateTime DocDate) { Model.APIReturn ret = new Model.APIReturn(); string sDocDate = GetTimestamp(DocDate.ToUniversalTime()).ToString(); string userid = ""; string password = ""; string url = ""; //url = "http://10.29.10.110:8000/sap/opu/odata/sap/ZODATA_ZOBI012_SRV/HeaderSet?sap-client=100";//测试环境 url = "http://10.29.10.126:8000/sap/opu/odata/sap/ZODATA_ZOBI012_SRV/HeaderSet?sap-client=800";//正式环境 string token = ""; string json = ""; string authorization = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(userid + ":" + password)); #region 通过 Headers-authorization 方式验证 Basic System.Net.HttpWebRequest request1 = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest; request1.Method = "GET"; request1.Headers.Add("authorization", authorization); request1.Headers.Add("x-csrf-token", "fetch"); request1.CookieContainer = new System.Net.CookieContainer(); //没有Container就不能保存这次请求的Cookie,没有第一次的Cookie,第二次调用的时候会提示403 using (System.Net.HttpWebResponse response1 = request1.GetResponse() as System.Net.HttpWebResponse) { token = response1.GetResponseHeader("x-csrf-token"); #region 调用API System.Net.HttpWebRequest requestAPI = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest; requestAPI.Method = "POST"; requestAPI.Headers.Add("x-csrf-token", token); //x-csrf-token方式需要先从服务器用GET方式取得token requestAPI.ContentType = "application/json"; //用来指定提交给API的内容格式 requestAPI.Accept = "application/json"; //用来指定API返回的内容格式 requestAPI.CookieContainer = new System.Net.CookieContainer(); //new一个Container是为了将第一次的Cookie再次使用 requestAPI.CookieContainer.Add(response1.Cookies); //将第一次的Cookie作为第二次再使用不然服务器会提示403 json = @"{""ItemsSet"":[{""DocDate"":""\/Date(" + sDocDate + @")\/"",""DocDateAbc"":""\/Date(" + sDocDate + @")\/"",""PlantCode"":""" + PlantCode + @"""}]}"; using (System.IO.StreamWriter sw = new System.IO.StreamWriter(requestAPI.GetRequestStream())) { sw.Write(json); } using (System.Net.HttpWebResponse hwRespAPI = requestAPI.GetResponse() as System.Net.HttpWebResponse) { System.IO.StreamReader sr = new System.IO.StreamReader(hwRespAPI.GetResponseStream()); string resultJson = sr.ReadToEnd(); ret = Newtonsoft.Json.JsonConvert.DeserializeObject<Model.APIReturn>(resultJson); } #endregion } #endregion return ret; }
以上就是完整调用SAP接口的代码
记录一下方便以后自己查看
另外有一个T-Code可以使用服务的:/N/IWFND/MAINT_SERVICE