.NET连接SAP系统专题:C#获取RFC中自定义的异常(四)
2021/4/23 20:27:08
本文主要是介绍.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!!!
这篇关于.NET连接SAP系统专题:C#获取RFC中自定义的异常(四)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具