SAP 接口技术研究与实现(硕士学位论文)


武汉理工大学 硕士学位论文 SAP接口技术研究与实现 姓名:刘洋 申请学位级别:硕士 专业:通信与信息系统 指导教师:曾春年 20090401 摘要SAP(System,ApplicationandProductsinDataProcessing)作为一种先进的管理理念和软件系统,融合了计算机信息技术和管理领域的具体业务,为企业参与激烈的市场竞争提供了有力的支持。随着SAP系统的引进,企业的信息化水平得到了进一步的发展,但企业经过多年的信息化建设,已经为不同部门、不同的应用建立了多个应用系统。这些应用系统极大的提高了企业经营管理信息的准确性和及时性。然而,由于这些信息系统都是为了不同的需要分别设计开发的,SAP系统与这些系统之间不能有效共享业务处理流程和信息,不能有效的协同工作。随着竞争的日趋加剧,企业迫切需要消除SAP系统与其他系统之间一个个的信息孤岛,使各个应用间既相互独立又能有效协同工作,将不同的应用集成到一个完整的企业级信息化环境中,并能够实现与其他企业间的通信。SAP接口技术很好的解决了SAP系统与外围信息系统的集成问题以及数据迁移或共享问题,接口是为了解决企业内的“信息孤岛”等而产生的,企业通过开发建设SAP接口,在各个信息系统之间架起了沟通的桥梁,为许多企业疏通了脉络,提高了信息系统的整合能力。本论文以实际的企业信息系统的建设为背景,采用大量的实例和截图,对SAP接口技术进行了深入的分析和研究,介绍了SAP相关的理论知识,对SAP软硬件体系结构、传输系统、集团策略进行了探讨,然后着重研究了SAP的RFC接口技术,BAPI接口技术,ALE-IDoc接口技术,WebService接口技术。通过在SAP的ABAP程序中调用BAPI接口技术实现了系统用户主数据的批量自动传输;通过在外部的java程序中调用SAP的标准BAPI接口,实现了在Java网页中添加、查看、删除SAP系统用户,成功验证了SAP与外部程序的接口技术;通过物料主数据在两个不同SAP系统之间的发送和接受验证了SAP的ALE—IDoc接口技术,之后着重介绍并通过内部和外部调用验证了目前比较流行的SAPWebService技术,为企业提供了比较先进的,切实可行的SAP接口方案。对提高企业的管理水平,优化业务流程,适应未来企业发展和市场竞争具有很高的参考价值。其中一些经验适应于国内一些正在实施SAP的大型国有企业。关键词:SAP系统,远程功能调用,BAPI,Web服务 Abstract111eSAP(System,ApplicationandProductsinDataProcessing),asakindofadvancedmanagementprincipleandasoftwaresystem,syncretizecomputerinformationtechniquewithrealbusinessoperations,providepowerfulsupportforthebusinesstojoininthefuriousmarketcompetition.WiththeimplementationoftheSAPsystem,Enterprise’informationlevelhasbeendevelopedgreatly,butaftermanyyearsofinformationconstruction;enterpriseshaveconstructedanumberofapplicationsystemsfordifferentdepartmentanddifferentapplication.Theseapplicationsystemshavegreatlyincreasedthelevelofaccurateandtimelyoftheinformationsystem,butbecausetheseinformationsystemisseparatedesignedfordifferentneed,SAPsystemandtheseinformationsystemCan’tbeeffectivelysharebusinessprocessandinformation,theyCan’tworktogethereffectively,withtheincreasinglyofintensifiedcompetition,enterprisesneedtoeliminatethesesystemislandsurgently,SOmeyCanbebothindependentofeachotherandworktogethereffectively.Differentapplicationswillhavetobeintegratedintoacompleteenterpriseclassinformationtechnologyenvironment;theyalsocallcommunicatewithotherenterprises.TheintegrationanddatamigrationordatasharingproblembetweenthemcanbesolvedverywellbytheinterfacetechnologyofSAPsystem.Interfaceisgeneratedinordertoeliminateofthe‘'informationisland”,bydevelopingandconstructingtheinterface,enterprisessetupcommunicatebridgesamongthem,clearsequenceideasforenterprise,improveabilityofintegrateofinformationsystem.withtheactualconstructionofinformationsysteminthebackground,theauthorusealargenumberofexamplesandscreenshots,analysisandresearchthetheoryofSAPinterfaceknowledgedeeply,introducetherelevanttheoreticalknowledge,thendiscussthehardwareandsoftwareofSAParchitecture,transportsystemandclientstrategy.FocusedonSAP’SRFCinterfacetechnology,BAPIinterfacetechnology,ale-idoeinterfacetechnologyandwebserviceinterfacetechnology.BycallingBAPIinterfacetechnologyintheSAP’SABAPprogram,II largenumbcrofusermasterdatacanbeentransferredintosystemautomatically.SAP’Ssystemusersinformationcanbeadded,deletedandfindinthejavapagebycallingSAP’SstandardBAPIintheexternalJavaprogram,AuthenticationSAPandexternalsystem’Sinterfacetechnology;bysendingandreceivingmaterialmasterdataintwodifferentSAP’SsystemtoshowtheALE—IDocinterfacetechnologysuccessfully,thenfocusonintroducingandshowingtheSAPWebServicetechnologywhichispopularcurrentlybyinternalandexternal‘Scalling,thesetechnologyarethereferencetoimprovemanagementlevel,streamlinebusinessprocess,letcompanyadapttothedevelopmentofmodementerpriseandtherequirementofmarketcompetition.Someexperiencesadaptstothestate-ownedenterprisewhichisgoingtoimplementSAPsystem.Keywords:System,ApplicationandProductsinDataProcessing,RemoteFunctionCall,BusinessApplicationProgramminginterface,WebServiceIII 独创性声明本人声明,所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他入已经发表或撰写过的研究成果,也不包含为获得武汉理工大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。签名:日期:华关于论文使用授权的说明本人完全了解武汉理工大学有关保留、使用学位论文的规定,即学校有权保留、送交论文的复印件,允许论文被查阅和借阅:学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。(保密的论文在解密后应遵守此规定)签名:导师签期: 武汉理工大学硕+学何论文第1章绪论每个企业经营的宗旨便是以最小的投入而赢得最大的利润,但随着企业规模的不断扩大,人员的增多,从简单的生产,办公环境发展到大型生产流水线,多种销售渠道,采购方式以及各种备品备件的库存管理,复杂多样的财务人事报表。企业的业务也从简单的本地化,单一化发展到现在的跨行业,跨地区。每个企业每年在管理方面的投入成倍增长,但效率却不断下降,所以,寻找一个适合本企业管理的解决方案已成为当前不容回避的问题,使用计算机和软件来协助企业管理是整个时代发展的必然结果。在信息技术迅猛发展的今天,对于一个企业来说,其效益和成败的一个决定因素就是能否充分的开发和有效的利用信息资源,对瞬息万变的市场能做出最快的反应。但是,在一个企业中存在着财务,物资,项目,设备,人力资源,生产,营销,招投标等众多信息,有效的收集,整理,归纳所需要的信息,将高质量的信息即时的传递给决策者,不是依靠一个人或一个简单的系统可以完成的。因此,信息资源的接口开发,集成,整合成为现代企业管理和控制的重要课题。1.1课题研究的背景及意义在信息社会中企业只有利用各种先进的管理方式和技术手段实现信息的高度集成,提高获取信息,利用信息的能力,发展知识经济,才能在激烈的市场竞争中取得优势,而SAP正是提供这种能力的思想和工具。建设社会主义市场经济,建立现代企业制度,转换经营机制,减员增效,是大多数国企面临的课题。为了实现这一目标,就必须以市场需求为导向,理顺企业业务流程和管理机制,强化管理以便快捷的获取各种市场信息,做出灵敏,及时,正确的响应,提高企业的竞争力。目前全球经济一体化进程加快,企业不但要与国内企业竞争,还要与国外企业竞争。与国际接轨,参与全球化的竞争,是世界经济发展的趋势。如今信息瞬间万变,竞争日趋激烈,单靠人力很难适应市场化的要求,因而需要借助信息技术的最新成果,建立先进的管 武汉理工大学硕士学位论文理机制,改善企业的运营管理。在这种社会环境条件的要求下,SAP管理思想和软件在我国悄然兴起并迅速传播是改革的必然结果。我国实施完或正在实施SAP的比较有代表的企业有:中石化,中石油,国家电网,联想等。目前就这些企业来说,可能普遍都遇到这样一些问题:随着SAP系统的引进,企业的信息化建设得到了进一步的发展,但企业的一些其他的系统或旧有的系统需要很长一段时间并行存在,这些系统关注于不同的领域,它们在各自的领域中都发挥着及其重要作用。例如招投标系统,营销系统等,由于种种原因造成这些系统与SAP系统之间完全或局部的孤立,各种信息(如财务信息,各种物料信息)无法或无法顺畅的在这些系统与SAP系统之间流动,它们各自为政,这样就形成了企业内部的一个个的信息孤岛。尽管这些系统关注于不同的领域,但相互之间在功能上有相互交叉和连接的地方,系统间的“集成”最终将成为一个大问题,跨系统的应用也将成为巨大的困局。从企业的自身原因分析,前期的信息化建设大多缺乏长远与统筹规划,不同阶段只考虑各种局部需求,造成了各种不同应用系统的盲目引进,如其中有上级部门下发推广的,也有自行开发或合作开发引进的等渠道。由于大多数应用系统之间没有统一的技术和数据标准,数据不能自动传递,缺乏有效的关联和共用,从而形成一个个彼此隔离的信息孤岛。从产业发展的角度来看,rr应用的变化速度很快,企业进行的每一次局部的IT应用都可能与以前的应用不配套,也可能与以后的”更高级”的应用不兼容。因此,信息孤岛的产生有着一定的必然性。信息孤岛的存在所带来的弊端是显而易见的。首先是导致信息的多口采集、重覆输入以及多头使用和维护,信息更新的同步性差,从而影响了数据的一致性和正确性,并使企业的信息资源拆乱分散和大量冗余,信息使用和管理效率低下,且失去了统一的、准确的依据。其次是由于缺乏业务功能交互与信息共用,致使企业的物流、资金流和信息流的脱节,结果造成账账不符、账物不符,不仅难以进行准确的财务核算,而且难以对业务过程及业务标准实施有效监控,导致不能及时发现经营管理过程中的问题,造成计划失控、库存过量、采购与销售环节的暗箱操作等现象,给企业带来无效劳动、资源浪费和效益流失等严重后果。再次是孤立的信息系统无法有效地提供跨部门、跨系统的综合性信息,各类数据不能形成有价值的信息,局部的信息不能提升为管理知识,以致对企业的决策支持只能流于空谈。同时由于企业信息孤岛的存在,还将影响信息化2 武汉理工大学硕士学位论文的集团化、行业化应用。如何有效消除SAP系统与这些外围系统的“信息孤岛",这些系统之间的信息如何有效共享,是众多企业迫切需要解决的问题。消除SAP系统和外部系统信息孤岛的根本办法是对资源进行统一规划,找到合适的接口,研制一体化智能信息处理平台,在企业不同应用系统之间实现无缝集成,以达到资源共享和协同工作目的。通过接口开发,建成以SAP为核心的一体化信息集成架构,将能更好的服务于企业的经营管理,同时由于SAP系统与现有的信息系统的集成,避免了原先线上处理的业务变为线下手工处理,同时由于SAP系统各模块内部的高度集成性,通过SAP系统与其他系统的集成,带动整体业务流转,实现了系统间的业务联动。由于SAP系统各模块功能和实施范围的限制,并不能满足企业经营管理的全部需求。进行接口开发建设,拓展了SAP系统的应用范围,延伸了SAP系统的实现功能,提升了SAP的使用层次,推动了SAP系统的深层应用,给决策者提供更高质量的信息支持。1.2国内外研究现状作为全球企业管理软件的业界领袖和电子商务解决方案的市场领导者,SAP公司早在20世纪80年代就开始同中国企业进行项目合作,与1995年正式成立中国分公司,并设立了北京、上海、广州等分公司【l】。并取得成功的经验。时至今日,作为中国企业资源计划市场的绝对领导者,一直以来,在提供的接口工具方面也同样领先于其他ERP厂商。首先为一汽大众,海尔,联想等各行业的优秀企业成功的实施了SAP软件。但针对SAP与外部系统接口问题,由于各个企业存在很大差异,各自企业内部有各自不同的应用系统,这些系统与SAP系统要交换的数据各异,国内很少有比较成功的经验可以借鉴,各个企业的接口实现技术还处于初级起步阶段,SAP系统与外围系统接口技术处于主要以学习借鉴国外技术为主,不断的探索完善层面。作者在参与实施的SAP项目过程中,咨询了很多资深专家,了解到对于SAP系统与外部系统的接口问题,是很多企业面临的最为头疼的问题之一,接口的解决往往需要根据企业的实际现状,需要SAP系统的实施/开发顾问和第三方系统的实施/开发顾问相互协调,如果由于种种原因协调不能达成一致,接口3 武汉理工大学硕士学位论文的开发问题很容易出现双方僵持不下的局面。也参阅了国内外主要期刊数据库,但介绍SAP接口技术的中文资料很少,大部份的技术资料都是英文的,也有相当一部分是德文的,而且只能登陆SAP官方网站或从SAP提供的官方教材中获得。登陆SAP官方网站需要合法的账号和密码,官方教材的获得往往需要参加SAP的培训,培训费用昂贵。可想而知,这对从事接口开发的技术人员门槛是很高的,国内的技术人员不仅需要有很好的外文功底,还需要对软件本身相当熟悉,而且对数据库组织结构有相当的了解等。再者,由于实施的行业的特殊性,面临的客户可谓千差万别,这就严重的限制了接口的通用性,从而也增加了接口的开发费用。相比之下,欧美等发达国家由于起步早等种种原因,他们对于SAP系统的使用处于比较成熟阶段。国外特别是欧美日发达国家有许多优秀的专门从事SAP接口开发的顾问,他们能够根据客户的要求和现状设计出优秀的接口程序,以使SAP完全融于整个企业当中,满足客户的特殊要求。1.3论文研究的主要内容以及解决的问题本课题在对SAP系统的理论研究基础上,以某企业的实际实施为背景,比较详细的分析了SAP的接口及其实现技术。对于正在实施SAP的同行业或其他行业具有非常好的参考价值和经济价值。本课题研究的主要内容如下:1)探讨SAP的管理思想,软硬件架构,集团策略。2)研究SAP的RFC接口技术。3)研究SAP的BAPI接口技术。4)研究SAP的ALE.IDoc接口技术。5)研究SAP的WebService接口技术。已解决的主要问题:1)对SAP系统提供的主要外部接口技术作了详细的分析。2)通过调用SAP的标准BAPI接口实现了系统用户主数据的批量传输。3)通过JCO技术成功实现在外部Java系统中添加,删除,显示SAP系统用户主数据。4)通过ALE.IDoc接口技术实现物料主数据在不同SAP系统之间的同步。5)通过内部和外部调用验证了SAP系统的WebService接口技术。4 武汉理工大学硕士学位论文2.1SAP介绍第2章SAP系统ERP(EnterpriseResourcePlanning,企业资源管理系统)是建立在现代企业的先进管理思想基础之上,利用信息技术为企业提供决策、计划、控制和业务评估的全方位、系统化的解决方案。ERP是一种管理思想,同时也包括管理手段、相应的信息系统及其实现方式,具体到大型的ERP信息系统软件包(例如SAPR/3、OracleERP以及我国的用友U8和金蝶K3等产品)内部,则一般包括大量的企业业务模块、经过优化的商业信息仓库、预定义的业务流程以及具体应用系统的实现形式和开发工具。ERP的核心思想是将企业中的所有资源整合集成,将企业的三大流(物流、资金流、信息流)进行全面一体化管理,对各项资源如财务、物资、项目、设备、人力资源等进行综合平衡和充分考虑,把企业内部生产经营的各种业务单元如订单、采购、库存、计划、生产、质量、运输、市场、销售服务以及相应的财务活动等纳入一条供应链,从而方便地调配企业资源,实现优化配置,在公司日常各个核心业务流程中发挥作用,利用现有资源取得尽可能多的经济效益【IJ。大家都熟知微软与Oracle-世界排名第一和第二的软件公司,如果要问世界第三大软件公司是谁,也许很多人都回答不出来。对一些人来讲,它是一个闻所为闻的公司一德国SAP软件公司121。ERP巨人.SAP公司创立于1972年,是ERP思想的倡导者,其总部设立在德国南部小城Walldorf(也许是由于SAP惊人的业绩和影响力,人们称此地为“莱茵河畔的硅谷")。SAP全称是System,ApplicationsandProductsinDataProcessing,即数据处理的系统、应用和产品。作为全球最优秀的企业管理软件供应商,SAP拥有包括诸多国际知名企业的客户群和数量相当庞大的专业技术人员,在ERP领域拥有毋庸置疑的领导地位。目前,SAP在120多个国家和地区拥有两万多家客户、四万多个系统安装点和一千多万名最终用户,世界财富500强中,百分之八十以上的公司都在使用SAP的系统及管理方案。对于我国企业来讲,SAP软件虽然昂贵,但因为它强大的影响力,往往是其ERP系统的首选【3】。5 武汉理工大学硕士学位论文2.2SAP硬件架构大型应用程序的总体设计需要同时考虑软件组件和运行软件的硬件平台,至少在起步阶段,硬件平台总会在应用程序部署中占一大部分。这里所谈及的硬件平台,并非是指特定的处理器或者总线架构,而是指那些构成应用程序的,包括机器、硬件组件和系统软件等,杂七杂八的所有东西的总体。一个硬件平台很可能就是运行一个操作系统的一台机器,但更为常见的硬件平台则可能由多种级别的机器组成,而且很可能运行着多种操作系统。某企业的SAP硬件平台规划如图2.1所示:图2.1某企业SAP硬件总体规划图SAP硬件平台是企业SAP系统底层的运行载体,它是支撑上层系统软件和企业应用重要“基石一。根据ERP系统的应用需求,系统涉及到的主要硬件平台设计包括服务器、存储部分和相关设备。(1)服务器部分:包括生产服务器组(由应用服务器组和会话服务器组构成)、测试服务器、开发服务器、培训服务器和管理配置服务器(SolManagcr服务器)构成。其中应用服务器组采用集群技术,一般由两台服务器组成,一台主机一台备机,它们有各自独立的本地磁盘,也共享网络磁盘,当主机出现故6 武汉理丁大学硕士学位论文障,服务会自动切换到备机。会话服务器由一台或多台服务器构成,负载均衡应用服务器组的压力。生产服务器组中的每个服务器都有各自独立的口地址,但对外提供服务时使用统一的虚拟IP。(2)存储部分:由磁盘阵列和磁带库构成:前者是企业ERP系统业务数据的存储载体;后者主要用于关键业务数据的备份,以保证数据安全。(3)相关设备:包括光纤交换机及相关的光纤条线等。2.3SAP集团策略一个SAPR/3系统包含多个”Client”,这里的”Client”指的并不是系统物理结构中的”客户端”,而可以译为”集团”,一个Client端代表着一个商业活动领域或是一个组织结构领域或是某一技术相关领域的一个独立的集合。系统用户登陆时需要指明集团,而且在登陆后一般只能访问所指定集团中的专有商业数据和相关模块的功能。在一个集团下面包含五种数据类型:(1)用户数据:主要是指此集团下的所有的用户数据及其相应的权限数据。(2)应用数据:主要是指商业交易数据、物料主数据、供应商主数据、设备主数据等外部录入的数据。(3)与集团相关的定制数据:主要是指具体的客户端数据,例如组织单位、分配及文档类型数据等。(4)跨集团定制数据:整个系统有效,这种类型的数据一旦被更改,删除,其影响将涉及到所有集团。(5)数据仓库:储存所有SAP系统开发过程中的对象(ABAPdevelopmentobjects),这些对象又称为仓库对象,包括ABAP程序、数据库表结构定义、系统数据类型等。仓库对象不是企业数据,而是系统内部数据(例如程序,数据结构等),与数据集团无关,一旦创建就可以在所有集团中使用。其中前三种数据类型与特定的集团相关(client.specific),后两种为跨集团数据(cross—client)。图2.2形象的描述了一个SAP系统中的两个集团【4】。7 武汉理工大学硕士学位论文集团100集团200圜圈藤圈幽圈融圈图2-2SAP系统集团SAP实施过程并不仅仅是在一个系统内部完成的。对一个完整的SAP系统来说,通常由开发系统(DEV)、测试系统(QAS)、生产系统(PRD)、培训系统(砸斟)等多个系统组成,这些系统之间的关系即有联系又有区别。SAP系统通常通过SAPSID,或者SID来辨别,它们由独一无二的三个大写字母或数字来组成【6】,如(“DEV”,”QAS”,”PRD”以及’'TRN”等等),每个系统一般都运行在各自独立的服务器上,有各自唯一的服务口地址。每个系统又有一个或多个集团组成。集团由三位数字组成,如(ooo,001,066,100,200,800等等)M】。(1)开发系统DEV:在开发系统中进行业务配置,设定权限,开发程序等的工作。在SAP项目启动后,每个模块的顾问或关键用户(技术组和业务组)所有的自定义以及系统配置、变更、测试都必须在开发系统DEV中进行。这些配置、变更一般都包装成一个个的传输请求。一旦所有的配置和变更做完了单元测试,还需要将这些传输请求传输到QAS测试系统中进行进一步的测试(集成测试)。所有的配置和变更以及开发的报表,增强等都需要利用传输请求进行系统间的传输。(2)测试系统(也称为质量保证系统)QAS-各个模块顾问在开发系统中对自定义,以及开发等改变系统配置进行单元测试完毕后,这些传输请求将传输到测试系统(QAS)中再次测试,以便保证配置、变更的正确,不会影响到其它系统模块。这样所有这些通过测试的变更还必须要经过各个模块组长、项目经理签字确认后才可以传输到生产系统中去。(3)生产系统PRD:生产系统是项目组开发和配置的结晶,是公司最后真正在使用的业务系统,该系统包含了大量的公司业务数据以及公司的业务流程8 武汉理工大学硕士学位论文运作配置。因此系统的规划以及系统配置的正确性直接影响到公司的业务,关系重大。(4)培训系统TIⅢ:顾名思义,培训系统主要作用就是用做培训的。生产系统是企业最终工作使用的系统,员工在使用生产系统之前,必须对系统有相当的了解,顾问对员工的培训以及员工的练习考试等都在培训系统中进行,另外,用户可以通过培训系统来不断提高自身对SAP系统的熟练程度。首先,开发过程中不可能使用实际的商业数据,因而开发系统和最终产品之间会有所区别;其次,各种SAPR/3仓库对象(程序,数据库等)在开发环境中创建之后,还要通过测试系统的检测过程,经过测试符合要求的才可以传输到最终产品中,图2.3为某企业对各个SAP系统的集团规划图:图2.3某企业SAP系统集团规划图9 武汉理工大学硕士学位论文各个系统的具体功能归纳如表2.1所示:表2.1SAP各个系统比较系统用途数据来源到位时间开发系统主要是用来进行系统配置、二虚拟数据。项目开始时次开发、单元测试的系统环境。测试系统主要用来做新功能测试、集成接近实际业项目开始后2个月测试、权限测试、程序测试的务数据。左右系统环境。培训系统主要是对用户进行系统配置、接近实际业项目开始后4个月业务操作等培训工作的系统环务数据。左右境。生产系统主要用来运行实际业务的系统实际业务数项目开始后5个月环境。生产系统中存放着企业据。左右的正式数据。通过传输的方式将业务配置等信息传输到测试系统中进行业务测试、权限测试、程序测试,在测试完成后再将开发系统中的业务配置等信息导入到培训系统和生产系统分别进行用户的培训和真实的业务操作。2.4SAP业务模块SAP系统往往将企业的日常运作分为几大模块进行管理,例如SAPR/3的商业模块大体上分为财务、物流和人力资源管理等几大部分。企业也可根据自身情况作相应的调整或对其进行进一步划分。如下图为某企业SAP系统各个模块规划图,当然不同企业有所不同。某企业SAP系统模块规划图如图2-4所示。10 武汉理r大学硕士学位论文图2—4某企业SAP系统模块规划图各模块中还包括一些子模块,如财务管理中的核算、资金和预算管理,物资管理中的需求计划管理、采购管理、供应商管理、库存管理以及人力资源管理中的自助服务管理、绩效管理等等,这些模块既相互独立,又内在联系,共享企业资源,共同组合成一个异常强大的企业业务应用及资源解决方案实现平台。 武汉理工大学硕士学位论文第3章SAP接口技术新一代SAP系统架构之下的组件数量庞大,各个组件间需要无缝地衔接(尤其是SAP中心系统ECC,BW与Portal之间的连接),而且开放性的SAP系统还要实现与其他系统平台随时通信,最佳的状态是让用户感觉只是在一个系统中进行工作。举例说来,用户在IIltenlet上几个订单的确认操作将自动更新SAPECC或R/3物资模块中的相关业务对象和数据库表,而这个更新还可以自动同步至其他模块和公司的其他系统,如招投标系统,这种理想的状态的实现依赖于系统内部以及系统之间的集成与接口技术的支持。3.1SAPI心C技术RFC(RemoteFunctionCall,远程功能调用)是SAP系统之间以及SAP与外部系统之间程序通信的基本接口技术,诸多其他更高层的SAP接口和通信技术,如BAPI,ALE等,都是基于RFC实现的。在系统间通信过程中,需区分发送系统和接受系统。RFC调用请求从发送系统(调用系统)中传至接受系统(被调用系统,也称远程系统或目标系统),其中发送请求的系统在通信过程中又称为RFC客户端,通信的另一方则称为RFC服务器。RFC客户端发起远程功能调用以执行RFC服务器提供的功能。其中调用系统和被调用系统可以是SAP系统或非SAP系统,此外还可以在SAP系统内部将特定的应用服务器指定为目标系统。根据通信方向和通信类型,共有如下三种RFC通信£7】:(1)两个独立的SAP系统之间通信;(2)SAP系统作为调用系统,与外部远程系统(非SAPABAP系统)通信;(3)外部系统作为调用系统,与SAP系统通信。在SAP中,可以提供给其他系统进行远程调用的程序模块是支持RFC的功能模块,即RFM(remote-enabledfunctionmodule,支持远程调用的功能模块)。例如在SAP系统之间,两个ABAP程序通过RFC接口进行通信,SAP系统A调用SAP系统B中的功能模块,B中被调用的SAP功能模块必须支持远程调12 武汉理工大学硕士学位论文用(remote-enabled),这样的SAP功能模块即为RFM。SAP系统与外部(非ABAP)系统进行的RFC通信,则为ABAP程序和其他语言(如C,C.H,Java,C撑)编写的程序的相互调用。例如SAP系统A的ABAP程序调用非SAP系统B的java程序。非SAP系统B的java程序调用SAP系统A的ABAP程序。在与其他语言的程序进行通信时,SAP将为各种语言及相关的操作系统提供RFC库(其中包含RFCAPI)及SAP连接器,以实现RFC接口。如:为Java提供的Java连接器(JCo);为C和C++提供的RFCSDK(RFCSoftwareDevelopmentKit);为.NET(C#,VB.NET等)提供的.NET连接器(NCo)等。SAP调用远程功能的能力是通过RFC接口系统(RFCinterfacesystem)实现的。根据调用方向的不同(sAP系统调用其他模块或其他系统调用SAP模块),RFC接口提供以下两种服务【71。(1)ABAP程序的调用接口任何ABAP程序都能使用CALLFUNCTION⋯DESTINATION语句调用远程功能。DESTINATION参数告诉SAP系统被调用的功能将在调用者之外的系统进行,通过RFC接口与远程系统进行通信。如果远程功能来自SAPABAP系统,则必须是实际的功能模块,并在功能库中注册为“远程功能调用’’,通信的双方都通过ABAP的RFC接口实现。(2)非SAPABAP程序的调用接口在RFC实现过程中,如果调用或被调用方是非ABAP程序,则非ABAP程序必须以特定的规格进行编程,以确保它可作为RFC通信中的伙伴方。SAP系统为外部程序提供RFC支持接口和GUl支持接D(GUI.supportedinterface)。这样,在非SAP系统中,外部程序就能调用并执行SAPRFM;反过来,SAP中的ABAP程序又能通过该支持接口使用外部程序提供的功能。3.2BAPI接口技术在研究BAPI之前,首先要了解业务对象(BO)的和业务对象仓库(BOR)。业务对象(BusinessObject,简称BO)代表的是实际世界的对象,例如一个物料数据、一个系统用户等。SAP业务对象包含业务数据,并完整描述了业务过程。系统内部应用和系统间在业务对象级别进行通信。业务对象仓库(BusinessObjectRepository,简称BOR)是SAP业务对象类型13 武汉理工大学硕士学位论文(业务对象的定义和描述)和相关BAPI的组织中心。其中的业务对象根据其隶属的应用层级进行组织,以便于查找。业务对象仓库管理着SAP业务对象的不同发布版本,同时保证其接口的版本兼容性。BAPI英文全称为BusinessApplicationProgrammingInterface,即业务应用编程接口,是指SAP中经过精确定义的业务应用的数据和处理接口。该接口在业务对象仓库中进行定义,是SAP业务对象方法的具体实现。每一个BAPI用于完成与该对象所属应用相关的特定业务功能。借助于BOR和BAPI,整个SAP系统中的业务对象均可以通过面向对象的视图进行组织,并使用BAPI进行访问操作。在SAP内部组件及SAP与非SAP组件之间的技术整合和业务数据交换过程中起着非常重要的作用。SAP通过BAPI实现组件间的信息和数据交换,并通过该标准接口把整个系统链接为一个整体。BAPI技术是与面向对象概念联系在一起的。面向对象是以模拟现实世界中的对象及其关系做为系统架构(或程序结构)基础的一种设计思想。不同系统间的信息传递过程中,也常常使用面向对象的技术标准。SAP的面向对象架构通过业务对象、业务对象类型和BAPI等实现。BAPI归纳介绍如下:1).BAPI特点:(1)它实际上是一种特殊的RemoteFunctionModule(RFC)是为了提供使用外部程序来进行交易活动。(2)它提供的基于企业目标(BusinessObject)技术的接口应用界面。(3)SAP采用Object-oriented技术,逻辑定义了SAP系统的所有功能目标,并且将所有的目标(Objects)和BAPIs存储于企业目标库BOR。(4)SAPR/3企业目标的目标类型(ObjectType)相当于目标设计语言中类(Class)的概念,其定义结构由以下几部分组成:基本数据,接口界面,键(KeyFields),方法(Methods),特征(Attributes),事件(Events)。2).BAPI优点:(1)BAPI是面向对象的设计。(2)BAPI是固定的,一般不能修改。(3)BAPI可以被SAP内部部件和非SAP程序使用。(4)BAPI的成功和错误信息始终通过RETURN返回。(5)BAPI可以被许多开发平台使用。14 武汉理工大学硕士学位论文3).何时应考虑使用BAPI设计程序:(1)用VB/JAVA/C++等语言编写非SAPGUI程序访问和处理SAP数据。(2)SAP不同部件之间通讯。(3)与非SAP程序或者老系统交换数据。(4)使用异步通信分发数据如:ALE.IDoc。(5)可以通过SAPBusinessConnectororInternetApplicationComponents与因特网集成。3.3ALE.IDoc接口技术ALE是ApplicationLinkandEnabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件,ALE技术是分布一集成式的SAP系统实现基础,它包括经系统控制的业务消息交换以及松散连接的SAP系统间的数据一致性管理。在ALE中,系统/应用间的数据集成过程并不是通过共享一个中心数据库,而是通过异步或同步传输(主要是异步)实现的,从而实现了业务分布化(多系统处理不同业务),管理集中化(系统间可共享相同数据)。从技术角度来说,ALE主要应用于两个有业务联系的SAP系统之间的数据同步,但也支持在SAP和非SAP系统间的数据同步的实现。如果用最简单的语言介绍ALE的基本功能,可以认为其主要用于便捷地实现SAP系统/应用问的业务信息和数据复制。数据以业务对象(BO)为实现单元,在系统/应用间通过基于RFC协议的ALE接口,以IDoc格式进行传递,在此过程中,系统将保证数据的完整性【9】。IDoe全称为IntermediateDocument,是SAP进行系统间数据交换的通用的数据交换格式。IDoc中包含数据结构的定义以及数据的处理逻辑。通过IDoc,SAP可以和多种外部系统或应用进行数据交换,包括SAPR2/R3,EDI子系统,其他的外部系统以及ALE或Workflow(T作流)等。IDoe不是SAP系统应用文档(sAPapplicationdocument),而是系统间数据交换过程中的媒介,SAP数据库中的IDoc结构包括一个控制记录、一段或多段数据记录以及一段或多段状态记录【8】:(1)控制记录(controlrecord):也称IDoe头,用于唯一确定一个IDoc。每个IDoe都包含一个控制记录,其中包括IDoc的内容、结构、发送者、接受者等信息。15 武汉理工大学硕士学位论文(2)数据记录(datarecord):包含控制部分和应用部分。其中应用部分包括应用数据段(applicationdatasegment)。每个数据段中都包括一个标准头结构,其中包含数据段序列号、类型、说明和不超过1000个字符的数据段文本。应用部分的数据段中的结构信息来自于控制部分的数据段名称。(3)状态记录(statusrecord):用于记录1Doe从应用到其送达方的当前状态信息。包含了IDoe所经过的状态日志,如“以创建"或“准备发送’’等,是对IDoe进行监控的重要信息。ALE处理流程是基于IDoe实现的,分为出站(outbound)和入站(inbound)两个部分,IDoe处理过程中,数据的流向可以分为向夕b(aP从SAP到外部系统)和内向(即从其他系统到SAP)两种处理流程【10】【ll】。通过ALE发送IDoe的处理流程图如图3.1所示【12】:图3.1ALE发送IDoc过程16 武汉理工大学硕士学位论文发送过程分为4个步骤,首先是启动输出程序,然后ALE输出程序从数据仓库中抽取应用数据(业务数据)生成MasterIDoc文档,MasterIDoc文档只是临时储存在内存当中的。它会调用ALE分发模型由ALEService层来决定分发到那个地方,针对每一个接收者,都会创建一个eommunicationidoc文档.存放在数据库的表当中,通过communication层,然后传送给一个一个接受者,这就是发送端这样处理的一个流程。通过ALE接受IDoe的处理流程如图3.2所示【12】:图3-2ALE接受IDoc过程首先系统从向内的端口中接受到外部系统传来的CommunicationIDoc,这些通信IDoc通过ALE服务层(Servicelayer)/--t:成对应的应用IDoc。再通过向内的ALE程序将应用IDoe写入应用仓库更新数据库表。应用程序从数据仓库中抽取业务数据以视图的形式展示给用户。这就是一个完整的向内处理流程。17 武汉理工大学硕士学位论文从发送端和接受端这两个流程来看,idoc文档在这之间起着一个重要的交流的媒介作用。3.4WebService接口技术3.4.1SAPW.ebService的定义及体系架构WebService是独立的,模块化的,自描述的应用功能模块或服务。它基于XML标准格式,通过使用标准的因特网协议,这些应用功能模块可以被描述,查找,使用或调用。因此每一个WebService都封装了一序列可以使用的功能集。例如,供应商的价格查询,核查库存系统的特定的物料,查找特定的电话号码,或者核对信用卡,转帐,付款等【13】【141。从表面上看,w曲Service就是一个应用程序,它向外界暴露出一个能够通过Web调用的API。从深层次上看,WebService是一种新的Web应用程序分支,它是自包含、自描述、模块化的应用,可以在网络中被描述、发布、查找以及通过网络来调用。WebService是一种基于Web的中间件技术。用户通过把应用程序的一部分包装成Web服务的形式,将自己的应用程序功能提供给别人,实现应用程序之间的接口。采用w曲Service技术进行开发和部署应用程序和业务有许多显著特点,例如:(1)WebService是松散耦合的组件:这一特征源于对象/组件技术,当一个WebService的实现发生变更的时候,调用者是不会感觉到代码的变更,对调用者来说,只要WebService的调用界面不变,WebService的实现变更对他们都是透明的。(2)自描述性和自适应:WebService用XML描述交换信息内容,因此可以保证信息的自描述性和自适应性。WebService用XML语法的Web服务描述语言(WSDL)定义接口、网络连接、服务端点等。而且定义的接口都是业务级的接口,不是底层接口,使处理的数据和处理的逻辑分离,因而使集成更容易、结构更清晰。(3)分布式和位置的无关性:W曲Service采用UDDI注册机制使得业务的分布与地理位置无关。这样就可将非核心业务外包给专门的服务提供商,不 武汉理工犬学硕士学位论文担心服务商的所在地,这样减少了自主开发的成本,同时又保证了产品的自主控制性和自主开发部分的可集成性。(4)基于开放标准:WebService基于开放标准与技术,例如XML技术、SOAP技术、UDDI技术等。这使得组件的集成更容易,解决方案的选择更为多样。图3-3描述了WebService体系结构图11”。醪s⋯erequester⋯ceS⋯provider图3-3Webservice体系结构图其中服务提供者定义Web服务的服务描述并把它发布到服务请求者或服务注册中心,服务请求者使用查找操作来从本地或服务注册中心检索服务描述,然后使用服务描述与服务提供者进行绑定并调用服务实现或同它交互。WebService体系结构中有如下三个角色:(1)服务提供者(Serviceprovider):提供服务的通常被称为服务提供者。主要是定义服务,生成接口文件,并把服务发布到注册中心,并且对使用自身服务的请求进行响应,是托管服务的访问平台。(2)服务请求者(Servicerequester):使用服务的通常被称为服务请求者。服务请求者通过搜索服务注册表,获取服务接13信息,然后根据得到的服务接口信息执行绑定操作,与服务提供者建立联系,运行所需要的WebService。(3)服务注册中·&(Servicer呼s时):服务提供者在此发布服务描述,以便服务请求者可以发现和使用该服务,当然它并不是必须的,服务描述也可咀通过其他方式获得,在静态绑定开发或动态绑定执行期间,服务请求者在服务描述中查找服务并获得服务的绑定信息。对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发给服务请求者。 武汉理工大学硕士学位论文WebService体系结构中的三种操作:(1)发布服务(Publishservice):为了使服务可被访问,需要发布服务描述以使服务请求者可以查找它,为其提供注册或者宣传的功能,是服务提供者和服务注册中心之间的交互。发布服务描述的位置可以根据应用程序的要求而变化。(2)查找服务(Findservice):在查找操作中,服务请求者直接检索服务描述或在服务注册中心中查询所要求的服务类型,对于服务请求者,可能会在两个不同的生命周期阶段中牵涉到查找操作:在设计时,为了程序开发而检索服务的接口描述;而在运行时,为了调用而检索服务的绑定和位置描述。(3)执行服务(Executeservice):查找到服务之后需要调用使用该服务。服务请求者使用服务描述中的绑定细节来定位、联系和调用服务,从而在运行时启动和执行该服务,是服务请求者和服务提供者的交互。执行操作使得WebService能够被服务请求者使用。WebService的体系结构是面向对象分析与设计的一种合理发展。与面向对象系统类似,封装、消息传递、动态绑定、服务描述和查询也是WebService中的基本概念,对传统应用体系结构的设计作了彻底的改变,实现了具体的事物处理信息、服务和具体客户的分离。在传统的系统中,需要确定系统的客户,然后以此为中心进行设计,而在面向服务的体系结构中,对于客户的标准没有严格的定义,而是尽可能地把系统的服务设计得较为灵活,以便在以后不断变化的环境中能够吸引更多的潜在客户。3.4.2SAPWebService关键技术1)XML技术XML(eXtensibleMarkupLanguage,可扩展标记语言)是有W3C(WorldWideWebConsortium,互联网联合组织1于1998年2月发布的一种标准,是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。与H喇L一样,都是SGML(StandardGeneralizedMarkupLanguage,标准化通用标记语言)。XML是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。它以一种开放的自我描述方式定义数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的 武汉理工大学硕士学位论文关系。目前成为网络信息交换的标准。XML作为一种新的Internet上的数据交换标准,其应用范围从早先的Web信息描述发展到后来的数据交换标准,乃至目前的服务集成和服务交互的开放标准。XML已经成为开放环境下描述数据和描述信息的标准技术。WebService全部规范、技术和架构都是以XML为基础的。对WebService而言,无论是WebService所提供的服务接口、对WebService的请求、WebService的应答数据,SOAP技术,WebService的描述语言WSDL,还是WebService的发现和发布技术即UDDI技术,都是使用XML作为描述和信息交换的标准手段。XML主要特性为【15】:(1)自描述性:XML允许自定义标签,其标签是可扩展的,用户可以自己定义标签来表示自己想要表示的内容和结构。(2)半结构化:与HTML等纯文本文档不能提供任何关于整个文档内容、结构信息不同,XML文档可以通过提供的DTD或是XMLSchema文档来说明文档可能的限制结构。XML的内容是基于Unicode的文本,适于网络传输,不受DBMS、OS、W曲服务器以及编程语言的限制。(3)机器可处理性:XML文档的规则性和语义表述特性使得计算机很容易理解并处理XML文档,同样,人们编写和阅读XML文档也相对容易。(4)可扩展性:文档通过DTD或XMLSchema来定义文档结构,使其它信息系统自动了解文档的内容。(5)多样的样式表支持:XML把数据内容与它们的表现形式分开。这样既可以只关心数据的逻辑结构,也可以通过样式表来格式化数据的表现,甚至可以定义自己的个人样式表来显示各种不同的XML数据。(6)广泛的支持:XML得到了众多软件商,例如微软、Oracle、SUN、IBM等几乎所有大公司的支持。这样大的软件商以及开发出了各种版本(如Java版或C++版等)的类库,因而可以最大限度地保证XML应用程序的健壮性。XML已成为WWw上采用的信息表示、交换和存储的重要手段。自推出以来,迅速得到软件开发商的支持和程序开发人员的喜爱,显示出强大的生命力。21)SOAP技术【16】【17】SOAP(SimpleObjectAccessProtocol,简单对象访问协议)是WebService的通信协议,是一种简单的、轻量级的基于XML的机制,用于在Web应用程序2l 武汉理工大学硕十学位论文之间进行结构化数据交换。SOAP规范包括三个部分:(1)SOAP封装(envelop):封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架。(2)SOAP编码规贝tJ(encodingrules):它定义了一种系列化的机制,用于表示应用程序需要使用的数据类型的实例。(3)SOAPRPC表示(Representation):它定义了一个用于表示远端过程调用和响应的约定,例如,如何使用HrrP或SMTP协议与SOAP绑定,如何传输过程调用,在具体传输协议的哪个部分传输过程响应等。SOAP消息完全基于XML,它包含以下三个部分:(1)信封(Envelope元素):它表示SOAP消息的顶级元素,它是必需的。它包含两个元素:报头(Header)和报体(Body)。(2)报头(Header元素):报头是可选的,它是一种用来向SOAP消息添加额外特性的通用机制。通过这种机制,应用程序可以以特定的方式对SOAP消息进行扩充。(3)报体(Body元素):报体是必需的,它的元素中包含发送给终端目标节点的信息。SOAP消息是一种从一个发送者到一个接受者的单向传输,消息经常结合起来实现请求/响应通信,所有的SOAP消息都是XML文档。可以在不同的底层协议的上层传输,一般我们使用标准Internet协议HTTP,这样可以与现有通信技术尽可能的兼容。使用HTTP协议作为SOAP的传输层协议有很多好处:其一,由于HTTP协议是目前广泛使用的Internet传输协议,所以把它作为传输协议,SOAP可以被迅速的接受和使用;其二,H'[TP协议是无连接的协议,因此它具有很强的扩展性;其三,HTrP协议可以穿过防火墙,这样不用对目前的防火墙软件进行修改就可以直接使用SOAP协议。从某种意义上讲,SOAP可以简单理解为soAP爿心C+|ITTP+)洲L:采用HTTP作为底层通信协议,RPC作为一致性的调用途径,XML作为数据传送的格式。其工作机理为,不管客户端用的是什么平台,不管应用系统用的是什么样的程序语言,首先把请求转换成基于XML形式的SOAP封包(包含了调用方法的名称、参数名称和类型以及返回结果等),然后通过底层的传送通信协议HTTP发送给服务器;如果客户端要求,服务器将返回一个HTTP应答信息给客户端。SOAP定义了服务请求者和服务提供者之间的消息协议,实现了Web服务之间的消息交换,使得服务请 武汉理工大学硕十学位论文求者能以面向对象的方式执行服务提供者的远端方法。SOAP的特点在于它和厂商无关,其本身并不定义任何编程模型或特定语义实现,并且相对于平台、操作系统、目标模型和变成语言而言是独立的,完全继承了XML的开放性和可扩展性,使用基于TCP/m的应用协议HTTP、SMTP、FTP等,可以与现有通信技术最大程度地兼容。3)WSDL技术【18】WSDL(WebServiceDefinitionLanguage,webService描述语言)表示WebService的说明语言。WSDL文件是一个XML文档,用于把WebServices描述成一组操作消息的语言,不管这些消息是面向文档还是面向过程的。最终用户在使用由服务提供者发布的WebService的时候,都是通过WSDL来理解其内容及调用格式的。由于它采用了XML的格式,所以WSDL可以方便地被各种符合XML标准的解释器所理解。WSDL是定义如何利用XML语法描述WebService的规范。它通过在服务提供者和服务请求者之间交换的消息来描述WebService,可被看作是WebService和外界沟通的桥梁。一般WebService都带有WSDL文档,指定应用程序提供的WebService信息,WSDL文档描述了调用WebService所需的一些关键信息:WebService服务的名称、WebService的获取地址(一般是一个HTTPURL地址)、可供调用的方法以及每个方法的输入输出参数类型。WSDL完整描述了WebService各个方面的元素,包括WebService所在的位置、使用的传输协议、其中包含的接口、接口中的方法以及方法的参数类型等。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将起绑定到具体传输协议和消息格式上,以最终定义具体部署的WebService访问地址。WebService正是通过采用WSDL对外提供接口的逻辑描述,让外界了解它提供的服务以及如何使用这些服务,并提供WSDL和实现层之间的绑定以便服务请求者能够通过WSDL调用真正的实现程序代码。这种机制让不同的系统只需要关心对方的WSDL即可,而不需要知道对方是不是适合自己使用相同的程序语言或是开发工具开发的,也不需要担心对方是否和自己兼容,从而摆脱了平台和开发工具的约束。4)UDDI技术f19】当一个WebService设计完成,直至最终的部署之后,下一步就要考虑如何发布WebService了,以使感兴趣客户能够轻松发现WebService并将其集成到 武汉理工大学硕士学位论文自己的系统中,基于统一描述、发现与集成(UDDD协议的注册系统,就是为了让企业更好的发现WebService而设计的系统。UDDI(UniversalDescription,DiscoveryandIntegration,通用描述,发现及整合)是一种目录服务,它提供了一个全局的、公共的、基于XML的在线商业注册,通过它,企业可以注册并宣传它们自己的WebService,也可以搜索使用其他企业注册的WebService。从概念上来说,UDDI商业注册所提供的信息包含三个部分:白页、黄页和绿页。白页包含了企业的地址、联系方法和已知的企业标识;黄页包含了基于标识分类法的行业类别;绿页则包括了关于该企业所提供的WebService的技术信息。因此,通过UDDI,人们可以发布和发现有关某个公司及其WebService的信息,并可以根据标准分类来查询信息。24 武汉理工大学硕士学位论文第4章SAP接口技术具体的实现RFC接口是SAP最基本的接口技术,是一种系统间的通讯方式。可以从一个SAP系统通过RFC远程登陆到另一个SAP系统,在配置传输系统、配置SolutionManager的时候用得较多。而BAPI、ALE.IDoc、WebService这些更高层的接口都是基于RFC的。在使用这些接口的时候都会用到RFC技术。BAPI接口是位于RFC协议的上层,是SAP提供的基于业务对象的函数,它直接处理SAP的业务对象,当在外部调用BAPI的时候,可以把SAP里的诸如系统用户、物料、订单等作为一个对象处理,使用很方便。在批量导入数据、外部系统调用操作SAP时使用较多。ALE.IDoc接口是一种分布.集成式的SAP系统实现技术,一般在同一个企业中不同的SAP系统之间进行数据交换时使用。往往不需要编写代码,对系统做正确的配置即可实现该接口技术,在企业的实际实施中使用不多。WebService接口具有完全的平台无关性、语言无关性,其主要的目标就是要在现有的各种异构平台的基础上构建一个通用的、与平台和语言无关的技术层,各种不同平台之上的应用依靠这个技术层来实施彼此间的连接和集成,得到业界的肯定和广泛支持。能够很好的解决大型企业内各个异构系统的集成问题,具有很大的潜力。本章结合企业信息化建设的实际经验,对SAP提供的RFC、BAPI、ALE.IDoc、WebService几个主要的接口技术做实例研究,并给去了核心代码和测试结果。4.1SAPBAPI接口客户化实现4.1.1需求分析在企业SAP上线切换的时候,往往有大量的实际业务数据要进入到SAP系统。这些庞大的数据往往数以万计,甚至百万计。业务数据的成功导入是保证系统成功上线的重要因素之一,这些重要的数据如何传输至SAP系统是众多 武汉理工大学硕士学位论文企业面临的问题。SAP系统中的业务数据可以通过用户手工输入或者利用系统工具批量传输,手工输入通常适用于少量的数据,而对于大批量的数据,就需要考虑利用批量传输的方法了。某企业在系统上线前,需要分别在培训系统、生产系统中一次性创建6000个系统用户。字段包含系统用户名(或员工工号)、性别、中文名称、部门、房间号、电话、电子邮件等信息。4.1.2熟悉对应的SAP业务对象在使用批量传输业务数据之前,首先要了解传输的业务对象,可以参照原始系统中的数据通过在线事务在开发系统中创建一些测试数据。通过与相关的业务人员沟通和手工创建可以了解下述信息:(1)应用数据创建的事务代码。例如创建系统用户的事务代码为SU01。(2)事务中的屏幕字段名称,类型和长度等。例如系统用户名的字段名称为BNAME,类型为char型,长度为12。(3)那些屏幕字段是必须的,那些屏幕字段不需要输入值。例如在创建系统用户时系统用户名字段(BNAME)是必输字段。部f-](DEPARTMENT)可以不输入值。(4)那些字段含系统默认值。例如有些字段在你没有输入值的时候并不为空,而是有一个系统默认值。(5)SAP系统将进行那些一致性检查。例如El令在输入非法字符的时候将报错。通过对上述的分析可以确定SAP系统中要求的字段和已经准备的数据字段的对应关系。SAP中要求的字段在已经准备的数据字段中是否全部存在,是否需要在源数据文件中补充新的字段。4.1.3确定数据的传输方法与业务人员沟通以及手工模拟创建是调研熟悉的过程,是了解数据业务对象的过程,该步骤结束之后需要确定的是数据批量传输的具体方法。(1)对于极少量的数据,如果通过手工的方法可以很快的完成,则无需通过数据传输项目自动批量的传输。这时如果采用批量传输的方法可能会耗费更多的 武汉理工大学碗士学位论文工作量。(2)SAP作为一个相对完普的系统,每个应用中一般都包含标准的数据传输程序和BAPI。可以选择这些标准数据传输程序或BAPI进行数据传输,这些标准数据传输程序或BAP腰求所输入的数据具有特定的格式。(3)SAP标准数据传输程序支持不同数据传输的实现技术,包括直接输入,批输入以及调用事务等。还可以在SAP数据传输工作台或旧系统工作迁移台的支持下完成数据传输。如果一个业务对象同时支持多种传输技术,那么还需要选择具体的实现技术。(4)SAP是一个定制性系统.用户可以对各个进行灵话的调整。如果有些事务确实没有用于完成数据传输的SAP标准数据传输接口。则可以开发新的数据传输程序来完成这一功能。通常使用SAP事务录制工具记录事务,然后创建定制的批输入程序。在业务对象库中可以找到创建系统用户的BAPI,而且实现起来不难,BAPI处理的速度也很快。因此确定采用BAPI接口技术。4.1.4准备数据源文件数据源文件中的数据来自于企业其他信息系统或通过员工手工收集,用户需要根据SAP中要求的格式对其分析、整理。一般将其整理成一个或多个文本文件(.衄t文件)或Excel文件(xls/xlsx文件)。如下图所示为需要传输到sAP的源系统用户数据,将起储存在已经定义好的Excel模板中。如图斗1所示:图如1SAP系统用户数据源模板 武汉理工人学硕士学位论文4.15技术实现使用事务代码BAPI打开BAPI浏览器。并且在业务对象库中找到适合自己的BAPI,例如打开USER(系统用户)业务对象,可以看到下面的创建(Create)、修改(Change)、删除(DcleIc)、呈现(Display)等方法””。如图4_2所示。⋯5№-口∞Ⅲ㈣jK∞唧㈣⋯l:0;,o_q固ooe目∞∞∞口“∞固固圆圆BAPIExplole7图圈四.岿矗c’‘.一俩啊k蔚㈣㈣档瓣辩觥目㈣】ojY口口口7№Ⅱ州eui址●话i黼■丽■墨_■l&~0D目moTrm⋯日oTrOt日¨¨月Pbu≈m‘一Dt^“口蛳“哪㈣45^btⅫ口ano№Dto—R肛帅rr鼬H口』口Ⅱ』Ⅱ^皿b漕j高i耻n“即懈ⅡmⅡiE^Ⅱ}d㈨o'D叫wt””。Ⅻ“”。‘9'Emm“Ⅻ_¨p二Ⅻ目I!mnimI/(1)(2)(3)(4)圈4—2SAPBAPI浏览器其中:Create方法:创建一个系统用户。Ch锄ge方法:更改一个已经存在的系统用户数据Delete方法:删除系统用户。DispIay方法:显示系统用户数据。找到方法对应的功能模块,创建用户Create方法的功能模块为BAPI_oSER_CREATEe在上图中找到BAPIjJSEP,._CREATE并双击,如图4.3所示。 武汉理工大学硕士学位论文。脚嗍髀靶炒凹!唧唧帮凹卿口).汕。已yo自q岫1000J口岫∞jooooI四四to霍FuncUonBuJldew:DisplayBAPI_USEm—CREATEL:_|U;剧|___|囤回【到LL_圄刚蚓冒U鲴1型例止!!一{蚓L到L型L型U匣————C舢t帅m岫B"I_Ⅱ口L日n口删”导』蝴翻圈L盈■■睡啊墨矗暖蠢姐』商_●豳啦圈_-_■_2I:⋯一~⋯一⋯⋯E’’£一h.fj⋯”:·。n。E⋯“r·。⋯㈣⋯~a⋯n^。⋯⋯‘“z⋯0⋯⋯⋯,⋯、j⋯,-⋯《一⋯.9⋯⋯⋯⋯%’5)L⋯⋯s一⋯⋯j能t-⋯n⋯3⋯㈣⋯:s⋯⋯Jj·’⋯⋯t㈣⋯口⋯⋯一*⋯0㈨Ⅱ-㈣⋯s⋯一⋯⋯0№H’%%m0∞j⋯⋯⋯⋯㈣j10m|-⋯⋯⋯⋯joP⋯t}+一㈨㈣⋯m⋯一∞⋯|,‘⋯ln^5pi⋯p1%£^。’0⋯。1v ’一瑚sEli#^⋯懈⋯⋯⋯*1m毗*,’⋯&‘i“t㈣㈣-⋯⋯^㈣S_¨£_⋯Ⅱ)}i⋯5*;⋯P⋯-‘H⋯⋯㈨nr2⋯⋯1R⋯Ⅻ一⋯~#,⋯’⋯⋯口1=*m二r‘∞e⋯t㈣⋯’{z0Pi:m№I·IIIII4ILU-∞0目m■呻10nIl/图4.3创建系统用户的函数模块BAPIUSERCREATE在该创建用户的功能模块中,定义了属性,参数接口和具体的实现代码。该界面中各个选项卡意义如下:Attrbute:用于设定功能模块的类型,名称等通用属性。Import:用于定义输入参数,即从程序中传递到功能模块中的参数。Export:用于定义输出参数,即从功能模块中传递到程序的参数。Changing:用于定义输入输出参数。Tables:用于定义内表参数,可以将内表数据对象整体输入或者输出Exceptions:用于定义可能出现的异常。例如在某个功能模块运行时,可能除数为0的情况,就应该预先定义该异常,以提高程序的健壮性。根据业务需求确定需要用到的字段(输入参数1如表4_1所示: 武汉理T大学硕士学位论文表4.1需求字段统计在功能模块中对应用途说明是否字段名称英文名中文名字段属性的字段必输BNAMEUser用户Char12USERNA^肥SAP系统用户名足TITLE_MBDITide标题Char30ADDRESS—TITLE—P先生/女士否NAME_LASTLastnalne姓Char40address-lastname用户中文名是DEPARTMBNTDepartment部门char40address—department用户部门否R00删_CRoomNumber房间号char10address—ROOM—N0一P用户的房问号否TELNUMBERTelephone电话char30address—tell_numbr用户电话否SMTP_ADDRE.MailE-Mailchar241address—e_mai1用户电了邮件否NEWCODEpassword口令Char40PASSWORD—BAPIPWD系统用户密码是需要输出的参数为劬lnl-typ“返回类型),return-message(返回消息)。如表4.2所示。表4.2返回字段统计”字段名称字段属性字段含义用途说明return—typeCharl消息类型S成功,E错误,w警告,I信息,A中断return—messageChar220消息文本返『口1模块执行的结果方案描述如下:1).业务描述:根据需求提供标准模板,模板中,要求将源数据一次传输至系统2).技术解决方案:应用BAPI接口技术,ALV报表显示传输的结果。3).系统实现流程图:如图44所示。源数据(系统用户数据)储存在标准将模板源数据传输到系统,并以 武汉理工大学硕士学位论文选取数据源文件上I将源数据上传至内表0l格式转换到另一个内表F书0将处理结果储存到另一张内表0}用ALV报表显示处理结果图4.4实现流程图钔.部分核心程序代码如下【21以5】:(1)通过选择屏幕选取模板源数据。selection.SCTee21beginofblockblolwithframetitletext.001.parameters:p_fnamelikerlgrap—filenameobligatory.selection-screenendofblockblo1.(2)读取数据到内表【261。formfrmuploaddata.clearitfileupload.refreshitfileupload.callfunctioniALSMEXCELToINTERNALTIABLE’exportingfilename=Pfnameibegincol=1ibegin10W=4iendcol=8iendrow=30000tablesintern=itfileuploadexceptionsinconsistentparameters=1uploadole=2others=3.ifsy-subreNE0.31 武汉理工大学硕士学位论文v_stop=’X’.endif.checkv_stop=space.Endform.(3)转换到另一个内表。formfi'mconvertexcel.1copatitfileupload.caseitfileupload.c01.when1.watabdata-username=itfileupload.value.when2.watabdata-titleP=itfileupload.value.when3.watabdata-lastname=itfileupload.value.when4.wa=一._tabdata-department itfileuploadvaluewhen5.watabdata-roomnoP=itfileupload.value.when6.watabdata-tellnumbr=itfileupload-value.when7.watabdata-email=itfileupload.value.when8.watabdata-pwd=itfileupload.value.endcase.atendofrow.translatewatabdata-usernametouppercase."将特性名称转换成大写appendwatabdatatoittabdata.clear:watabdata.endat.endloop.endform.(4)处理数据。formprocessdata.1copatittabdataintowatabdata.sruselTlame2watabdata-usemame.SI"address.titleP=watabdata-titleP.81"address.1astnarne=watabdata-lastname.ffl"address.department=watabdata-department.sraddress-room110P=watabdata-room110P.sraddress-tellnumbr=watabdata-tellnumbr。sraddress-email=watabdata-email.srpwd—bapipwd=wa_tabdata-pwd.performsava_users.clearwatabdata.elearsrusername.clearsraddress.32 clearsr__pwd—bapipwd.endloop.endfonn.(5)调用BAPI接口【明。formsava—users.callfunction’BAlPIUSERCREATE’exportingUSaTlam@。st—useTnRmelogondam=sr_logodatapassword2sr_pwdaddress=sr—addresstablesreturn2re—tab.data:llastidtypei.describetableretablinesllastid.readtablere—tabindex1一lastidintowa_msgtab.clearretab[].ifwa_msgtab—type2’S’.num2=hum2+1.else.numl=numl+1.endif.gtmain-type2wa_msgtab-type·gt_main-message2wa_msgtab-message·gt_main-usemame2sr—usemame-gt_main-title__p=sr_address—title__p.gt_main-lasmame。sr—address‘lastname.gtmain-department=sr._address。department·gt_main-roomno__p2st_address-room_nop·gt_rnain-tell_numbr=sr—address-tell_numbr.gt_main-ernml=sr—address—emml.gt_main-pwd2srpwd-bapipwd.appendgtmain.clear醇main.endform.(6)以ALV报表显示导入结梨28】performoutput_data.5).批量传输的测试结果如4-5所示。33 武汉理r大学硕十学位论文I≯u⋯⋯’冀嚣暑。甜僦。。。。。。。每口”巴y*月BAPZ|比置“n月P驾圆圈幽-幽圃图璺圈崮崮刚国驾调用BAPIf安-口批量传输系统用户结果记录§&簇.嚣一⋯^l⋯i⋯⋯⋯i■it口⋯l口々iⅢa㈣a㈣㈣1_nⅢⅧ一⋯~⋯¨—Ⅲa㈣■m自㈣Ⅻ⋯u~⋯ILws㈣ma㈣■㈣㈣㈣n⋯∞⋯一¨—%a⋯㈣⋯⋯⋯一⋯¨a㈣㈣㈣m㈣⋯“~⋯一ij自自1m赫槭]7图4-5批量传输结果记录下面进入系统抽取部分用户验证是否创建无误,如图4—6所示挚,熙“%魁裂黜涨⋯。:。#:∥ii月,囝璺㈣⋯LWo州∞L⋯o哟.∞∞ll3T”!哪毋#J曩L曲蛳k鲻群嗽gd嘲纽凛醚僦鞠酗哪漓乳辫醐∞d俩薯嘲栅tt;}了q“㈣lq⋯∞Iq图46抽取部分源数据检验到系统逐一检查发现,用户批量创建达到预期的效果。 武汉理工人学硕士学位论文使用8API接口的难点是从业务对象库中找到合适的BAPl函数,并且正确使用。SAP提供的标准BAPI函数往往有很多输入参数、输出参数以及表参数.如何调用它们以及需要注意那些地方SAP并没有附带说明,这也是SAPBAPIN前不足的地方,相信在以后的SAP版奉中会得到完善,所以即使找到了合适的BAPI.在使用之前要还需搞清楚自己需要用到那些参数,还要将自己使用到的这些参数与SAP系统中的屏幕字段诈确的对应起来。这些工作往往需要程序开发人员经过不断的羽4试去了解熟悉。测试没有问题后才能在程序中去使用这些BAPI接口函数。4.2SAP与Java程序的接口实现技术SAPJC“SAPJavaConnector).即SAPJava连接器,是SAP组件和Java应用程序之间的中『自J件和接口实现机制。JCo基于JNI(JavaNativeInterface)建立在RFC协议基础之上,支持SAP服务器端的入站(Java调用SAP)及出站(SAP调用Java)数据通信。JCo实现细节:ABAB和SAPJCo之间的数据传输通过RFC实现,即应用CPI—C协议的网关传输。具体包含下述几个层次:启动Java应用程序之后,Java方法将通过JCoJavaApl转发给中间件接口,再发送至RFC中间件,其中通过JNI层将方法转换为RFC调用,并发送至SAP系统。同样的方法,可以反向使用,将RFC调用发送至Java应用程序。图4.7描述了SAPJava连接器的结构情况。固4—7SAPJava连接器(SAPJavaConnector) 武汉理工大学硕士学位论文Servlet是Java开发Web程序的一个重要组件,应用在网页互动上,它是在Web服务器端执行的Java应用程序,用于响应客户机的请求。在默认的情况下,Scrvlct会采用一种无状态的请求一响应处理方式。Servlet会将处理的结果以HTML的形式返回,在客户端形成动态网页。Servlet是一个中间层,负责连接来自Web浏览器或其他HTTP客户端程序的请求和HTTP服务器上的数据库或应用程序。Servlet更加关注业务逻辑的实现,它可以处理客户端的应用程序请求,可以认为Servlet增强了Web服务器的功能。Servlet具有良好的可移植性,安全性,高效性等特点,使得它被广泛地应用到JavaWeb开发中。Tomcat是Apache组织的产品,Sun公司对该服务器有很好的支持,它是Sun公司推荐的Servlet和JSP容器。它运行稳定,性能可靠,是开发中小企业软件的最佳选择,因此收到越来越多的软件公司和开发人员的喜爱。对于开发人员,Tomcat服务器是执行Servlet和JSP的一个很好的选择。本节在Eclipse中使用Servlet技术,实现Java程序和SAP接口的的无缝连接。验证了SAP系统与非SAP系统的接口技术。本节同时还用到了JCO技术和上一节的BAPI技术。客户端程序到SAP系统的RFC连接建立好后,即可以向SAP发送并接受从SAP系统中返回的数据。在SAP系统远程功能模块或业务对象的BAPI中,输入输出参数以基本类型字段,结构体或内表的形式出现,在客户端程序中可以接受数据并进行处理。一般步骤如下【2¨4】:(1)类导入:importcom.sap.mw.jco.IFunctionTemplate;importvA)m.sap.mw.jeo.IRepository;importc,om.sap.mw.jco.JCO;(2)建立连接:对于Jeo客户端程序,有两种方法可以建立与SAP服务器的连接,分别是直接连接和通过连接池进行连接。其差别在于,打开直接连接后可以一直保持;连接池则是在需要时才建立连接,连接暂不需要时,将被释放回连接池,并可分配给其他用户。两种连接方法分别如下:通过连接池连接如下:JCO.addClientPool( 武汉理工大学硕士学位论文SID,5,”550”.”liuyang”,”liuyan9123”,”ZH”,”10.88.3.134”,’’00”);直接连接如下:JCO.createClient(”550","liuyang”,”liuyan9123”,”ZH”,"10.88.3.134”,”00”);//连接池名称//连接数上限∥SAP集团//SAP系统用户名//SAP系统用户密码∥登陆语言(ZH代表中文1//应用服务器的口地址//系统编号∥SAP集团//SAP系统用户名∥SAP系统用户密码//登陆语言(ZH代表中文)∥应用服务器的口地址//系统编号(3)通过Jco仓库访问SAPRFM:连接建立后,通过Jco仓库(JcoRepository)的Jco.Repository类,可以实现对SAP中BAPI或RFM的调用。SAPJCo可以访问所有RFM元数据,这些元数据将在运行时从SAP服务器中动态,实时地获得。该过程使用到的类和接口如下:JCO.Repository:包含RFM的运行元数据(metadata)。1FunctionTemplate:包含特定的RFM的元数据JCO.Function:代表一个RFM以及所有的相关参数。JCO.ParameterList:包含特定的JCO功能模块的输入,输出以及表参数。JCO.Stnlcturc:包含特定的结构(参数)JCO.Table:包含特定的表(参数)(4)创建JCo仓库:IRcpositoryrepository,repository=JCO.createRepository("MYRcpository",SID);IFunctionTernplateFtemplate2repository.getFunctionTemplate(”BAPIUSER_GET_DETAIL");(5)向功能模块中传入参数:37 武汉理工大学硕士学位论文JcOFunctionfunction=newJCOFunction(ftemplate);JCOParameterListinput=function.getlmportparameterList0;inputsetValue(user,“USERNAME”);(6)执行功能模块:JCOClientclient=JCOgetClient(SlD);client.execute(function);(7)得到执行后的返回值:JCOTabletelep=functiongetTableParameterListogetTable(”ADDTEL”);JCOTableaddsmtp=functiongetTableParameterListOgetTable(”ADDSMTP“);JCOS'ffuctttreaddressl=funetiongetExportParameterList0.getSlracture("ADDRESS“);nanlo=addressIgetStdng(”LASTNAME”1:department=addressl.getS一ng(”DEPARTMENT”)’(8)异常处理:当出现异常时,用到的相关的JCO类如下:JCOExcepfion:JCo异常处理基类。JCOConversionExeepion:JCo格式转换错误子类。JCO.AbapExeeption:JCoRFM调用时通过ABAP代码抛出的异常子类。添加SAP系统用户的部分Java核心代码见附录一,测试情况如图4-8所示。图4-8添加SAP系统用户输入用户信息,点击提交。得到创建成功信息,如图4_9所示 武汉理工大学硕士学位论文图4.9添加结果反馈也可以登陆系统查看验证,如图4-10所示。≥?嫂一攀矬裂掰湍⋯。,。=⋯∥Ei月P囝凰&■n㈣Ⅲ⋯2009”∞{o:5‘.175m*#J.越:■■■g矗Hgoi《酝■E“i目k■■■%《《a∞鳞目日目∞畦岫_|Ⅲm,*|&z饥舶*“1%∞13∞2M————————。同。蛔自tIq_¨一}q|~m∞i*1w⋯一一目Ⅷ日Ⅲ,m图4_10验证该用户 武汉理工人学硕士学位论文可以看到通过外部Java系统成功添加了一条系统用户数据。下面测试查找功能。查找SAP系统用户的部分Java核心代码见附录二。输入要查找的系统用户名,即可将其详细信息从SAP系统中取出,如图4一11所示。@⋯mm。ⅢⅢm⋯⋯⋯*t/Ul*r。Eq-t^pt。e蝴m^≈{14l·j_Ho嘧'Ⅲ∞∞·,I^t】·”你要查找的用户信息月PID⋯zli月P##·自膊*n:珊#^目B月eⅢ日月P自☆15810313652自}《#一1g⋯Epn⋯n巳圈rⅢⅫm_i*■一图4.11查找结果下面测试删除功能。删除SAP系统用户的部分Java核心代码见附录三。点击删除按钮后,可得到下面删除用户后SAP返回的信息,如图4—12所示。o-#nq舢ⅢⅢg⋯⋯汕一hv⋯p’』$㈣P目i叭一_H‘⋯ⅢmⅢ·’删除SAP系统片{户■*月Pil⋯《目*■3口自*e‘BH‰目月P⋯埔自勺4n目HE☆目*Ⅲ。sⅢ目镕e。oⅢ镕m目P一瞄自彗赫z*#E自目*Ⅲs《目∞t月P⋯城B■#—iW_ri自m1■m一圈4—12删除系统用户后的反馈结果 武汉理工大学硕士学位论文此时登陆SAP系统查看用户zliuyang确实不存在。如图4-13所示。图4.13验证该用户是否删除说明该用户已经从SAP系统中成功删除。SAPJCo技术往往和SAPBAPI接口技术结合使用,外部java程序可以通过JCo直接操作SAP的BAPI接口函数,就如同SAP的ABAP调用BAPI接口函数一样方便。4.3ALE.IDoc接口实现技术ALE.IDoe技术可以便捷地实现SAP系统问业务信息和数据的复制。数据以业务对象为实现单元,在系统间通过基于RFC协议的ALE接口,以IDoe格式进行传递,在此过程中,一个SAP系统的指定的数据将完全根据用户预先的配置扩散分发到另一个SAP系统中。本节将完整地介绍一个ALE数据分布的配置及实现过程,一个物料主数据将从一个源SAP系统发送至另外一个SAP目标系统。具体实现步骤如下f3"8】:(1)分别为源SAP系统和目标SAP系统的相关集团定义逻辑系统。通过事务代码:BD54定义创建逻辑系统,如图4-14所示。图4—14在源SAP系统中定义逻辑集团名称然后通过Tcode:SCC4将定义的逻辑系统SENDER500分派给总部集团500,如图4—15所示。41 武汉理工大学硕七学位论文图4_15将逻辑集团名称分配给具体的源集团同样在武汉分公司的接受系统中也要定义逻辑集团,如图4—16所示。囤416在目标SAP系统中定义逻辑集团名称将定义的逻辑系统RECEIVE700分派给接受集团700.如图4—17所示。图4—17将逻辑集团名称分配给具体的目标集团(2)在源SAP系统中创建RFC连接至目标SAP系统,同样要在目标SAP系统中创建RFC连接到源SAP系统.如图418所示。!!!目刨u!!!到u!堕到凰⋯o”⋯~~ⅫiiiiF——自∞⋯⋯⋯Em⋯m∞~3㈣5日!!!№/^自iⅫii7一——iⅫ■㈣owo№⋯∞m~00⋯■/¨H㈣月⋯⋯∞图418在源集团中定义到目标集团的RFC连接 武汉理工大学硕士学位论文测试连接:如图4lg所示。I^m“lR鼬lA∞15一lnm■O日1一l⋯dmm2“Ml⋯∞m2一㈧∞m2一图4—19测试连接(3)分别在双方系统中创建端口指向对方系统。即在源SAP系统中创建端口指向目标SAP系统.并在目标SAP系统中创建端口指向源SAP系统。在发送系统中通过事务代码WE21创建端口指向接受系统receive700,如图4—20所示。l。”eat∞smmM訾:巴ylojqg00e0嘴∞·妇吐面缸,回国,@儡Po[t*inIoocprocessing回囝回回圆圈圄圄圈M^000000002。口时b脚帅嘶■口m自&£**伍“宙叫9白T日髓d∞■RK自Ⅸgnj盈#口☆自#女i*E口m7∞口啦Vm,口(pIfO‰㈣s"№h∞3∞i口^咖“口)札Fie@㈣d%㈣4.x口胍mTP日n『“—t。】【·l—bⅫB】;∞m,,图4-20在源集团中定义端口指向目标集团在接受系统中创建端口指向发送系统SenderS00,如图4-21所示。 武汉理工大学硕士学位论文冀剪哟*卿肿”8幽,oBq日00Qi日∞∞I钮船D妇I团口I喝PoltsinIDocp[ocessing囡圈囤回圆圈圈回国F忡1D%口qmht·nn⋯n^n19口P∞b盘∞■帅*口镕自&*i#Ⅷrd日9叫90n一☆■*&自∞∞OⅡ■口镕^#Ⅸ*#∞rd日3∞口FloVmSbq,7口cPI‘0I眦r《H∞5s舻Rd∞∞3o/31L]舶舻H0口)*rE刊“∞ss∞R■}强4x口mm口mHn’Ⅷ_Ⅲ1111[D田RKbmdum1s日D日ⅫⅫW‰⋯⋯ⅢIm-Ⅻ日I㈣协国4-21在目标集团中定义端口指向源集团在源系统中将目标系统定义为伙伴系统,并为其维护伙伴参数,如图4—22所示。图4—22定义伙伴参数 武汉理上大学硕+学位论文(4)在源系统中的创建分布模型并将其分发到目标系统。如图4—23和图4-24所示:图4—23创建分布模型视图图4—24向分稚模型视图中添加消息最后分发,如图4—25所示。!%自9mm∞。”E矿lajo固oo白0睢∞一钮妇。妇囱四嘘LOgofModelviewDishibutlon凰lMgtrihtlm。f_。*№zILⅡⅡ}TⅡg⋯yst㈣In700I。dcl¨tILnⅡ㈨⋯c^tcd量团吲。口田L二J⋯一,}Ⅻ目ⅫI№『7图4-25分布模型分发成功日志(5)在目标系统中根据分布模型为源系统创建伙伴参数,如图4—26所示。 武汉理工大学硕士学位论文%一。q%№∞璺【∞蚺—竺!盛yo自日日ooe0∞留noooI固qlPsitBerprofiles:znboundpatterers盟附口”蜘.i羽啉500日划蝴h呐sp辨”时i怕Ls哪dHn帅髓惰R^§“∞o”1ⅡIⅡ’M㈣№mm№蜘∞虹【口m—t£。t』■■■■●u癌蕊搿冀霹盈衄瞳■嘲“叫嘲嘲■∞;mⅧ心mTHAS㈣口日c删RⅨ时日^fh目恤日“:_】口Fh蝴州Ⅳ∞舯1@Tr日oermnb∞岫,【Ⅻ日s^啪9№Ip图4-26维护目标系统的伙伴参数(6)在发送系统中创建物料主数据并发送该物料主数据。在发送系统中利用事务代码MM01创建一物料:ZMMMATERIAL,如图4—27所示。。孥“譬嚣器哉⋯⋯。。。.茹8可{蔓司D“playHatedal孤H,●^T眦l删n口舢·m'J目■■■■■■L●£■●■■一㈣a*』mm~%~目E⋯__"H—9¨..型!!!!坚.,鼬删粤*一——一她生—一一黛目魄。~—上I一女自jgn“qm..一J_e㈣·zj*”Mm⋯;;i㈣i⋯jj÷mq口HHh_呻目∞‘MⅫ~n%i》面目iin;鬲]芽图4-27在源集团中创建一测试物料 武汉理工大学硕士学位论文并在接受系统中通过查看确认没有该物料。在发送系统中使用Tcode:BDl0发送该物科,如图4-28所示。I。∞mn∞m!#”。岜吵lo:aq日i00蠹’昼∞∞obD∞『圈%sendHjbrIIll囤羁。~珊_“Ⅻ“b圈}啦m~\曼亍⋯!女!i二@L口⋯“&牌j』I№㈣m“MF一∞E出国,一一一日一图4-28在源集团中发送该物料下面的两个图分gⅡ在分发过程中系统生成的主IDoc和通信IDoc日志,生成的主lDoc提示如图4-29所示。图4-29生成主lDocs生成的通信IDoc系统提示如图4—30所示。国4—30生成通讯IDoc(s) 武汉理工大学硕士学位论文(7)通过№02查看IDoc状态,如图4—3l所示。l幽!!!『陲磊;===工==]|霹竽一一三i一谓l-o*一⋯l·一mgll1。o黻罄=:盟1。嚣=81‘1ll目“㈣ⅫⅢ一rH一||”?3;紫=三。l,豁翟籀≯ll47。g⋯⋯。“一⋯一1.墨—嚣⋯I}4。警~⋯m—|,一~:=■”⋯J兰i云娄兰兰_-III萝节—司i||99l三三塑型鳖-!兰”!⋯:”1蛆在接受端查看IDoc状态,如图4-32所示。备””~券。:。。。。。。:。。。。。。。。。一田园s^’m自“_⋯~目。o誉=篇甲0—2№90”■om⋯∞∞o⋯129§巍基黧篓一mI●%H㈣908⋯⋯⋯m⋯⋯I’。§~d~⋯一Mgm’og⋯⋯⋯“”⋯”一c⋯-一Ⅱ∞恤■埘⋯Ⅲt⋯⋯⋯●1⋯●It⋯“⋯S_X田_r————————砷口u●“⋯Ⅲ⋯⋯I⋯,圈4—32在目标集团中查看IDoc状态(8)最后检查目标系统中的该物料是否存在。通过事务代码:MM03在接受系统中可以看到接受的物料 武汉理工大学硕士学位论文ZMMMATERIAL,如图4-33所示。。M“#∞目一m$”:臣y口々4日ooojD∞∞}oo口。目口on圃DlsplavHj⋯a『ZMM_MATERnL(rraa⋯gGood*)囤【!』些型叠!趔堂!!唑JJa■■■-循瞄gⅨl鞘#㈣㈣1‰“‘·MⅢ螬目⋯7⋯o⋯^⋯o~⋯∞~a№‘自~⋯^a”⋯~一j、f,~y’⋯Mng⋯¨№"~m口~*倒帅缸”7爿㈣200wm㈣”■。j*目’%wJ∞I图4—33在目标集团中查看该物料存在这样就完成了从总部到分公司物料的分发同步的过程。ALE—IDoc技术常常应用于同一个企业两个不同的SAP系统之间数据的同步分发,一般不涉及到编程,将系统按要求配置既可。4.4SAPWebService接口实现技术WebService是基于XML通过一系列标准和协议来保证程序之间的动态连接。XML语言本身就是跨平台、跨语言的数据表示方法,在加上通用的mlt等协议,使得WebServices天生就适用于基于异构平台的应用。如果你的客户端包含了各种不同的平台,例如,你希望你的服务即可以被JAVA程序所调用,又可以由VB和COM程序所调用。你有两种选择:一种是为不同的平台提供相应的API,还要为不同的语言提供API;如果提供WebServices,所有平台和语言都可以调用了。EAI(企业应用集成)是目前WebServices应用最看好的方向之一。大多数 武汉理工大学硕士学位论文企业内部都有着各种各样的应用系统,它们是在不同的领导在任期间,由不同的软件开发商开发,因此运行在不同的平台和系统上,系统的开发语言也各不相同。由于现代企业信息自动化要求的提高,各个系统之间的互动和相互通讯便提到日程上。因此,保护原有投资,重用遗留系统是当前很多中大型企业的重要任务。由于遗留系统的运行平台是异构环境,因此企业应用集成的代价一般来说是很高的。但如果使用WebServices作为应用集成的手段,将会大大降低集成的消耗。WebServices与平台和语言无关的特性,以及各种平台和环境下的开发工具都是企业应用集成的利器。另外,在开发新的应用系统的时候,仍然需要考虑和其他系统的集成,需要考虑调用其他系统的功能,和被其他系统所调用。使用WebServices作为系统与外部交流的接口,能够使新的系统和别的系统之间保持松耦合的关系,保持较高的可扩展性。在SAPNetweaver7.0SPl4及以上的版本的SAP系统中创建WebService系统会自动生成相应的WSDL文档。可以直接供内部或外部程序调用【3蝴】。实现一个完整的WebService一般包括以下步骤:(1)WebService提供者设计实现WebService,并将调试无误后的WebService通过W曲服务中介者发布,并在UDDI注册中心注册;(2)WebService请求者向WebService中介者请求特定的服务,中介者根据请求条件查询UDDI注册中心,为请求者寻找满足请求的服务;(3)服务被找到后,WebService服务中介者向WebService请求者返回满足条件的WebService描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读。(4)服务请求者利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给WebService提供者,以实现WebService的调用;(5)WebService提供者按SOAP消息执行相应的WebService,并将服务结果换回给WebService请求者。4.4.1创建SAPWebService在SAP开发环境中,可以根据已经存在的RFM、功能组、BAPI创建WebService。下面为了直观手工创建一个取出系统用户信息的函数模块。 武汉理工大学硕士学位论文(1)首先创建功能组(FunctionGroup),ZFG001功能组是一种ABAP程序,是功能模块的容器。二者之间的关系类似于普通ABAP程序和其中定义的一些子程序的关系。通过事务代码:SE37进入功能模块创建界面,选择系统菜单Goto.>FunctionGroups一>Creategroup。创建功能组:ZFG001,如图4.34所示。图4-34创建功能组(2)创建FunctionModule:ZFM001功能模块(FunctionModule)是目前SAP系统之间最为常用的系统组件,它是独立的R/3仓库对象,也是一种过程模块,可以由ABAP应用程序进行外部调用。功能模块基本思想与子程序类似,但具有更为广泛的适用性,需要在功能组中进行开发和维护。每一个功能模块在系统中都是唯一的,因而在调用时无需指定其隶属的功能组。功能组ZFG001创建好后,即可在该功能组下创建功能模块ZFM001。在创建功能模块之前,首先创建结构:ZPERSONAL结构。如图4_35所示:5l 武汉理工大学硕士学檀论文f巳Ⅲ。。口⋯%@㈣9m*。4。叠0,矗剐4日Ioo■B岫∞;自乜Do西四o■Dlc廿⋯rv:Maintain女eructureUU型蹦酗·斟山崮J崮罾LI鲴j埋型删凼型地!!坠J№ii讯Im№№~”女9№÷it“o《■口m日●●■■■●■J目■自■■E硼4■■■■■■■■■_团船阍凰画圃罔团丌磊磊齐高]i/5Ikmo—Itnt∞∞4Htt啊bml佃L。砷b时“H啪∞∞b蛳I肚Ⅱ城口血JⅢ山口蝇¨o呲一L轴nⅡm口Ⅱm口∞“u40o∞~l自∞I口m口血j∞皿¨o^om口■∞m州m脯L阻Ⅲ口nⅡmmⅧR㈧t“mm.m—l阻m.^Dn口ⅡⅢm㈨241㈨闩:DE_·”Ju-卿日Ⅲ目蝴JM{,图4—35创建用户信息结构然后创建功能模块ZFMOOl,如图4—36所示。图4—36创建功能模块 武投理上大学硕士学位论文Sourcecode标签的内容如图437所示。。㈣m目~‰∞j㈣Ⅻm⋯匕矿盘一划q目000昼岫舶I铂乜oo}固四{o叠FUnCUONBuilder:ChangeZFM001UU幽Ul堕|回d山刨K-t削国U刨】斟剧【!塑叫哑塑皇叫也堂业堕苎旦型堂!塑JRJ—nDd^口i00L^c帅赫帮酾窝毯獬矗镬鞠霹晡两鞲餮黧籀藤孙皤鞲蓐麓■矗晨■_⋯⋯一⋯⋯⋯21一p⋯⋯‘一⋯⋯⋯ro,⋯r21m⋯高c⋯z一⋯rO目,el⋯sINGLED一⋯⋯⋯!一⋯1⋯f£p一⋯cJ⋯⋯⋯一⋯£一r3ELECT⋯⋯1”trROE⋯⋯⋯u—n⋯cv⋯”⋯⋯⋯⋯⋯r5eI⋯咖Ied⋯⋯⋯⋯r⋯1⋯i⋯⋯1n∞£p⋯⋯一into“卸r‘』2Ⅱ£-zD一。吐LInt。⋯⋯,。p⋯⋯Lin£ouGEl.⋯r‘⋯p⋯⋯·:P一⋯⋯1⋯1⋯1⋯dr⋯a“6i一=p一⋯I一⋯跳L⋯⋯⋯⋯⋯⋯r^IⅢp—m⋯‘tp⋯⋯‘=⋯z口HL—tJ倒j15∞目。Ⅲ抽lmI/图4—37维护Sourcecode标签内容创建好后檄活点击F8可以输入模拟数据测试运行可得到预期的结果。即输入用户名运行后可将系统用户的姓名,部门,房『8J号,电话和电子邮件一一取出。(3)创建sAPWebser慨:ZSD001WebScn,i∞可以在SAP集成开发工具中,在WebServi∞CreationW谊azd辅助下创建。下面根据已经存在的RFM即ZFM001创建WebService。如图4-38所示。 武汉理工大学硕士学位论文图4—38创建SAPWebService创建好后用事务代码:SES0进入查看刚刚基于ZFM001定义的WebSorvJce:ZSD001,如图4-39所示。⋯m№m一‘,“n~⋯E2ye§q日ioo●【jj∞∞∞oOoi自∞o■DisplaySelviceD札lHonZSDOO,.囤口l圈口圃j曰口,圈冒凰|衄■№_t一qrn■■。m£∞lJ^月∞口蛐口。情‘。。。⋯Jo。‘。。一-㈨自m目‰b一Bial口l∞i,i■⋯,岫嘶HhD口-h7女一l—1’11一ⅧⅢ一VⅪr吡。一2u㈨j.山“’■a札t—Ta圃固受囤画90m女jⅢM——。№ⅢJ”T ⋯⋯J‘w7口删awt帅oRMH¨毋90~r一钿“01&』一’04舢5锄6~9口R,咖№№_㈣^t●9自h^血L⋯L⋯Im9口en『啮自r“90~Dmt‰目日[===E!Z==圈口日5⋯rT,■==zmmi6:l⋯瑁一㈣⋯/图4-39查看生成的WebSorvice 武汉理工大学硕十学位论文也可以点击WSDL标签查看生成的WSDL描述文档。4.4.2外部调用测试soapui提供一个工具通过soap/http来检查、调用,实现WebService的功能,负载/符合性测试。该工具既可作为一个桌面应用软件使用,也可利用插件集成到Eel岫se,netbeans中使用。,利用该工具可以方便快速的验证、测试WebService;同时可以作为WebService性能测试工具。(1)请求消息:ZUSER5</Zuser></urn:Zfm001></soapenv:Body></soapenv:Envelope>(2)可得到如下调用后响应消息的XML流出流:澳g试用户5</NarneLast>部门5</DepartMent>房问号5</Roomnumber>15810813665q1HNumber>user5@126.com</Smtf’Addr></ZpersonalInfo></nO:Zfm001Response.></soap-env:Body></soap—env:Envelope>得到预期的结果。说明外部调用SAPWebService成功。 武汉理工大学硕士学位论文4.4.3内部调用测试要在SAP系统中调用该WebService服务,需要创建服务消费者(ServiceConsume),即服务请求者,如图4舶所示。图4_40创建服务消费者创建好ClientProxies以及创建好逻辑端口ZLP001后。即可创建ABAP程序调用了,调用SAP的WebService的ABAP源代码见附录四。运行后如图4_41所示: 武汉理工大学砸士学位论文‰n一粤呗肇!。8出,Q目q日foool嘱abapi序■mSAPWebSelvlce接口捌斌曲a口程序*用&盯Tcbs州c弗口滔试1f娃g:测试用户5电话哥日:8108l136651自}“#⋯∞126cⅡER 团En⋯⋯旧一}|5∞目JⅢ目埔r{腊Il彳图4-41调用WebService结果显示调用成功,得到预期的结果。WebService的主要目标就是在现有的各种异构平台的基础上构筑一个通用的与平台无关、语言无关的技术层,各种不同平台之上的应用依靠这个技术层来实施彼此的连接和集成,完成不同程序之间的信息交互。WebService创建好后,对外提供一个WSDL自描述文档,内外部程序通过该WSDL文档就可以调用该WebSelwi∞了。一旦WebService得到更加广泛的应用,使得各种服务可阻动态查找和定位,这样就提供了不同设备之间各种各样的信息交互方式,将会大大改变商业运作的模式和信息交流的风格。通过WebService,企业可以将别人成熟的功能集成到自己平台中来为自己提供更好的服务。大家都知道Oooede的强大搜索功能,利用WebService,可以方便在企业自己的系统中嵌入使用G∞皿q而不论系统运行在什么平台上,就可以使Ooogle搜素引擎成为自己系统的一部分。Webse哪∞使自己站在别人的肩膀上,当然要看得更远些。WebScrvico的最大特点是具有真正意义上的平台独立性和语言独立性。EAI是实现企业内部和企业之间信息共享的最有效途径。基于webService技术的EAl集成方案。可以方便地实现已有系统、新开发的WebService应用等各种系统的集成,必将广泛的应用于电子商务、电子政务等领域中。WebService正处在发展和成长阶段,有许多问题需要解决。随着企业需求的日趋激烈以及Intemet的进一步发展,这一技术将会越来越成熟。WebService无论对于企业内部的应用集成还是企业闻的应用集成都将是一个明智的选择。 武汉理工大学硕士学位论文5.1本文总结第5章总结与展望随着信息化建设的深入以及各种信息化项目的开展,信息化在社会和企业发展中发挥着越来越重要的作用,已经成为我国各类型企业提高竞争力的有效武器。SAP系统作为世界上领先的相对开放的ERP管理信息系统,给企业带来了先进的管理思想,但其高度客户化也导致了系统整合的难度,随着SAP系统与外围系统的无缝开发需求市场的不断增加,如何集成的问题越来越明显。为了满足客户的需要,SAP系统提供了丰富的接口技术和开发平台,用户可以通过这些接口技术实现SAP与外围系统的接口开发,由于不同的接口技术有着不同的实现难度和应用范围,如何根据不同的业务需求选择适合的接口技术显得非常重要,企业需要从自身的实际出发,选择适合自己的接口技术。本文首先对SAP系统作出了一个总体的介绍,然后详细的介绍了SAP提供的主要接口技术:RFC、BAPI、ALE.IDoe、SAPWebService接口技术。为企业内部SAP系统与其他应用系统的集成以及企业间信息交互提供了很好的指导方案。本文正是基于此开展研究工作的,主要工作总结如下:(1)首先从总体上分析了SAP体系架构,硬件平台,集团策略,业务模块,这些内容对SAP本身的理解以及对后续的接口研究起很好的铺垫作用。(2)然后分析了SAP最基本的接口技术.RFC接口技术,因为其他的更高层的接口技术,都是基于RFC接口技术的。接着引入了SAPBAPI技术和ALE.IDoc接口技术,之后重点详细研究了SAPWebService接口技术。(3)最后通过四个实例对SAP接口做出了很好验证,实例一通过调用SAP标准的BAPI接口技术实现了SAP系统用户主数据的批量传输。实例二通过JCo技术实现了非SAP系统与SAP系统的接口技术;实例三通过ALE.IDoe技术实现了两个SAP系统之间物料主数据的同步;实例四通过内外调用成功验证了SAP的WebService技术。58 武汉理工大学硕士学位论文5.2进一步的研究展望SAP系统是知识的集合体,由于内在的复杂性,企业在实施之前一般很少有可供参考和考察的成功接口实例,即使有成功的先例,这些接口整合技术一般都掌握在工业软件商或实施商手中,出于商业保密的目的,这些软件商或实施商一般不会将接口资料公开,即使公开也是将其中极少数资料公开或者仅在有限的范围内公开,外界很难获得该项技术或产品的详细信息,这就为研究系统之间的接口技术带来了相当大的困难,接口的研究方法和实践结合也比较困难,加之笔者学术水平、企业实践经验、以及时间和精力的限制。因此本研究只是以规范分析和定性分析为主,辅之以实证分析和必要的定量分析。所以,在研究思路和方法上还有进一步的改进余地,笔者在今后的学习工作和实践中将做更深入的探索和更具体的研究。59 武汉理工大学硕士学位论文参考文献[1】黄佳.SAP程序设计.北京:机械工业出版社,2007【2】邵莹.SAP德国造.海南:海南出版社,2002【3】陈希艳.浅谈SAPR/3ERP系统在国内企业的实施与应用.科技广场,2008.06:58--59141ADM325SAPSoftwareLO西sticsforABAP.MaterialNumber:.50087766【5】马磊.分析SAPR/3系统低层组织结构及Transport模块的传输机制和程序应用:【硕士学位论文】.吉林:吉林大学,2005【6】陈岩冰,龙策景,彭丹.SAP系统管理.北京:清华大学出版社,2006【7】黄佳.SAP高级应用开发.北京:人民邮电出版社,2008【8】黄佳.SAP业务数据传输指南.北京:人民邮电出版社,2007【9】BC619ALETechnology.MaterialNumber:50038179[10】BC620SAPIDocInterface(Technology).MaterialNumber:.50034022【ll】BC621SAPIDocInterface(Development).MaterialNumber:50035260【12】http://www.askguoyu.net【13】屠晓云.基于WebService的数据交换设计和实现:【硕士学位论文】.北京:北京化工大学,2007【14】BC416ABAPWebServices.MaterialNumber:.50085035【15】吴家菊,唐定勇,席传裕.基于XML的信息集成研究.计算机工程与设计,2007年lO月,第28卷第20期:5018~5020【16】杨彩,刘晓霞,贾松浩.基于SOAP的异构系统集成的研究与应用.计算机应用与软件,2008年4月,第25卷第4期:79-,,81【17】师群群,刘晓霞,李艾功.WebService中SOAP安全性的研究与实现.信息安全,2008年第24卷第10.3期:58--60【18】李雯,王慧.基于SOA的WSDL服务契约架构设计与实现.福建电脑,2008年第5期:149--155【19】王旭辉,姚世军,焦志勇,韩强.基于UDDI的Web服务发现研究.计算机与现代化,2009年第2期:31--34【20】BC417BAPIDevelopmentforAccessingSAPComponents.MaterialNumber:.50084607【2l】BC401ABAPObjects.Matc目rialNumber:.50054667 武汉理工大学硕士学位论文【22】BC402ABAPProgrammingTechniques.MaterialNumber.50041776【23】BC404ABAPObjects:Object-OrientedProgramminginR/3.MaterialNumber:.50041707【24】BC405TechniquesofListCreation.MaterialNumber:50054942【25】王宏.实战SAP程序开发.北京:电子工业出版社,2006[26】曾春年,刘洋,董爱强.SAP批量导入数据研究.中国科技论文在线.2008【27】郭雷兵,郭文静,樊涛.SAP业务数据批量传输方法应用及客户化实现.北京:中国电力科学研究院电网技术第3l卷增刊2,2007年12月:238.241【28】BC406AdvancedTechniquesofListProcessing。MaterialNumber:50054944[29】BCAl5RemoteFunctionCallsinABAP.MateTialNumber:50054756【30】李鹏.基于SAP的跨组件流程集成与交换技术研究:【硕士学位论文】.成都:电子科技大学,2007【3l】熊秀红.中石化ERP项目中SAPR/3系统的应用研究:【硕士学位论文】.长沙:中南大学,2005【32】CA926DevelopingBApI-EnabledWebApplications们tllJava.MaterialNumber:.50044886【33】朱氰SAPR/3系统与PDMLink系统集成技术研究.科学技术与工程,2007年8月第7卷第16期【341关宇平.SAPR/3系统客户化接口程序的开发方法及实现.计算机系统应用,2007年第2期:47—50【35】吴秋果.SAP应用集成研究:[硕士学位论文】.北京:北京交通大学软件学院,2007【36】唐亮.SAP接口技术研究与开发:【硕士学位论文】.同济大学,2006【37】于渌.基于SAPR/3系统的EDI标准保文格式转换及发送:【硕士学位论文】.吉林:吉林大学,2005【38】赵科杰.异构系统数据整合方法分析一SAPR3系统整合分析:【硕士学位论文】.北京:对外经济贸易大学,2003[39】http://service.sap.corn[40】http://www.sdn.sap.corn【4l】刘佩贤.WebService体系结构和应用研究:【硕士学位论文】.北京:北京化工大学,2008[42】段丽霞,吉国力.基于SAP的中间件研究.开发研究与设计技术.厦fJ:厦门大学,2007[43】戴洁,曹舯,刘强.ERP接口技术的实施.山东理工大学学报(自然科学版),2007年11月第2l卷第6期:67-7061 武汉理工大学硕十学位论文致谢在求学生涯中,有幸考入武汉理工大学信息工程学院攻读硕士学位,并经过三年的努力学习,终于完成了硕士毕业论文。在研究生三年的时间里我收获了很多,那是因为周围的人给了我太多太多,此时我除了心存感激再也不知道说些什么了。在学业即将完成之际,首先要感谢我的研究生导师曾春年教授,在曾老师的关心和谆谆教导下我圆满的完成了学业。曾老师治学严谨,学识源博,品德高尚,平易近人,在我学习期间不仅传授了做学问的秘诀,还传授了做人的准则。同时还培养了我系统清晰的思维能力和严谨的研究方法。这些都使我终生受益。正因为他的栽培使得本论文能够顺利完成。在此谨向曾老师致以诚挚的谢意和崇高的敬意。感谢中国电科院中电普华业务咨询中心各位领导对我的帮助和指导,他们无私的支持,为课题研究提供了条件。感谢在一起实施ERP的领导、同事及关键用户。感谢实验室的梁红老师,她为论文的修改提供许多宝贵的指导和建议。感谢我的父母亲人对我的理解和支持,使我能顺利完成学业。最后,对评审论文的各位专家、学者表示衷心的感谢!刘洋2009年05月于武汉理工大学 武汉理工大学硕士学位论文附录附录一添加SAP系统用户的部分Java源代码StringCONTEN下即伊E_.’text/html;charset=utf-8”;Stringtype=....'message=-I.’;response.setContentType(CONTENTn伸E);request.setCharacterEneoding("utf-8”);//不加会出现乱码Strings_user=request.getParameter(”user”);Strings_username=request.getParameter(”username”);Strings_department=request.getParameter(”department”);Strings_roonmumber=request.getPararneter(”roomnumber”);Strings_telephone=request.getParameter(”telephone”);Strings—Email=request.getParameter(”Email”);doubler=Math.floor(Math.random0宰1111);StringSID="R”竹;PrintWriterout=response.getWriterO;out.println(””);out.println(”添加SAP系统用户</title></head>”);out.println(”<body><center>");out.println(¨<hl>添加SAP系统用户</hlxhr>”);out.println("<tableborder=1>”);Out.println("<够K廿伊系统用户名:</山><td>¨邶叶’’</td></tr>’’);out.println(”<缸I><th>用户姓名:</thxtd>¨+susername+"</td></tr>”);out.println("似nl>部I'1:</th><td>”+s_department+”</td></tr>”);Out.pdntln(”<trxth>房间号:</thxtd>”+sroomnumber+¨</td></tr>¨);out.println(”<臼≯<t11>电话号码:</thxtd>”+s_telephone+"</td></tr>");Out.println("<缸.><廿】>电子邮件:</thxtd>"+s_Email+”</td></tr>");IRepositoryrepository;try{JCO.addClientPool(SID,5,”300”. 武汉理工大学硕士学位论文”liuyang”,”init1234”,”ZH",¨lO。88.3.134”,”00”);repository=JCO.createRepository(”MYRepository",SID);IFunctionTemplateftemplaterepository.getFunctionTemplate(”BAPI—_USER_CREATE”);JCO.Functionfunction=newJCO.Function(flemplate);JCO.Clientclient=JCO.getClient(SlD);JCO.ParameterListinput=function.getlmportParameterList0;function.getImportParameterList0.getStructure(”ADDRESS”).setValue(s__username,”LASTNAME”);function.getlmportParameterList0.getStrueture(”PASSWORD”).setValue(”init1234”,”BAPIPWD”);function.getlmportParameterList0.getStructure(”ADDRESS¨).setValue(s...department,”DEPARTMENT");function.getlmportParameterList0.getStructure(¨ADDRESS").setValue(s_roomnumber,”ROOM_NO_P”);function.getlmportParameterList0.getStructure(”ADDRESS”).setValue(s_telephone,”TELlNUMBR”);function.getlmportParameterList0.getStructure(”ADDRESS张).setValue(s_Email,"E_MAIL”);haput.setValue(s_user,"USERNAME");client.execute(function);JCO.Tablet__type=function.getTableParameterList0.getTable(¨RETURN¨);for(inti-0;i<t_type.getNumRows0;i++){t_type.setRow(i);type2t_type.getString(¨TYPE”);message=t_type.getString(”MESSAGE”);out.println(”<trxth>返回类型:</thxtd>"+type+¨</td></tr>¨);out.println("<trxth>返回消息:蛐><td>竹+message+’’</td></tr>");))catch(ExceptionE){ 武汉理工大学硕+学位论文System.out.println(E);附录二查找SAP系统用户的部分Java源代码Stringname=¨”,∥用户姓名department=-””,∥用户部门roomnumber="”,//用户房间号telephone="”,//电话email=””;//电子邮件Stringuser=request.getParameter("user”);∥系统登陆用户名doubler=Math.floor(Math.random()+I111);StringSID=”R”+f;response.setContentType(CONTD盯ⅣPE);PrintWriterout=response.getWriterO;IRepositoryrepository;,try{JCO.addClientPool(SID,//连接池名称5。∥连接数上限”300".∥SAP集团¨liuyang¨,//SAP系统用户名"initl234”。//SAP系统用户密码¨ZH¨,//登陆语言(zH代表中文)¨10.88.3.134¨.//应用服务器的m地址”oo¨∥系统编号);repository=JCO.createRepository(”MYRepository",SID);IFunetionTemplateRemplaterepository.getFunctionTemplate《”BAPLUSER_GET_DETAIL”);JCO.Functionfunction=newJCO.Function(ttemplate);JCO.ParameterListinput=function.getlmportPararneterList0;input.setValue(user,”USERNAME");JCO.Clientclient=JCO.getClient(SID);client.execute(function);JCO.S仃uctureaddress1function.getExportParameterList0.getStructure(”ADDRESS¨);nalrie=addressl.getString(¨LASTNAME¨); 武汉理工大学硕士学位论文department=addressl.getStdn颤”DEPARTMENT”);roomnumber=address1.getString(”ROOM_NO_P”);JCO.Tabletelep=function.getTableParameterList0.getTable(”ADDTEL”);telephone=telep。getString(”TELEPHONE”);JCO.T如Ieaddsmtpfunction.getTableParameterList0.getTable(”ADDSMTP”);email=addsmtp.getString(”E_MAIL”);>catch(ExceptionE){System.out.println(E);>out.println(¨<html>¨);out.println(¨<head><title>SAP系统用户信息</title></head>”);out.println(¨<body><center>”);if(name.equals(”"”{Out.println(”<p>在SAP系统中没有找到该用户”+us叶"唧>”);>else{out.println(¨<centerxhl>你要查找的用户信息</hI><hr></center>¨);out.println("<tableborder=1×h.><tll>用户ID:</th><td>竹十1lse件"</td></tr><tr><th>用户姓名:</thxtd>¨+name+”</td></tr><tr><th>部1"3:</th><td>”+department+¨</td></trxtr><th>房间号:</th><td>”+roomnumber+”</td></trxtr><th>用户电话:</th><td>”+telephone+杆</td></tr><tr><th>电子邮件:拟tI胗竹+email+¨</td></tr></table>¨);)附录三删除SAP系统用户的部分Java源代码 武汉理工大学硕士学位论文Stringtype=null,message-null;response.setContentType(CONT酚盯”俾E);request。setCharacterEncoding(”utf-8”);Stringuser=request.getParameter(”user”);doubler=Math.floor(Math.random0枣1111);StringSID=“R”乜PrintWriterout=response.getWriter0;out.println(”<html>");out.println(”<head><title>删除SAP系统用户</title></head>”);out.println(”<bedy><center>");out.println(”<hl>删除SAP系统用户</h1><hr>");out.println(”<tableborder=1>”);out.println(’’<tr><nl>系统用户:</thxtd>"+uSe什”</td></tr>");IRepositoryrepository;try{JCO.addClientPool(SID,5,”300-I,"liuyang”,”imtl234",’’ZH”,驿10.88.3.134¨,”00¨);repository=JCO.createRepository(”MYRepository",SlD);IFunctionTemplatefiemplaterepository.getFunctionTemplate(”BAPI_USER_DELETE¨);JCo.Functionfunction=newJCO.Function(flemplate);JCO.Clientclient=JCO.getClient(SID);JCO.ParameterListinput=function.getlmportParameterList0;//function.getlmportParameterList0.getStructure(¨ADDRESS”).setValue(susername,"LASTNAME");input。setValue(user,¨USERNAME”);client.execute(。function);JCO.Tabletypel=function.getTableParameterList0.getTable(¨RETURN");for(inti=0;i<typel.getNumRows0;i抖){67 武汉理工大学硕士学位论文typel。setRow(i);type=typel.getString(”TYPE”);message=typel.getString(”MESSAGE”);out。println(’’<胗划h>返回类型:<舳><td>..+typ甘¨</td></tr>”);Out.println(”<仃×n1>返回消息:<以hx,td>’。+message+”</td></tr>。。);)out.printS(”</table>”);)catch(ExceptionE){System.out.println(E);}附录四SAP调用WebService的ABAP源代码REPoRTZWSP001.data:proxytypeREFTOZCOZSD001.inputTYPEZZFM001.outputtypeZZFM001RESPoNSE.PARAMETERS:PusertypeUSR21.BNAME.input-ZUSER=PuseL豫ZCREATEoBJECTPROXYEXPoI汀INGLOGICALPoRTNAME=’ZLP001’."端口CATCHCXAISYSTEMFAUIT.ENDTRY豫rCALLMETHODPROXY->ZFM001”调用方法ZFM001EXPoRTINGINPUT=inputIMPoRTINGoUTPUT=outputCArCHCXAISYSTEMFAUIT.CA=rCHCXAIAPPLICATIoNFAUIT. 武汉理工大学硕士学位论文write:/’姓名:’,/’部门:。,/’房问号:。。/’电话号码:’,/’电子邮件:’,(30)output-zpersonalinfo·name_.1ast,(30)output-zpersonal_info-department,(30)output-zpersonal_info—roomnumber,(30)output—zpersonal_info—telnumber,(30)output-zpersonal_info-smtp_addr.附录五攻读硕士研究生期间发表学术论文情况发表论文情况:【1】曾春年,刘洋,董爱强.SAP批量导入数据研究.世界科技研究与发展:2009 </article> <div class="alert alert-warning" role="alert">...</div> <div class="thumbnail text-center"> <div class="more"> <span>还剩73页未读</span> <p class="go mt10"> <span class="btn btn-default" id="showMore" data-page="1"><i class="fa fa-chevron-down"></i> 继续阅读</span> </p> </div> </div> <div class="thumbnail box-line"> <div class="l1 line"></div> <div class="l2 line"></div> <div class="l3 line"></div> <div class="l4 line"></div> <div class="l5 line"></div> <div class="l6 line"></div> <div id="reader-more"> <p class="title">下载pdf到电脑,查找使用更方便</p> <p class="gray"> pdf的实际排版效果,会与网站的显示效果略有不同!!</p> <p class="download-info"> <span style="font-size: 14px;color: #888888">需要</span> <span style="font-size: 24px;">10</span> <span style="font-size: 14px;padding-right: 20px;color: #888888">金币</span> <a href="javascript:void(null);" onclick="JC.redirect('/pdf/create')" style="color: #cf6a07"> [ 分享pdf获得金币 ] </a> <span class="fcff">4 人已下载</span> </p> <p> <a class="btn btn-danger download buy circle80 fs30" href="javascript:void(null);" data-type="3" data-num="10" data-download="true"><i aria-hidden="true" class="fa fa-yen"> </i> 下载pdf</a> </p> </div> </div> </div> <!--right--> <div class="col-md-3"> <div class="thumbnail"> <h4>pdf贡献者</h4> <div class="ui items"> <div class="item"> <a class="ui tiny image" style="width: 50px;"> <img src="https://static.open-open.com/img/avatar/privary/default.png" width="50"> </a> <div class="content"> <a class="header" href="https://user.open-open.com/u/109539"> 双刀游侠 </a> <div class="description"> <p>贡献于2012-07-13</p> </div> </div> </div> </div> <div> 下载需要 <span style="font-size: 24px;">10</span> <span style="font-size: 14px;padding-right: 20px;color: #888888">金币</span> <a href="javascript:void(null);" onclick="JC.redirect('https://user.open-open.com/pay')" style="color: #cf6a07"> [金币充值 ] </a> <div class="kind-tip">亲,您也可以通过 <a href="javascript:void(0) " onclick="JC.redirect('/pdf/create')">分享原创pdf</a> 来获得金币奖励!</div> </div> </div> <div> <a class="btn btn-block buy btn-danger download" href="javascript:void(null);" data-type="3" data-num="10" data-download="true"><i aria-hidden="true" class="fa fa-yen"></i> 下载pdf</a> </div> <div class="box side-box mt20"> <div class="title"> <h3><i class="fa fa-tags" aria-hidden="true"></i> 关键词</h3> </div> <p class="tags mt10"> <a class="" href="/pdf/tag/sap.html">SAP</a> <a class="" href="/pdf/tag/erp-crm.html">ERP/CRM</a> </p> </div> <div class="ad"> <script>(function() {var s = "_" + Math.random().toString(36).slice(2);document.write('<div id="' + s + '"></div>');(window.slotbydup=window.slotbydup || []).push({id: '4133327', container: s, size: '0,0', display: 'inlay-fix'});})();</script><script src="https://dup.baidustatic.com/js/os.js"></script> </div> <div class="box side-box mt20"> <div class="title"> <h3>相关pdf</h3> </div> <ul> <li class="ellipsis"> <a href="/pdf/48284cc3458c410cb160bdfa502305ec.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  SAP 接口技术研究与实现(硕士学位论文)</a> </li> <li class="ellipsis"> <a href="/pdf/76335318c3a84fe09d942d62ec6e5dd5.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  即时通讯技术系统的研究与实现(硕士学位论文)</a> </li> <li class="ellipsis"> <a href="/pdf/f8f3768fcf284d20a78530f8a560b13f.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  中文分词关键技术研究(硕士学位论文)</a> </li> <li class="ellipsis"> <a href="/pdf/705e2a22d3f047ea8383192d810b5f57.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  中文分词关键技术研究(硕士学位论文)</a> </li> <li class="ellipsis"> <a href="/pdf/2bb1d63d39144330866cfa0ec058d03d.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  博士、硕士研究生毕业论文研究与写作</a> </li> <li class="ellipsis"> <a href="/pdf/c48e61507e8248529951e919e9c431bd.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  数字图像边缘检测技术的研究(硕士学位论文)</a> </li> <li class="ellipsis"> <a href="/pdf/2b350af9b5dd4cf6b3a066de848c2193.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  中文全文检索技术研究(硕士论文)</a> </li> <li class="ellipsis"> <a href="/pdf/e28f8f64e4494ffca49fbec807e745d3.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  基于SCA的SOA架构研究与实现(硕士论文)</a> </li> <li class="ellipsis"> <a href="/pdf/4bced27f0fb844778917755ab02093c6.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  LDPc编码的研究与硬件实现(硕士论文)</a> </li> <li class="ellipsis"> <a href="/pdf/a4025141a00540c39ff33b3b59a397c1.html"><i class="fa fa-file-word-o" aria-hidden="true"></i>  蜂群遗传算法的研究(硕士学位论文)</a> </li> </ul> </div> </div> </div> </div> </div> <footer > <div class="container py-5"> <div class="row"> <div class="col-md-3"> <h5>社区</h5> <div class="row"><div class="col-md-6"><a class="text-muted" href="/project/">项目</a></div><div class="col-md-6"><a class="text-muted" href="/solution/">问答</a></div><div class="col-md-6"><a class="text-muted" href="/wenku/">文库</a></div><div class="col-md-6"><a class="text-muted" href="/code/">代码</a></div><div class="col-md-6"><a class="text-muted" href="/lib/">经验</a></div><div class="col-md-6"><a class="text-muted" href="/news/">资讯</a></div></div> <ul class="list-unstyled text-small ut-mt20"><li><a class="text-muted" title=" 安卓开发专栏" target="_blank" href="http://www.open-open.com/lib/list/177">安卓开发专栏</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/tag/开发者周刊" target="_blank" rel="tag">开发者周刊</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/view/open1475497562965.html" target="_blank" rel="tag">Android Studio 使用推荐</a></li><li><a class="text-muted" href="http://www.open-open.com/lib/view/open1475497355674.html" target="_blank" rel="tag">Android开发推荐</a></li></ul> </div> <div class="col-md-3"> <h5>帮助中心</h5> <ul class="list-unstyled text-small"><li><a class="text-muted" href="/upload.html">文档上传须知</a></li></ul> <h5>关于我们</h5> <ul class="list-unstyled text-small"><li><a class="text-muted" href="/about.html">关于深度开源</a></li><li><a class="text-muted" href="/duty.html">免责声明</a></li><li><a class="text-muted" href="/contact.html">联系我们</a></li></ul> </div> <div class="col-md-6 text-center"><img class=center-block src="https://static.open-open.com/img/logo01.svg" width=190px alt="深度开源"><small class="d-block mb-3 text-muted ut-mt40">© 2006-2019 深度开源 —— 开源项目,开源代码,开源文档,开源新闻,开源社区  杭州精创信息技术有限公司  <br/><br/><img src="https://static.open-open.com/img/beian.png"/><a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=33010602002439">  浙公网安备 33010602002439号</a>  <a target="_blank" href="http://www.beian.miit.gov.cn/">浙ICP备09019653号-31</a></small></div> </div> </div> </footer> <div id="fTools"><span id="gotop"> <i class="fa fa-arrow-up" aria-hidden="true"></i> </span><span id="feedback" title="建议反馈"> <i class="fa fa-inbox" aria-hidden="true"></i></span></div> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script type="text/javascript" src="https://static.open-open.com/js/lib.js"></script> <script type="text/javascript" src="https://static.open-open.com/assets/jquery-confirm/jquery-confirm.js?v=4.7.0"></script> <script src="https://static.open-open.com/assets/popper.min.js`"></script> <script src="https://static.open-open.com/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://static.open-open.com/js/base.js?v=2.002"></script> <script type="text/javascript" src="https://static.open-open.com/js/jq-plug.js?v=2.002"></script> <script> $(function () { JC.reminderPop();//弹出用户信息 $(".link-login").click(function(){ JC.lORr('login'); }); $("#topSearch").searchInit(); //用户登录状态 JC.setLogin(false); }); </script> <!-- JavaScript at the bottom for fast page loading --> <!-- end scripts --> </body> </html>