公司使用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