C# 使用 SAP NCO3.0 调用SAP RFC函数接口

最近使用C#调用SAP RFC函数,SAP提供了NCO3.0组件。

下载组件安装,之后引用“sapnco.dll”和“sapnco_utils.dll”两个文件。

在程序中 using SAP.Middleware.Connector;

具体看下面代码

使用app.config文件配置注册客户端连接

<?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");

 

posted on 2013-09-12 14:55  空白画映  阅读(4543)  评论(0编辑  收藏  举报

导航