设为首页 收藏本站
查看: 1136|回复: 0

[经验分享] .net如何与SAP进行接口

[复制链接]

尚未签到

发表于 2019-2-2 14:12:10 | 显示全部楼层 |阅读模式
  如何让.net与SAP进行接口,这是个非常有意义的工作,SAP功能虽强,但一般的用户对它的界面还是很不习惯,尤其是有太多参数要填写,容易使人迷惑。而用.net编程,可以做出更友好的界面,屏蔽不需要输入的参数,并为用户完成部分默认参数的设置,这就简化了对SAP的直接操作。
  这里推荐的接口方法为使用SAP .NET Connector,你首先要下载并安装这个软件,现在的版本大约是2.01版
  
这里有篇文章,用图形介绍了具体的方法,非常好:
http://www.cnblogs.com/levin9/articles/701872.html
  下面强调一些个人体验
  1.这种接口方式的实质是调用了SAP中的BAPI方法,SAP .NET Connector起到一个连接的作用。
大致的步骤为
a.在你的工程中,添加一个SAPConnector项目(如果你先安装VS2003,再安装Connector就会看到这种项目),这个项目会给你提供一个设计视图界面。

b.在VS2003左侧的服务器中,有一种类型为SAP的服务器(如果你安装了SAPLogin,也安装了Connector,你刷新服务器管理器就会看到),在SAP类的服务器中添加你的SAP服务器,然后通过刷新可以看到很多的BAPI方法

c.将你需要的方法拖到设计视图界面中。这时你的工程中就新增了这些方法,同时新增了很多类,它们是SAP的BAPI函数调用时要用到的参数

d.在你的工程中,你首先要和SAP服务器进行连接,以下是关键代码
using SAP.Connector;
using SAP.Connector.Rfc;
  Destination destination1 = new Destination();
SAPProxy1 sapProxy11 = new SAPProxy1();
sapProxy11.Connection = SAP.Connector.Connection.GetConnection(destination1);
  if(sapProxy11.Connection.IsOpen == false)
{
destination1.Username = user;
destination1.Password = password;
destination1.SystemNumber = sysnum;
destination1.Client = client;
destination1.AppServerHost = server;
  sapProxy11.Connection.Open();
}
  e.打开连接后,下面就开始实质的操作了,我们以写物料为例,它要调用大量参数,所以你首先要申明这些参数,但是对不需使用的参数,有没有引用(ref)或输出(out)要求的,可以用null来处理。
//声明参数
BAPIMATHEAD HEAD = new BAPIMATHEAD();
BAPI_MARA MARA = new BAPI_MARA();
BAPI_MARAX MARAX = new BAPI_MARAX();
....
//对参数进行赋值
MARAX.Matl_Group = "X";
MARC.Plant = "0162"; MARCX.Plant = "0162";
HEAD.Material="A2C5000232";
...
//最后调用BAPI函数向SAP中写入
sapProxy11.Bapi_Material_Savedata(MARA,MARAX,"","",null,null,HEAD,null,null,null,null,MARC,
MARCX,MVKE,MVKEX,null,null,null,null,MBEW,MBEWX,MLGN,MLGNX,out RET2,ref PAREXTable,
ref PAREXXTable,ref MEANTable,ref makt,ref MLTXTable,ref BAPITVGWTable,ref BAPITVGWXTable,
ref BAPITKGWTable,ref BAPITKGWXTable,ref MFHMTable,ref MFHMXTable,
ref MATRETURN2Table,ref mlan,ref MARMTable,ref MARMXTable);
  f.写入完成后不要忘了关闭连接
if (sapProxy11.Connection.IsOpen == true)
sapProxy11.Connection.Close();
  g.至此即完成了.net对SAP的接口调用,当然实际工程中还有很多异常捕获和信息反馈的处理。
  2.注意Connector和VS2005不兼容,如果你想用VS2005,可以先在VS2003中,选择你需要的方法,即做到以上描述步骤中的第c步,将代码编译一下,然后拷贝到一个装有VS2005的机器上,用VS2005重新编译一下,VS2005会对你的代码进行升级,以下的步骤照旧。
  3.注意SAP系统的版本升级,
目前SAP已由4.6C升到了ECC6.0,如果你以前在4.6C中作了一个接口程序,现在系统升级后,你的程序可能会抛出异常,类似:System.NullReferenceException: Object reference not set to an instance of an object.   at SAP.Connector.Rfc.RfcMarshal.NetFieldToRfcField(Object src, RFCTYPE type, Encoding encoding, Byte[] dest, Int32 offset, Int32 len, Int32 charSize, Int32 decimals)...
这就是系统升级引起的,因为可能某个BAPI函数需要的参数在不同的版本中是不一样的,
处理办法是:重新启动VS2003,建立一个新的工作,在SAP服务器中,连接新的如ECC6.0SAP服务器,重新得到新的BAPI方法以及相关的类。然后复制你原来的代码,并根据新的BAPI的参数调整这些代码。
  以上供参考,欢迎讨论。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670936-1-1.html 上篇帖子: SAP成本核算步骤简介之三 下篇帖子: SAP 内表转XML文件 老白的文章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表