zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/ZC_Mo-Blog/p/10953674.html
Copyright © 2011-2022 走看看