理论教育 使用RFC模型在Web Dynpro中进行远程ABAP系统登录和权限检查

使用RFC模型在Web Dynpro中进行远程ABAP系统登录和权限检查

时间:2023-05-19 理论教育 版权反馈
【摘要】:RFC的功能包含以下几点:●登录并退出远程ABAP系统,并进行权限检查。图3-259 RFC中定义的字段每个功能模块都包含了以下几个页签,见表3-8。图3-262 RFC的逻辑处理1.Web Dynpro与RFC本节主要介绍在Web Dynpro中如何使用RFC类型的模型。图3-269 模糊查询对应RFC8)在弹出的对话框中会显示导入模型所涉及的表、字段和结构等内容,并生成对应的接口类,单击“Finish”按钮完成模型的导入,如图3-270所示。

使用RFC模型在Web Dynpro中进行远程ABAP系统登录和权限检查

RFC(Remote Function Call,远程功能调用)是SAP为了提供其他系统可以调用ABAP功能而提供的一种技术,是SAP ERP与其他系统(包括SAP系统或非SAP系统)间的一种双向接口技术,也是SAP与外部通信的基本协议。RFC是基于是CPI-C(Common Program⁃ming Interface for Communications layer)实现的,在最初RFC创建时,只能被C语言的程序调用,后来为了适应网络时代的变化,也允许Java语言进行访问,而在Web Dynpro中RFC自然也允许其通过企业连接器进行访问。

简单来说RFC的作用是系统调用当前系统外的程序模块,从而实现某个功能,但两个系统中至少有一个必须是基于ABAP应用服务器的系统。当然RFC也可以在ERP系统内被本系统的程序调用,而通常情况下都是为跨系统调用而使用的。

RFC的功能包含以下几点:

●登录并退出远程ABAP系统(在Web Dynpro配置中,导入模型使用的ABAP系统配置不必与实际运行时的ABAP系统保持一致),并进行权限检查。

●调用并管理远程系统会话所需的通信线程

●自动将功能模块中的参数转换成远程系统所需的格式,或反之将远程系统需要的格式转换为SAP中的参数。其中可能包含不同技术平台之间的转换。

●处理通信过程中的错误,如果需要,也可返回报错明细给调用方。

●可以对外声明,负责远程调试的实现。

在SAP ABAP系统中(包括R/3或ECC、BW、PI等系统),登录用户都可以在权限允许的前提下通过SE37事务代码进行功能模块的创建和修改,而只有在属性中将功能模块的类型选择为“Remote-enabled module”才能被外部系统调用,有时非ABAP开发人员会一直无法搜索到对应的RFC名称,很有可能就是因为没有修改它的属性导致的,如图3-258所示。

978-7-111-58177-2-Chapter03-278.jpg

图3-258 RFC的关键属性

以下以测试系统中的ZTEF_001功能模块为例进行简单介绍,登录ECC系统后,输入事务代码“SE37”,随后输入函数名称并单击“Display”按钮,如图3-259所示。

978-7-111-58177-2-Chapter03-279.jpg

图3-259 RFC中定义的字段

每个功能模块都包含了以下几个页签,见表3-8。

3-8 功能模块中的页签说明

978-7-111-58177-2-Chapter03-280.jpg

如果使用过老版本的NWDS,也能看到类似ECC中功能模块配置页的“影子”,其中“Properties”对应着属性页签,“Context”对应着参数页签,“Implementation”对应着源代码页签,而在新版本中,上下文、方法、事件等内容都统一放入了“Properties”属性页签中,Java源代码也独立成为一个Java文件,并可以通过Java编辑器进行修改,如图3-260所示。

978-7-111-58177-2-Chapter03-281.jpg

图3-260 新版本中的标签

下面的示例RFC包含了一个输入参数“I_Name”和一个表参数“T_Pers”,其中“T_Pers”还包含了其他4个字符串类型的参数:ID、NAME、DESC和RESERV,如图3-261所示。

978-7-111-58177-2-Chapter03-282.jpg

图3-261 RFC中的参数定义

它的代码逻辑比较简单,作为测试用例,直接返回员工编号“001”、员工姓名“bluse”和员工描述“bluse name”,如图3-262所示。

