C# 使用 SAP NCO3.0 調用SAP RFC函數接口

最近使用C#調用SAP RFC函數,SAP提供了NCO3.0組件。服務器

下載組件安裝,以後引用「sapnco.dll」和「sapnco_utils.dll」兩個文件。app

在程序中 using SAP.Middleware.Connector;函數

具體看下面代碼this

使用app.config文件配置註冊客戶端鏈接spa

<?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="Conn" USER="KY_PG01" PASSWD="ky@123" CLIENT="002" SYSNR="10" ASHOST="192.168.0.22" LANG="ZH" GROUP="PUBLIC" MAX_POOL_SIZE="5"></add>
        </destinations>
      </DestinationConfiguration>
    </ClientSettings>
  </SAP.Middleware.Connector>
</configuration>
private RfcDestination _rfcDestination = null;
public DataTable dtr = new DataTable();

public void RegisterDestination()  //註冊客戶端
        {
            try
            {
                if (_rfcDestination == null)
                {
                    _rfcDestination = RfcDestinationManager.GetDestination("Conn");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 public string InvokeRFCFunctionGetCompanyID(string dateBegin, string dateEnd)
        {
            IRfcFunction function = null;
            string str = string.Empty;
            try
            {
                function = _rfcDestination.Repository.CreateFunction("ZKY_FM_ZM005B");//調用服務器函數
                function.SetValue("SO_FKDAT_B", dateBegin);//傳入參數
                function.SetValue("SO_FKDAT_E", dateEnd);//傳入參數
                function.SetParameterActive(0, true);
                function.Invoke(_rfcDestination);//執行服務器調用的函數
                IRfcTable myrfcTable = function.GetTable("IT_ZM005B");//rfc server function 返回值table結構名稱
               
                int liElement = 0;
                for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                {
                    RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                    dtr.Columns.Add(metadata.Name);//循環建立列
                }
                foreach (IRfcStructure dr in myrfcTable)//循環table結構表
                {
                    DataRow row = dtr.NewRow();//建立新行
                    for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                    {
                        RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                        row[metadata.Name] = dr.GetString(metadata.Name).Trim();
                    }
                    dtr.Rows.Add(row);
                }
                this.dataGridView1.DataSource = dtr;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return str;
        }

//在事件或方法中調用

 this.RegisterDestination();
 this.InvokeRFCFunctionGetCompanyID("20120401", "20120901");
相關文章
相關標籤/搜索