SAP系统大部分功能都是用ABAP语言实现的,其重要性可见一般.SAP实施顾问大体上分模块的function顾问和ABAP顾问,做模块的function顾问主要是行业经验较丰富,她们能够充分理解客户的需求,而且熟悉SAP系统的配置.而SAP系统就是通过配置文件来实现大部分需求功能的,这样可以减少Bug,加快实施速度.ABAP顾问的职责则是实现客户某些特定的需求,那些无法通过配置而能够完成的功能,还有很重要的工作就是使用ABAP语言来打印报表.而ABAP语言其一个很强大的特性就是来打印报表.
    我觉得程序员转行到SAP,可能刚开始最容易也是最可能接触的就是ABAP.ABAP是Advanced Bussiness Application Programming的缩写.它是由SAP公司发明的,现在也算蛮先进的语言了,它是属于4GL的,即第4代编程语言.是完全面向对象的.既然如此,那为什么SAP还需要JAVA?怀着这个疑问,我查了一些资料.我的理解大致是这样,比如某公司实施了SAP系统,那么每天都会长时间使用SAP系统工作的员工必须使用SAP提供的SAP客户登陆端来登陆服务器.这个客户端上百M,装在员工电脑上,没有问题.但是很多其它的情况SAP客户登陆端就不能解决问题了,比如,此公司的某合作伙伴公司的人过来,需要临时使用这个SAP系统的几个功能,而且就使用这一次,那么他还要专门去装个百兆大的SAP客户端?又比如,现在SAP也提供了CRM的解决方案.CRM(Customer Relationship Management)是公司提高服务质量,加强客户满意度的电子商务手段,其中有时候也包括大家熟悉的网上购物服务,这个时候,ABAP在这个领域就不大擅长了.
    SAP提供了BAPI(Business Application Programming Interface).BAPI是SAP系统对外提供的一系列接口,主要是使第三方程序通过这些接口来使用SAP,从而方便客户定制某些程序.VB,Java,C,C++等都可以通过BAPI来访问SAP.BAPi是通过R/3系统上的RFC(Remote function call)功能来实现的.因为BAPI的强大功能作为基础,SAP就完全可以选择Java在CRM上加强各种功能,比如可以用Java快速开发一个实现特定功能的客户端,又比如用struts、jsp、servlet来做一个网上购物的电子商务网站,而这些Java程序都是通过BAPI和后台的SAP系统交换数据的.前些天看了些ABAP的资料,对ABAP有了一些大致的了解,个人觉得比较重要的有Classical ABAP程序的结构,如何用ABAP来打印报表,程序内部使用的subroutine的结构和使用,系统公用的function module的结构和使用,基本的语法很简单,有了这些基础,就可以对BAPI有更加清楚的认识了.而SAP也提供了一个API叫Java Connector(JCo),可以使用它方便的调用BAPI提供的接口,如果比较熟悉Java的话,那么就可以很快开发简单的后台是SAP的Java桌面和WEB应用了:-)
    小弟刚刚涉足SAP领域,现在完全是自学也是瞎摸索,只是觉得这方面资料也不多,期待和大家一起讨论,观点有错误的地方还请大家指正:-P

推荐几个资源:
ABAP,这本书很不错,是我能找到最好的ABAP入门书
<<Abap Objects - An Introduction To Programming Sap Applications>>

BAPI Learning Guide:这里有许多关于BAPI的介绍还提供了SAP上BAPI的网址
http://searchstorage.techtarget.com/originalContent/0,289142,sid21_gci948835,00.html
如何使用JCo来将Java和SAP系统联系起来,Java程序员只需要随便翻翻就可以了,因为很多都是在讲解Java语法
<<Enterprise Java for SAP>>