978-7-111-58177-2-Chapter03-283.jpg

图3-262 RFC的逻辑处理

1.Web Dynpro与RFC

本节主要介绍在Web Dynpro中如何使用RFC类型的模型。

开发实例:

1)首先创建一个新的Web Dynpro工程,并命名为“mydynp03”,如图3-263所示。

2)随后创建一个组件,并命名为“Dynp03_01Comp”,在创建向导中同时默认创建视图和窗口,如图3-264所示。

978-7-111-58177-2-Chapter03-284.jpg

图3-263 创建新的Web Dynpro项目

978-7-111-58177-2-Chapter03-285.jpg

图3-264 创建新的组件

3)创建组件完毕后,右击“Models”结点,在弹出的快捷菜单中选择创建模型,在随后弹出的对话框中选择第一项“Adaptive RFC 2 Model”,右侧是一些相关的说明,单击“Next”按钮,如图3-265所示。

978-7-111-58177-2-Chapter03-286.jpg

图3-265 选择导入类型

4)输入导入后的模型名称,以及程序运行时使用的服务端配置的逻辑目的地,如图3-266所示。

5)如未配置过导入RFC服务器,则单击图2-266中的“Configure R/3 Destination”进行服务器参数的配置,以便开发工具连接对应的ABAP系统导入RFC模型。在弹出的对话框中单击“Add”按钮,随后选择“Single Server”(一般需要选择“Load Balancing”负载均衡环境进行配置)并输入服务器的必要信息,如图3-267所示。

978-7-111-58177-2-Chapter03-287.jpg

图3-266 输入模型信息

978-7-111-58177-2-Chapter03-288.jpg

图3-267 输入服务器连接信息

6)完成服务器配置后,回到导入模型的向导并单击“Next”按钮,如无法连接配置,则系统会弹出相应的提示信息;如出现搜索对话框,则表示连接成功见图3-268所示。

978-7-111-58177-2-Chapter03-289.jpg

图3-268 搜索RFC对话框

7)输入关键字“ZTE∗_001”,单击“Search”按钮,搜索测试使用的RFC,随后选中需要导入的RFC并单击“Next”按钮,如图3-269所示。

978-7-111-58177-2-Chapter03-290.jpg

图3-269 模糊查询对应RFC

8)在弹出的对话框中会显示导入模型所涉及的表、字段和结构等内容,并生成对应的接口类,单击“Finish”按钮完成模型的导入,如图3-270所示。

9)导入完成后就能在“Models”结点下看到导入成功的模型了,如图3-271所示。

10)导入完成后,首先需要声明对该模型的使用,进入创建的Web Dynpro工程,右击“Used Models”,在弹出的快捷菜单中选择添加之前导入的模型,如图3-272所示。

978-7-111-58177-2-Chapter03-291.jpg

图3-270 导入内容清单

978-7-111-58177-2-Chapter03-292.jpg

图3-271 导入后的模型效果

978-7-111-58177-2-Chapter03-293.jpg

图3-272 添加使用模型

11)选中“FindPersModel”模型,单击“OK”按钮即完成了添加,如图3-273所示。

12)随后右击“Custom Controllers”在弹出的快捷菜单中选择“Apply Template”,自动创建对应的调用方法和上下文,在弹出的对话框中选择“Service Controller”并使用默认名称,单击“Next”按钮,如图3-274所示。

978-7-111-58177-2-Chapter03-294.jpg

图3-273 完成模型添加后的效果

978-7-111-58177-2-Chapter03-295.jpg

图3-274 选择模板类型

13)选中要使用的模型,单击“Next”按钮,如图3-275所示。

978-7-111-58177-2-Chapter03-296.jpg

图3-275 选择对应模型

14)选择创建对应的上下文特性并映射的模型的结构和参数,单击“Finish”按钮,如图3-276所示。

978-7-111-58177-2-Chapter03-297.jpg

图3-276 确认模型中的参数

