C#调用SAP S4/HANA Gateway Service

公司使用SAP,而且实施公司作了一些提供报表数据的接口供调用,首先说明一下我对SAP不熟悉json

但SAP用到的接口信息提供你们参考一下,这些Gateway Service使用的是DCP方式写的,SAP提供数据的协议叫:OData服务器

相关资料你们自行百度、Google、bingapp

进入T-Code:SEGW测试

点击Open Project按钮打开对应的接口fetch

 

双击DPC_EXT以后就进入类构建器,相似于WebService的东西吧url

这里要注意的是有HeaderSet、ItemSet的区别,但我不知道有什么区别.....spa

前边说到用OData,这里必需要重定义一下HEASERSET_GET_ENTITYSETcode

主要是为了让方法能够获取获得OData的Tokencsrf

而后有一个方法前面有绿色的,双击这个方法就能够进入代码编写界面blog

至此,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

相关文章
相关标签/搜索