天天看點

C#連接配接SAP并下載下傳工單資料【生産系統與ERP對接】

企業如果上了ERP系統,比如SAP、用友、金蝶或者E10等等,隻需要ERP裡面提供相應的接口,則可以直接将PMC建立的工單資訊抛轉至 MTS 系統,當該工單生産完成之後,MTS 将完成資料回傳至 ERP,友善貨倉進行入倉與扣數,這篇文章介紹 MTS 與 SAP 之間如何對接。

1.SAP裡面必須有一個Function,類似 MSSQL裡面的存儲過程一樣,根據使用者傳入的參數,傳回所需要的資料,這一部分程式通過 ABAP 完成,不在本文的講述範圍之類,這裡略過。

2.MTS連接配接到 SAP,Call對應的 Function,拿到資料後進行處理,這裡需要準備以下幾個參數。

  • SAP伺服器的IP位址
  • 通路SAP的使用者名
  • 通路SAP的密碼
  • SAP系統的執行個體編号
  • SAP系統的用戶端編号

為了友善多個地方調用,這裡将Call SAP 的代碼寫成一個方法,避免重複代碼,代碼如下:

using SAP.Middleware.Connector;

public class SapHelper
    {
        public IRfcTable GetSapData(string FunctionName, string TableName, List<string> Key, List<string> Value)
        {
            string Server = ConfigurationManager.AppSettings["SapServer"];
            string Client = ConfigurationManager.AppSettings["SapClient"];
            string User = ConfigurationManager.AppSettings["SapUser"];
            string Password = ConfigurationManager.AppSettings["SapPwd"];
            string SystemNumber = ConfigurationManager.AppSettings["SapSystemNumber"];

            RfcConfigParameters rfcPar = new RfcConfigParameters();
            rfcPar.Add(RfcConfigParameters.Name, "CON");
            rfcPar.Add(RfcConfigParameters.AppServerHost, Server);
            rfcPar.Add(RfcConfigParameters.Client, Client);
            rfcPar.Add(RfcConfigParameters.User, User);
            rfcPar.Add(RfcConfigParameters.Password, Password);
            rfcPar.Add(RfcConfigParameters.SystemNumber, SystemNumber);
            rfcPar.Add(RfcConfigParameters.Language, "EN");
            RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
            RfcRepository rfcrep = dest.Repository;

            IRfcFunction myfun = null;
            myfun = rfcrep.CreateFunction(FunctionName);
            IRfcTable IrfTable = myfun.GetTable(TableName);

            if (Key.Count != Value.Count)
            {
                return null;
            }
            for (int i = 0; i < Key.Count; i++)
            {
                myfun.SetValue(Key[i].ToString(), Value[i].ToString());
            }

            myfun.Invoke(dest);
            return IrfTable;
        }
    }      

當使用者輸入需要下載下傳的工單号碼之後,系統連接配接到 SAP 開始調用函數:

string Order = Request["LotName"];
                if (string.IsNullOrEmpty(Order))
                {
                    return;
                }
      
          //這裡強烈建議将參數以key value的形式傳進去,友善很多。

                List<string> Key1 = new List<string>();
                List<string> Value1 = new List<string>();
             
                Key1.Insert(0, "ORDER_NUMBER");
                Value1.Insert(0, Order);            

                IRfcTable IrfTable_Order = new SapHelper().GetSapData("function", "table", Key1, Value1);
             
                DataTable dt_Order = new DataTable();
                dt_Order.Columns.Add("LotName");
                dt_Order.Columns.Add("ProductName");
                dt_Order.Columns.Add("LotQuantity");
                dt_Order.Columns.Add("Customer");
                dt_Order.Columns.Add("Plant");

                for (int i = 0; i < IrfTable_Order.Count; i++)
                {
                    IrfTable_Order.CurrentIndex = i;
                    DataRow dr = dt_Order.NewRow();
                    dr["LotName"] = IrfTable_Order.GetString("AUFNR");                    
                    dr["ProductName"] = IrfTable_Order.GetString("STLBEZ");                    
                    dr["LotQuantity"] = Math.Round(Convert.ToDouble(IrfTable_Order.GetString("GAMNG")), 0).ToString();
                    dr["Customer"] = IrfTable_Order.GetString("PSPEL");
                    dr["Plant"] = IrfTable_Order.GetString("WERKS");
                    dt_Order.Rows.Add(dr);
                }  
                var json = Newtonsoft.Json.JsonConvert.SerializeObject(dt_Order);
                var totalRecordCount = dt_Order.Rows.Count.ToString();
                json = "{\"total\":" + totalRecordCount + ",\"rows\":" + json + "}";
                Response.Write(json);
                Response.End();      

注意,從SAP裡面得到的資料是一張 rfc table,并不是我們常用的 DataTable,是以這裡需要進行轉換後才能使用,最後将資料轉換為 JSON 輸出即可:

C#連接配接SAP并下載下傳工單資料【生産系統與ERP對接】
C#連接配接SAP并下載下傳工單資料【生産系統與ERP對接】

下一篇将介紹如何将 MTS 裡面的工單完工數回傳至 SAP 裡面,友善貨倉入倉與扣數...

作者:Allen Chen無影

出處:http://www.cnblogs.com/allen0118/

郵箱:[email protected] 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