C#调用SAP函数的类

using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ability.MIS.Utils
{
    public static class SAPUtility
    {
        private static RfcConfigParameters GetConfigParams(SapDestionation sapDestionation, SapUser sapUser)
        {
            RfcConfigParameters configParams = new RfcConfigParameters();

            switch (sapDestionation)
            {

                default:
                case SapDestionation.DEV_100:
                    configParams.Add(RfcConfigParameters.Name, "DEV_100");
                    configParams.Add(RfcConfigParameters.AppServerHost, "182.1.1.1");
                    configParams.Add(RfcConfigParameters.Client, "100");
                    break;

                case SapDestionation.DEV_200:
                    configParams.Add(RfcConfigParameters.Name, "DEV_200");
                    configParams.Add(RfcConfigParameters.AppServerHost, "182.1.1.2");
                    configParams.Add(RfcConfigParameters.Client, "200");
                    break;

                case SapDestionation.QAS_800:
                    configParams.Add(RfcConfigParameters.Name, "QAS_800");
                    configParams.Add(RfcConfigParameters.AppServerHost, "182.1.1.116");
                    configParams.Add(RfcConfigParameters.Client, "800");
                    break;


                case SapDestionation.PRD_800:
                    configParams.Add(RfcConfigParameters.Name, "PRD_800");
                    configParams.Add(RfcConfigParameters.AppServerHost, "182.1.1.16");
                    configParams.Add(RfcConfigParameters.Client, "800");
                    break;
            }


            configParams.Add(RfcConfigParameters.SystemNumber, "00");
            configParams.Add(RfcConfigParameters.User, sapUser.UserName);
            configParams.Add(RfcConfigParameters.Password, sapUser.PassWord);
            configParams.Add(RfcConfigParameters.Language, "ZH");
            configParams.Add(RfcConfigParameters.PoolSize, "5");
            configParams.Add(RfcConfigParameters.PeakConnectionsLimit, "15");
            configParams.Add(RfcConfigParameters.IdleTimeout, "120");

            return configParams;
        }

        public static RfcDestination GetDestination(SapDestionation sapDestionation, SapUser sapUser)
        {
            RfcConfigParameters configParams = GetConfigParams(sapDestionation, sapUser);
            RfcDestination dest = RfcDestinationManager.GetDestination(configParams);
            return dest;
        }

        public static void PingDestination(SapDestionation sapDestionation, SapUser sapUser)
        {
            RfcDestination destination = GetDestination(sapDestionation, sapUser);
            destination.Ping();
        }
    }
}

 

c#存放SAP用户名和密码类:

using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ability.MIS.Utils
{
    public enum SapDestionation
    {
        Default = 0,
        DEV_100 = 1,
        DEV_200 = 2,
        QAS_800 = 3,
        PRD_800 = 4
    }

    public class SapUsers
    {
        public static SapUser DEV_IT06 = new SapUser("us01","000000");
        public static SapUser QAS_IT06 = new SapUser("us01", "123456");
        public static SapUser PRD_IT06 = new SapUser("us01", "000000");
        public static SapUser PRD_CK03 = new SapUser("us01", "1235401");
        public static SapUser QAS_CK03 = new SapUser("us01", "524121");

        public static SapUser CustomUser(string userName, string passWord)
        {
            return new SapUser(userName,passWord);
        }
    }

    public class SapUser
    {
        public String UserName;
        public String PassWord;
        public SapUser(string userName, string passWord)
        {
            UserName = userName;
            PassWord = passWord;
        }
    }
}

 

