.net连接SAP返回Table 整理

本文介绍了一个使用Java实现的SAP接口调用方法,通过设置配置参数并调用特定函数,从SAP返回DataTable。详细阐述了如何获取RfcDestination,配置参数,调用函数以及处理返回的表格数据。

public class SAPHelper
    {
        public static RfcDestination GetRfcDestination()
        {
            RfcConfigParameters rfcPar = new RfcConfigParameters();
            rfcPar.Add(RfcConfigParameters.Name, "名称");

            rfcPar.Add(RfcConfigParameters.SystemID, "SAP中的SystemID");
            rfcPar.Add(RfcConfigParameters.AppServerHost, "IP地址");
            rfcPar.Add(RfcConfigParameters.Client, "端口与SAP一致");
            rfcPar.Add(RfcConfigParameters.User, "用户名");
            rfcPar.Add(RfcConfigParameters.Password, "密码");
            rfcPar.Add(RfcConfigParameters.SystemNumber, "序号默认定义为00");
            rfcPar.Add(RfcConfigParameters.Language, "语言EN为英文");
            rfcPar.Add(RfcConfigParameters.IdleTimeout, "10");
            rfcPar.Add(RfcConfigParameters.MaxPoolSize, "10");
            rfcPar.Add(RfcConfigParameters.PoolSize, "5");
            RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
            return dest;
        }
      
        /// <summary>
        /// SAP返回DataTable
        /// </summary>
        /// <param name="functionName">函数名称</param>
        /// <param name="inputParame">传入SAP参数集合</param>
        /// <param name="tableName">SAP中Return的Table名称</param>
        /// <returns></returns>
        public static DataTable GetTable(string functionName, Hashtable inputParame, string tableName)
    {
        DataTable dt = null;
        if (functionName == "" || functionName == null)
        {
            dt = null;
        }
        else
        {
            RfcDestination dest = GetRfcDestination();
            RfcRepository rfcrep = dest.Repository;
            IRfcFunction myfun = null;
            myfun = rfcrep.CreateFunction(functionName);
            if (inputParame.Count > 0)
            {
                foreach (DictionaryEntry de in inputParame)
                {
                    myfun.SetValue(de.Key.ToString().Trim(), de.Value);//SAP里面的传入参数
                }
            }
            myfun.Invoke(dest);
            IRfcTable myrfcTableReturn = myfun.GetTable("OT_RETURN");
            if (myrfcTableReturn == null)
            {
                dt = null;
            }
            else
            {
                string typeName = myrfcTableReturn[0][0].GetValue().ToString().Trim();
                if (typeName == "S".Trim())
                {
                    IRfcTable myrfcTable = null;
                    if (tableName != "" || tableName != null)
                    {
                        myrfcTable = myfun.GetTable(tableName);//rfc server function 返回值table结构名称
                    }
                    if (myrfcTable != null)
                    {
                        dt = new DataTable();
                        int liElement = 0;
                        for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)
                        {
                            RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                            dt.Columns.Add(metadata.Name);//循环创建列
                        }
                        foreach (IRfcStructure dr in myrfcTable)//循环table结构表
                        {
                            DataRow row = dt.NewRow();//创建新行
                            for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)
                            {
                                RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                                row[metadata.Name] = dr.GetString(metadata.Name).Trim();
                            }
                            dt.Rows.Add(row);
                        }
                    }
                }
                else
                {
                    dt = new DataTable();
                    int liElement = 0;
                    for (liElement = 0; liElement < myrfcTableReturn.ElementCount; liElement++)
                    {
                        RfcElementMetadata metadata = myrfcTableReturn.GetElementMetadata(liElement);
                        dt.Columns.Add(metadata.Name);//循环创建列
                    }
                    foreach (IRfcStructure dr in myrfcTableReturn)//循环table结构表
                    {
                        DataRow row = dt.NewRow();//创建新行
                        for (liElement = 0; liElement < myrfcTableReturn.ElementCount; liElement++)
                        {
                            RfcElementMetadata metadata = myrfcTableReturn.GetElementMetadata(liElement);
                            row[metadata.Name] = dr.GetString(metadata.Name).Trim();
                        }
                        dt.Rows.Add(row);
                    }
                }
            }
        }
        return dt;
    }
 }



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值