15)完成自定义控制器的创建后,保存所有修改即可,如图3-277所示。整个过程从导入模型,声明引用,再到创建自定义控制器,Web Dynpro已经将复杂多样的后台服务统一定制为标有固定输入/输出的模型,且通过自定义控制就可以调用接口中的方法并传递参数,在后续的开发过程中,开发人员就不再需要关心接口服务本身,只专注于自定义控制的方法调用以及上下文映射即可。

978-7-111-58177-2-Chapter03-298.jpg

图3-277 创建自定义控制器后的效果

16)同样地,仿照Web Service中视图对服务的调用,编写RFC的调用过程。首先新建“Dynp03_01Comp_02View”视图,接着在组件控制器中添加上下文的映射,最后在视图的控制器中编写赋值请求数据以及解析响应代码。

17)添加视图到组件控制器,再到自定义控制器的引用关系,如图3-278所示。

978-7-111-58177-2-Chapter03-299.jpg

图3-278 添加引用关系

18)完成从组件控制器到自定义控制器的上下文映射,如图3-279所示。

978-7-111-58177-2-Chapter03-300.jpg

图3-279 配置上下文映射

19)完成从视图到组件控制器的上下文映射,如图3-280所示。

978-7-111-58177-2-Chapter03-301.jpg

图3-280 配置上下文映射

20)在组件控制器中添加新的自定义方法“executeFindPer”,如图3-281所示。

21)封装方法逻辑:

978-7-111-58177-2-Chapter03-302.jpg

22)在视图中添加一个按钮,并创建默认的响应事件,如图3-282所示。

978-7-111-58177-2-Chapter03-303.jpg

图3-281 添加自定义方法(www.daowen.com)

978-7-111-58177-2-Chapter03-304.jpg

图3-282 添加按钮

23)响应事件的代码逻辑如下:

wdContext.nodeZtef_001_Input().currentZtef_001_InputElement().setI_Name("王明");//赋值输

//入参数

wdThis.wdGetDynp03_01CompController().executeFindPer();//执行调用服务方法

24)根据映射的上下文返回参数,如图3-283所示。

25)使用应用模板方式创建表格元素,如图3-284所示。

978-7-111-58177-2-Chapter03-305.jpg

图3-283 选择上下文

978-7-111-58177-2-Chapter03-306.jpg

图3-284 创建表格元素后的效果

26)测试运行。创建Dynp03_01Comp_02App,编译、部署并运行,运行效果如图3-285所示。单击“Button”按钮后就能模拟查询动作,列表显示RFC返回结果。

978-7-111-58177-2-Chapter03-307.jpg

图3-285 运行效果

27)编辑后台RFC函数,增加一条返回记录,如图3-286所示。

978-7-111-58177-2-Chapter03-308.jpg

图3-286 RFC代码示例

28)再次单击“Button”按钮,列表更新,如图3-287所示。

978-7-111-58177-2-Chapter03-309.jpg

图3-287 单击“Button”按钮的效果

2.Java与RFC

在脱离Web Dynpro的情况下,在Ja⁃va代码中可以通过SAP提供的JCO连接器进行RFC的调用。Java代码调用RFC有两种方式,一种是引用第三方Jar包,创建RFC连接池并维护代码与RFC之间连接关系,然而这种方式RFC的连接信息和登录信息都未通过服务端配置,维护较为困难;另外一种是引用SAP提供的LIB类库包,通过API调用RFC的方式与Web Dynpro中自定义控制器的调用的方法相似,并且将程序运行时RFC的连接信息通过逻辑目的地配置在服务端维护。前一种方式在网上有很多人分享,本节将对后一种方式的开发过程进行介绍。

更多SAP JCO相关的类库和JAR包资源,可以通过官方链接进行下载:

http://service.sap.com/connectors

通过一个开发实例了解Java调用RFC的整个过程:首先创建一个类库工程并包含SAP JCO连接器的包文件,随后创建一个Java工程并依赖于类库工程,同时在Java工程中完成RFC的调用逻辑,最后创建一个Web Dynpro工程并依赖于Java工程,在视图的按钮中直接调用Java工程方法即可。

开发实例:

1)首先创建一个测试用的Web服务,在NWDS中单击右上角的视图切换按钮,切换到DI透视图,如图3-288所示。

