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

posted @ 2019-05-31 10:04  Mo  阅读(782)  评论(0编辑  收藏  举报