调用如下:

        /// <summary>
        /// 采购申请批量转采购订单
        /// </summary>
        /// <param name="dtSource">传入的采购申请相关信息表</param>
        /// <returns name="dtOut">传出的信息表,包含生成的采购订单号和提示信息</returns>
        public DataTable createPO(DataTable dtSource)
        { 
            var rfcDestination = SAPUtility.GetDestination(SapDestionation.DEV_200, SapUsers.DEV_IT06);
            //BAPI_USER_GETLIST

            RfcRepository rfcrep = rfcDestination.Repository;
            IRfcFunction myfun = rfcrep.CreateFunction("Z_MISCREATEPO");//Z_MISCREATEPO 为SAP函数名

            DataTable dtOut = new DataTable();
            //采购申请号
            dtOut.Columns.Add("BANFN", typeof(string));
            //采购申请行号
            dtOut.Columns.Add("BNFPO", typeof(string));
            //计划行
            dtOut.Columns.Add("J_3AEBSP", typeof(string));
            //网格值
            dtOut.Columns.Add("J_3ASIZE", typeof(string));
            //物料组
            dtOut.Columns.Add("MATKL", typeof(string));
            //实际采购数量
            dtOut.Columns.Add("MENGE", typeof(string));
            //单位
            dtOut.Columns.Add("MEINS", typeof(string));
            //供应商编码
            dtOut.Columns.Add("VENDOR", typeof(string));
            //需求跟踪号
            dtOut.Columns.Add("BEDNR", typeof(string));
            //净价格
            dtOut.Columns.Add("COND_VALUE", typeof(string));
            //价格单位
            dtOut.Columns.Add("COND_P_UNT", typeof(string));
            //税码
            dtOut.Columns.Add("SHUIM", typeof(string));
            //货币
            dtOut.Columns.Add("WAERS", typeof(string));
            //交货日期
            dtOut.Columns.Add("JHDAT", typeof(string));
            //成功标志(返回值,不需要传入)
            dtOut.Columns.Add("SUFLG", typeof(string));
            //信息(返回值,不需要传入)
            dtOut.Columns.Add("ERMSG", typeof(string));
            //采购订单号(返回值,不需要传入)
            dtOut.Columns.Add("EBELN", typeof(string));

            DataTable dtIn = new DataTable();
            dtIn.Columns.Add("BANFN", typeof(string));
            dtIn.Columns.Add("BNFPO", typeof(string));
            dtIn.Columns.Add("J_3AEBSP", typeof(string));
            dtIn.Columns.Add("J_3ASIZE", typeof(string));
            dtIn.Columns.Add("MATKL", typeof(string));
            dtIn.Columns.Add("MENGE", typeof(string));
            dtIn.Columns.Add("MEINS", typeof(string));
            dtIn.Columns.Add("VENDOR", typeof(string));
            dtIn.Columns.Add("BEDNR", typeof(string));
            dtIn.Columns.Add("COND_VALUE", typeof(string));
            dtIn.Columns.Add("COND_P_UNT", typeof(string));
            dtIn.Columns.Add("SHUIM", typeof(string));
            dtIn.Columns.Add("WAERS", typeof(string));
            dtIn.Columns.Add("JHDAT", typeof(string));
            dtIn.Columns.Add("SUFLG", typeof(string));
            dtIn.Columns.Add("ERMSG", typeof(string));
            dtIn.Columns.Add("EBELN", typeof(string));

            var table = myfun.GetTable("ZMISCRPO");//ZMISCRPO 为SAP函数的Tables里的表名,这个表既作为传入参数也作为传出参数
            for (int i = 0; i < dtSource.Rows.Count; i++)
            {
                //传入对应数据
                IRfcStructure currentRow = table.Metadata.LineType.CreateStructure();
                currentRow.SetValue("BANFN", dtSource.Rows[i]["BANFN"]);
                currentRow.SetValue("BNFPO", dtSource.Rows[i]["BNFPO"]);
                currentRow.SetValue("J_3AEBSP", dtSource.Rows[i]["J_3AEBSP"]);
                currentRow.SetValue("J_3ASIZE", dtSource.Rows[i]["J_3ASIZE"]);
                currentRow.SetValue("MATKL", dtSource.Rows[i]["MATKL"]);
                currentRow.SetValue("MENGE", dtSource.Rows[i]["MENGE"]);
                currentRow.SetValue("MEINS", dtSource.Rows[i]["MEINS"]);
                currentRow.SetValue("VENDOR", dtSource.Rows[i]["VENDOR"]);
                currentRow.SetValue("BEDNR", dtSource.Rows[i]["BEDNR"]);
                currentRow.SetValue("COND_VALUE", dtSource.Rows[i]["COND_VALUE"]);
                currentRow.SetValue("COND_P_UNT", dtSource.Rows[i]["COND_P_UNT"]);
                currentRow.SetValue("SHUIM", dtSource.Rows[i]["SHUIM"]);
                currentRow.SetValue("WAERS", dtSource.Rows[i]["WAERS"]);
                currentRow.SetValue("JHDAT", dtSource.Rows[i]["JHDAT"]);
                table.Append(currentRow);
            }

            myfun.SetValue("ZMISCRPO", table);//设置传入表的值

            myfun.Invoke(rfcDestination); //提交调用函数

            for (int i = 0; i < table.RowCount; i++)
            {
                //获取传出的数据
                table.CurrentIndex = i;
                var currentRowOut = table.CurrentRow;
                DataRow drOut = dtOut.NewRow();
                drOut["BANFN"] = currentRowOut.GetString("BANFN");
                drOut["BNFPO"] = currentRowOut.GetString("BNFPO");
                drOut["J_3AEBSP"] = currentRowOut.GetString("J_3AEBSP");
                drOut["J_3ASIZE"] = currentRowOut.GetString("J_3ASIZE");
                drOut["MATKL"] = currentRowOut.GetString("MATKL");
                drOut["MENGE"] = currentRowOut.GetString("MENGE");
                drOut["MEINS"] = currentRowOut.GetString("MEINS");
                drOut["VENDOR"] = currentRowOut.GetString("VENDOR");
                drOut["BEDNR"] = currentRowOut.GetString("BEDNR");
                drOut["COND_VALUE"] = currentRowOut.GetString("COND_VALUE");
                drOut["COND_P_UNT"] = currentRowOut.GetString("COND_P_UNT");
                drOut["SHUIM"] = currentRowOut.GetString("SHUIM");
                drOut["WAERS"] = currentRowOut.GetString("WAERS");
                drOut["JHDAT"] = currentRowOut.GetString("JHDAT");
                drOut["SUFLG"] = currentRowOut.GetString("SUFLG");
                drOut["ERMSG"] = currentRowOut.GetString("ERMSG");
                drOut["EBELN"] = currentRowOut.GetString("EBELN");
                dtOut.Rows.Add(drOut);
            }
            //返回传出表
            return dtOut;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值