• 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

  • 相关阅读:
    iaure学习网站
    linux下环境搭建比较
    微信分享jsdk接口
    微信接口开发遇到的问题
    Centos7.6部署k8s(v1.14.2)集群
    k8s简介
    nginx配置ssl证书
    kafka zookeeper介绍
    mysql数据库的备份与还原
    centos7 部署jumpserver
  • 原文地址:https://www.cnblogs.com/ZC_Mo-Blog/p/10953674.html
Copyright © 2020-2023  润新知