.NET连接SAP系统专题:C#获取RFC中自定义的异常(四)
? ? 有的時候我們需要在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!!!
轉載于:https://www.cnblogs.com/saper/archive/2011/08/19/2146350.html
總結
以上是生活随笔為你收集整理的.NET连接SAP系统专题:C#获取RFC中自定义的异常(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 关于线程
- 下一篇: 楼市调控要“围堵”更要“疏通”