zoukankan      html  css  js  c++  java
  • C# 使用 SAP NCO3.0 调用SAP RFC函数接口

    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");
  • 相关阅读:
    ASP.NET Session
    表格导入和导出
    C#根据当前时间获取其他时间
    SuperGridControl全局设置
    无框窗体移动
    窗体在屏幕边缘隐藏
    comboBoxEx
    CROSS JOIN
    supergirdcontrol单元格添加控件
    ADVtree
  • 原文地址:https://www.cnblogs.com/skyay/p/4760084.html
Copyright © 2011-2022 走看看