admin 管理员组

文章数量: 887007

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 = ":8000/sap/opu/odata/sap/ZODATA_ZOBI012_SRV/HeaderSet?sap-client=100";//测试环境url = ":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 方式验证 BasicSystem.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,第二次调用的时候会提示403using (System.Net.HttpWebResponse response1 = request1.GetResponse() as System.Net.HttpWebResponse){token = response1.GetResponseHeader("x-csrf-token");#region 调用APISystem.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方式取得tokenrequestAPI.ContentType = "application/json"; //用来指定提交给API的内容格式requestAPI.Accept = "application/json"; //用来指定API返回的内容格式requestAPI.CookieContainer = new System.Net.CookieContainer(); //new一个Container是为了将第一次的Cookie再次使用requestAPI.CookieContainer.Add(response1.Cookies); //将第一次的Cookie作为第二次再使用不然服务器会提示403json = @"{""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}#endregionreturn ret;}

以上就是完整调用SAP接口的代码

记录一下方便以后自己查看

另外有一个T-Code可以使用服务的:/N/IWFND/MAINT_SERVICE

转载于:.html

本文标签: C调用SAP S4HANA Gateway Service