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

相關文章
相關標籤/搜索