2)右击“MyComponents”自定义的SC目录(黄色结点),选择创建一个“Develop⁃ment Component”,如图3-289所示。

978-7-111-58177-2-Chapter03-310.jpg

图3-288 切换到DI透视图

978-7-111-58177-2-Chapter03-311.jpg

图3-289 创建开发组件

3)在弹出对话框中选择“External Library”(见图3-290),单击“Next”按钮。

4)在弹出的对话框中输入工程名称(见图3-291),单击“Finish”按钮完成类库工程的创建。

978-7-111-58177-2-Chapter03-312.jpg

图3-290 选择项目类型

978-7-111-58177-2-Chapter03-313.jpg

图3-291 输入工程名称

5)工程创建完成后,将“sapjco3.jar”复制到工程的“libraries”目录中,如图3-292所示。

6)继续在DI视图中进行公开声明,选中“mylib01”工程,打开右侧的“Public Parts”标签,右击“Manage Entities”,如图3-293所示。

978-7-111-58177-2-Chapter03-314.jpg

图3-292 添加JAR文件

978-7-111-58177-2-Chapter03-315.jpg

图3-293 管理实体的菜单选择

7)在随后弹出的窗口中选中“sapjco3.jar”完成添加,在archives中也同样添加“sapj⁃co3.jar”的条目(见图3-294),保存所有修改。

8)接着进行Java工程的创建,调用RFC测试。再次右击“MyComponents”自定义的SC目录,选择“Development Component”,如图3-295所示。

978-7-111-58177-2-Chapter03-316.jpg

图3-294 添加后效果

978-7-111-58177-2-Chapter03-317.jpg

图3-295 创建开发组件的菜单选择

9)在弹出对话框中选择“Java”类型(见图3-296),随后单击“Next”按钮。

978-7-111-58177-2-Chapter03-318.jpg

图3-296 选择项目类型

10)在弹出的对话框中输入工程名称“myjav03”(见图3-297),单击“Finish”按钮。

11)继续在DI视图中进行类库工程的依赖,选中“my⁃jav03”工程,打开右侧的“Dependencies”标签,单击“Add”按钮,如图3-298所示。

978-7-111-58177-2-Chapter03-319.jpg

图3-297 输入工程名称

12)在弹出对话框中找到之前创建的“mylib01”工程并选中,如图3-299所示,单击“Finish”按钮。

13)接着进入Java工程,创建RFC调用类“RFCInvoke”,如图3-300所示。

978-7-111-58177-2-Chapter03-320.jpg

图3-298 添加项目依赖

978-7-111-58177-2-Chapter03-321.jpg

图3-299 选择依赖工程

978-7-111-58177-2-Chapter03-322.jpg

图3-300 创建Java类

14)其中调用的参考代码如下:

978-7-111-58177-2-Chapter03-323.jpg

978-7-111-58177-2-Chapter03-324.jpg

15)进入“Public Parts”,将Java工程的类进行公开,如图3-301所示。

16)建立EAR工程依赖并部署Java工程,如图3-302所示。

978-7-111-58177-2-Chapter03-325.jpg

图3-301 添加公共部分

978-7-111-58177-2-Chapter03-326.jpg

图3-302 添加工程依赖

17)选择任意一个测试用的Web Dynpro工程,在依赖中添加对“myjav03”工程的依赖,如图3-303所示。

978-7-111-58177-2-Chapter03-327.jpg

图3-303 添加工程依赖

18)保存所有修改并编译后,在视图中创建一个按钮并创建对应动作,如图3-304所示。

978-7-111-58177-2-Chapter03-328.jpg

图3-304 运行效果

19)在Java编辑器中,添加动作的事件处理器代码,创建“my⁃jav03”对象并调用其方法。

978-7-111-58177-2-Chapter03-329.jpg

20)保存所有修改,并将所有工程部署至服务器端后,即可运行,运行效果如图3-305所示。

21)单击“RFC”按钮后就能得到RFC的返回消息,如图3-306所示。

978-7-111-58177-2-Chapter03-330.jpg

图3-305 运行效果

978-7-111-58177-2-Chapter03-331.jpg

图3-306 单击按钮后的效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