C# SAP .Net Connector 3.0連接RFC

RFC(Remote Function Call)是SAP開放給外部系統連接的一種資料傳遞方式,就像是API的方式讓外部系統可以透過Metadata去取得資料。

.NET 可以透過SAP所提供的.Net Connector來進行資料串接。

架構圖如下:



使用Visual Studio 的套建管理工具NuGet去安裝套件

pm>Install-Package SAPDotNetConnector3 -Version 0.3.0

安裝完成以後會發現多了兩個參考(sapnco、sapnco_utils)

SAP設定允許遠端連線

using SAP.Middleware.Connector;

設定連線參數,帳號密碼和RFC Fuction Name 和 TableName。

using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace RFCsample
{
    class Program
    {
        static void Main(string[] args)
        {
            IRfcTable IRetTable = null;
            List<ET_COMP_INFO> COMP_INFOList = new List<ET_COMP_INFO>();

            RfcConfigParameters parms = new RfcConfigParameters();
            parms.Add(RfcConfigParameters.Name, "ESQ");
            parms.Add(RfcConfigParameters.AppServerHost, "192.168.82.26");
            parms.Add(RfcConfigParameters.SystemNumber, "11");
            parms.Add(RfcConfigParameters.User, "FLOW");
            parms.Add(RfcConfigParameters.Password, "efh@opk3");
            parms.Add(RfcConfigParameters.Client, "800");
            parms.Add(RfcConfigParameters.Language, "zf");
            parms.Add(RfcConfigParameters.PoolSize, "5");
            parms.Add(RfcConfigParameters.MaxPoolSize, "10");
            parms.Add(RfcConfigParameters.IdleTimeout, "600");

            RfcDestination rfcDest = RfcDestinationManager.GetDestination(parms);
            RfcRepository rfcRep = rfcDest.Repository;
            IRfcFunction IReader = rfcRep.CreateFunction("Z_GET_COMP_INFO");

            IReader.SetValue("P_DATUM", "20190220");
            IReader.SetValue("P_KTOPL", "ES00");

            IReader.Invoke(rfcDest);
            IRetTable = IReader.GetTable("PT_DATA");
            COMP_INFOList = IRetTable.AsQueryable().Select(x=>new ET_COMP_INFO
            {
                MANDT = x.GetString("MANDT") ??"",
                LAND1 = x.GetString("LAND1")??"",
                BUKRS=x.GetString("BUKRS")??"",
                BUTXT=x.GetString("BUTXT")??"",
                PRCTR=x.GetString("PRCTR") ??"",
                KTEXT=x.GetString("KTEXT") ??"",
                WAERS = x.GetString("WAERS") ?? ""
            }
             ).ToList();

            string s = JsonConvert.SerializeObject(COMP_INFOList);
            Console.Write(s);
            Console.ReadLine();
        }

        public class ET_COMP_INFO
        {
            public string MANDT = "";
            public string LAND1 = "";
            public string BUKRS = "";
            public string BUTXT = "";
            public string PRCTR = "";
            public string KTEXT = "";
            public string WAERS = "";
        }
    }
}

不需撰寫大量程式碼,就可以取得SAP的資料了。