.NET串連SAP系統專題:C#調用RFC代碼(三)

來源:互聯網
上載者:User

    本文就說明在C#中如何編寫代碼來調用SAP中的RFC函數擷取資料。(Winform32)

    首先需要引用兩個NCO3.0的DLL,在文後。

    然後在程式碼頁面引用:

    using SAP.Middleware.Connector;

    然後所有的代碼如下:

namespace SAP_RFC

{

    public partial class Form1 : Form

    {

        string MATNR = string.Empty;

        public Form1()

        {

            InitializeComponent();

        }

        public void nco()

        {

            IDestinationConfiguration ID = new MyBackendConfig();

            RfcDestinationManager.RegisterDestinationConfiguration(ID);

            RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");

            RfcDestinationManager.UnregisterDestinationConfiguration(ID);

            nco(prd);

        }

        public void nco(RfcDestination prd)

        {            

            RfcRepository repo = prd.Repository;

            IRfcFunction companyBapi = repo.CreateFunction("ZRFC_MARA_INFO");   //調用函數名

            companyBapi.SetValue("MATNR", MATNR);   //設定Import的參數

            companyBapi.Invoke(prd);   //執行函數

            IRfcTable table = companyBapi.GetTable("IT_MARA");  //擷取相應的品號內表

            string MAKTX = companyBapi.GetValue("MAKTX").ToString();  //擷取品名

            DataTable dt = new DataTable();  //建立表格

            dt.Columns.Add("品號");  //表格添加一列

            for (int i = 0; i < table.RowCount; i++)

            {

                table.CurrentIndex = i;  //當前內表的索引行

                DataRow dr = dt.NewRow();

                dr[0] = table.GetString("MATNR");  //擷取表格的某行某列的值

                dt.Rows.Add(dr);  //填充該表格的值

            }

            if (MATNR == "")

            {

                for (int i = 0; i < dt.Rows.Count; i++)

                {

                    this.comboBox1.Items.Add(dt.Rows[i][0].ToString());   //填充下拉框

                }

            }

            this.label1.Text = MAKTX;   //顯示品名

            prd = null;

            repo = null;

        }

        //登陸SAP前的準備工作

        public class MyBackendConfig : IDestinationConfiguration

        {

            public RfcConfigParameters GetParameters(String destinationName)

            {

                if ("PRD_000".Equals(destinationName))

                {

                    RfcConfigParameters parms = new RfcConfigParameters();

                    parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.3");   //SAP主機IP

                    parms.Add(RfcConfigParameters.SystemNumber, "00");  //SAP執行個體

                    parms.Add(RfcConfigParameters.User, "MENGXIN");  //使用者名稱

                    parms.Add(RfcConfigParameters.Password, "5239898");  //密碼

                    parms.Add(RfcConfigParameters.Client, "888");  // Client

                    parms.Add(RfcConfigParameters.Language, "ZH");  //登陸語言

                    parms.Add(RfcConfigParameters.PoolSize, "5");

                    parms.Add(RfcConfigParameters.MaxPoolSize, "10");

                    parms.Add(RfcConfigParameters.IdleTimeout, "60");

                    return parms;

                }

                else return null;

            }

            public bool ChangeEventsSupported()

            {

                return false;

            }

            public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            comboBox1.Items.Clear();

            nco();

            comboBox1.SelectedIndex = 1;

        }

        //當下拉框索引變化的時候傳遞品號進去查詢出品名出來

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            MATNR = comboBox1.Text.ToString();

            nco();

        }

    }

}

我想這個C#代碼很簡單,我就不多做詳細說明了。結果如下:

SAP中品號資訊如下:

由此可見資料完全OK,調用成功。

程式在第一次載入的時候有點慢,在連結SAP和登陸。後續在下拉框變化的時候就立馬顯示出品名出來了,絲毫沒有任何停頓。第二次連結SAP的時候大概是不必在登陸了,SAP系統中已有登陸資訊,運行T-CODE:SM04

紅色框中這兩個即是我們的RFC調用所留下的登入工作階段。一旦我們的C#程式退出之後,這兩個RFC也就退出了。

如果我們的C#程式是ASP.NET的話,頁面關閉之後這個RFC登入資訊都還在的。除非IIS關閉,否則只有等到SAP系統逾時退出這兩個登陸會話了。

DLL:

http://files.cnblogs.com/mengxin523/SAP_DotNetConnector3.zip

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.