C# 調用SAP RFC

結構:spa

 

 

 安裝NuGet包:code

 

 

using SAP.Middleware.Connector;
using System.Data;

namespace DFDN.SDK.ServiceInterface
{
    public class RfcDemo
    {
        public void Loading()
        {
            RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination(GetParameters()); //鏈接字符串
            RfcDestination SapRfcDestinationForConfig = RfcDestinationManager.GetDestination("dad"); //鏈接字符串 從App.config配置
            RfcRepository SapRfcRepository = SapRfcDestination.Repository;

            DataTable dt = new DataTable();  //數據源
            dt.Columns.Add("DATA1", typeof(string));
            dt.Columns.Add("DATA2", typeof(string));
            dt.Columns.Add("DATA3", typeof(string));

            IRfcFunction func = SapRfcRepository.CreateFunction("Z_RFC_XXXX");
            IRfcTable tSAP = func.GetTable("INPUT_TABLE");

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string str1 = dt.Rows[i][0].ToString();
                string str2 = dt.Rows[i][1].ToString();
                string str3 = dt.Rows[i][2].ToString();
                IRfcStructure struSAP = tSAP.Metadata.LineType.CreateStructure();
                struSAP.SetValue("str1", str1);
                struSAP.SetValue("str2", str2);
                struSAP.SetValue("str3", str3);
                tSAP.Append(struSAP);
            }

            func.SetValue("INPUT_TABLE", tSAP); //table 參數
            func.SetValue("WERKS", "A");        //單個參數    
            func.SetValue("STATUS", "B");    //單個參數
            func.Invoke(SapRfcDestination); //調用

            IRfcTable SAPDataTable = func.GetTable("RETURN_TABLE"); //獲取表格結果

            DataTable table = ToDataTable(SAPDataTable);  //轉換DataTable
            string result = func.GetValue("X").ToString(); //獲取指定返回結果

        }

        /// <summary>
        /// RfcTable 轉換爲 DataTable
        /// </summary>
        /// <param name="myrfcTable"></param>
        /// <returns></returns>
        public DataTable ToDataTable(IRfcTable myrfcTable)
        {
            DataTable loTable = new DataTable();
            int liElement;
            for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
            {
                RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);

                loTable.Columns.Add(metadata.Name);
            }

            foreach (IRfcStructure Row in myrfcTable)
            {
                DataRow ldr = loTable.NewRow();

                for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                {
                    RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                    ldr[metadata.Name] = Row.GetString(metadata.Name);
                }
                loTable.Rows.Add(ldr);
            }
            return loTable;
        }

        /// <summary>
        /// SAP RFC 鏈接信息設置
        /// </summary>
        /// <returns></returns>
        public RfcConfigParameters GetParameters()
        {
            RfcConfigParameters parms = new RfcConfigParameters();

            parms.Add(RfcConfigParameters.AppServerHost, "192.168.0.114");   //SAP主機IP

            parms.Add(RfcConfigParameters.SystemNumber, "01");  //SAP實例

            parms.Add(RfcConfigParameters.User, "RFC_EDI");  //用戶名

            parms.Add(RfcConfigParameters.Password, "init1");  //密碼

            parms.Add(RfcConfigParameters.Client, "300");  // Client 

            parms.Add(RfcConfigParameters.Language, "ZH");  //登錄語言

            parms.Add(RfcConfigParameters.PoolSize, "10");

            parms.Add(RfcConfigParameters.IdleTimeout, "600");

            parms.Add(RfcConfigParameters.Name, "DAP");

            return parms;
        } 
    }
}
<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="SAP.Middleware.Connector">
      <sectionGroup name="ClientSettings">
        <section name="DestinationConfiguration" type="SAP.Middleware.Connector.RfcDestinationConfiguration,sapnco"/>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <SAP.Middleware.Connector>
    <ClientSettings>
      <DestinationConfiguration>
        <destinations>
          <add NAME="dad" USER="ddac" PASSWD="qwe" CLIENT="110" SYSNR="00" ASHOST="192.168.0.111" LANG="ZH" GROUP="PUBLIC" MAX_POOL_SIZE="10" IDLE_TIMEOUT="600"></add>
        </destinations>
      </DestinationConfiguration>
    </ClientSettings>
  </SAP.Middleware.Connector>
</configuration>
相關文章
相關標籤/搜索