.NET串連SAP系統專題:C#擷取RFC中自訂的異常(四)

來源:互聯網
上載者:User

    有的時候我們需要在RFC中拋出一些自訂的異常,比如輸入一個不存在的品號,我們需要拋出一個異常,告知使用者品號不存在。有一個笨笨的做法就是通過傳回值來判斷,但是這樣不靈活,同時也會因為品號不存在而繼續之行RFC。如果我們能自己拋出異常,程式自動停止執行RFC,那將是兩全其美!

    現在設定一個功能:輸入兩個數,第一個數除以第二個數。2個異常:被除數不能為0和除數不能為100。

    首先,在SE37中建立一個RFC,就用上篇博文的RFC吧。

    在IMPORT頁設定如下:     

   Export版面設定如下:   

   Changing和Table頁面放空

   Exceptions版面設定如下:   

    然後就是源碼咯:     

     代碼中,RAISE專門用於拋出異常,程式自動停止執行,所有的傳回值將被清空!RAISE 後面的內容就是在Exceptions中定義的內容了。

     然後程式記得啟用!!如此SAP端設定就結束了。

     回到VS2010中,建立一個程式,介面如下:     

    於是,開始寫程式:

    首先是引用兩個dll(參考上篇),並在程式開頭輸入:

    using SAP.Middleware.Connector;

    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)

        {

            string type = string.Empty;

            RfcRepository repo = prd.Repository;

            IRfcFunction companyBapi = repo.CreateFunction("ZRFC_MARA_INFO");  //指定RFC名稱

            try

            {

                companyBapi.SetValue("NUM1", textBox1.Text.Trim());  //輸入參數複製

                companyBapi.SetValue("NUM2", textBox2.Text.Trim());  //輸入參數複製

                companyBapi.Invoke(prd);  //開始調用執行

                textBox3.Text = companyBapi.GetValue("NUM3").ToString();  //擷取返回結果

            }

            catch (RfcAbapException ex)  //此Exception專門用於擷取使用者自訂的異常資訊!!!!

            {

                // companyBapi.Metadata.GetAbapException(ex.Key).Documentation   擷取對應的異常的解說文字

                MessageBox.Show(companyBapi.Metadata.GetAbapException(ex.Key).Documentation, "SAP RFC返回資訊", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            catch (RfcTypeConversionException ex)  //此Exception專門用於擷取變數類型轉換的異常!!!!

            {

                MessageBox.Show("您輸入的不是數值", "SAP RFC返回資訊", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }

            catch (RfcAbapRuntimeException ex)   //此Exception專門用於擷取RFC執行過程中的運行時異常!!!!

            { 

                MessageBox.Show(companyBapi.Metadata.GetAbapException(ex.Key).Documentation, "SAP RFC返回資訊", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }

            catch (RfcBaseException ex)  //此Exception是總Exception類,可以擷取所有的異常,如果有多個Catch,則不可以放第一位!!!!

            {

                MessageBox.Show("其他所有錯誤", "SAP RFC返回資訊", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }

            prd = null;

            repo = null;

        }

        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");

                    parms.Add(RfcConfigParameters.SystemNumber, "00");

                    parms.Add(RfcConfigParameters.User, "MENGXIN");

                    parms.Add(RfcConfigParameters.Password, "5239898");

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

                    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 button1_Click(object sender, EventArgs e)

        {

            nco();

        }

如此,C#運行結果如下:

以上可以正確得出我們自己拋出的異常的資訊出來。程式測試OK!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.