zoukankan      html  css  js  c++  java
  • C# 调用SAP RFC

    结构:

     安装NuGet包:

    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>
  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/Liyuting/p/14132187.html
Copyright © 2011-2022 走看看