天天看点

RFC C#

   SAP所提供的 外部接口包括 程序通信接口(communication interface)、 文件I/O接口(file I/O interface)以及 数据接口(data interface)。数据接口用于在系统内部对程序运行时数据和数据库数据进行传递,其实现技术包括 批输入(batch input)、 SAP SQL等。程序通信接口和文件I/O接口则是与其他系统进行数据交换的通路。文件I/O实现文件中数据和运行时数据间的交换(即将数据从文件上载到程序中。或将运行时数据下载至文件)。RFC位于程序通信接口中,以实现外部程序对SAP系统内部数据的访问。

 以下是.C# 调用MD_STOCK_REQUIREMENTS_LIST_API的例子(可以到我的资源下载)。

测试环境: VS2008,XP

 //设置登录连接的类

            DataSet dset = new DataSet();

            SAPLogonCtrl.SAPLogonControlClass logon = new SAPLogonCtrl.SAPLogonControlClass();

            //连接参数设置

            logon.ApplicationServer = "139.169.6.180";

            logon.Client = "800";

            logon.Language = "ZH";

            logon.User = "yincm";

            logon.Password = "8262879";

            logon.SystemNumber = 0;

            //实例化连接对象

            SAPLogonCtrl.Connection Conn;

            Conn = (SAPLogonCtrl.Connection)logon.NewConnection();

            //Conn.CodePage = "8400";

            //调用登录方法

            if (Conn.Logon(0, true))

            {

                label1.Text = "登录成功!";

            }

            else

            {

                label1.Text = "登录失败!";

            }

            if (label1.Text == "登录成功!")

            {

                //实例SAPFunction对象

                SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsClass();

                //设置连接

                func.Connection = Conn;

                SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("MD_STOCK_REQUIREMENTS_LIST_API");

                //设置输入参数

                SAPFunctionsOCX.IParameter PLSCN = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("PLSCN");

                PLSCN.Value = "000";

                SAPFunctionsOCX.IParameter MATNR = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("MATNR");

                MATNR.Value = textBox2.Text.Trim();

                SAPFunctionsOCX.IParameter WERKS = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("WERKS");

                 WERKS.Value = "2110";

                //调用RFC方法

                ifunc.Call();

                SAPTableFactoryCtrl.Tables ENQs = (SAPTableFactoryCtrl.Tables)ifunc.Tables;

                //SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)ENQs.get_Item("IT_MARA");

                SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)ENQs.get_Item("MDEZX");

                //int j = ENQ.RowCount;

                DataTable dt = new DataTable();

                for (int i = 1; i <= ENQ.RowCount; i++)

                {

                    DataRow dr = dt.NewRow();

                    if (i == 1)

                    {

                         dt.Columns.Add("INDEX");

                         dt.Columns.Add("MNG02");

                         dt.Columns.Add("DAT00");

                    }

                    dr["INDEX"] = i.ToString();

                    dr["MNG02"] = ENQ.get_Cell(i, "MNG02").ToString();

                    dr["DAT00"] = ENQ.get_Cell(i, "DAT00").ToString();

                    dt.Rows.Add(dr);

                }

                dataGridView1.DataSource = dt.DefaultView;

                Conn.Logoff();

            }