在本博客系列的第一部分(使用adtsdk在Eclipse中创建ABAP插件)中,大数据是,我描述了一个插件的Eclipse端,该插件只需单击一下就可以创建副本传输。在这一部分中,我将描述插件的ABAP方面。github上提供了插件的完整源代码以及二进制版本和安装说明:ceedee666/adt\u transport\u utils\u plugin·github.
ABAP开发工具通过基于RFC和REST(Representational state transfer–Wikipedia,im即时通讯云,免费百科全书)的协议与后端系统集成。Olga Dolinskajas文档Get Started with the ABAP Development Tools for SAP NetWeaver对集成的高级体系结构进行了描述。
为了能够在此框架中注册新资源,SAP提供了增强点SADT\ U REST\ RFC\应用程序。增强点定义了两个BADI,BADI\u ADT\u DISCOVERY\u PROVIDER和SADT\u REST\u RFC\u APPLICATION。顾名思义,BAdI BAdI\u ADT\u DISCOVERY\u提供者用于实现资源的发现提供者。发现提供程序支持在eclipse插件中发现资源的具体URI。虽然也可以在eclipse插件中硬编码后端资源的URI,但建议改用发现服务。(参见SAP NetWeaver How To Guide:SDK for the ABAP Development Tools)。因此,示例插件的eclipse部分实现了一个getResourceUri()(请参阅本博客第一部分的详细信息)for方法,该方法使用发现提供程序获取后端资源的URI。BAdI SADT\u REST\u RFC\u应用程序用于实现自定义资源。
下图显示了插件ABAP端的体系结构概述。在本博客的剩余部分中,插件的ABAP端将被称为ADT Transport Utils。
RFC处理程序是ABAP开发工具插件的任何请求的后端的中心入口点。RFC处理程序是ADT REST框架的一部分,它使用上面提到的BAdIs调用ADT Transport Utils提供的功能。ADT运输工具由两部分组成。第一部分是一个定制的发现控制器,ADT Transport Utils发现控制器。自定义发现控制器需要提供一个自定义URI模式(即/ztransportutils)来访问ADT Transport Utils提供的资源。在其当前版本中,ADT Transport Utils只提供一个资源,即创建副本传输的资源。此资源由副本传输应用程序和副本传输控制器组成
发现控制器(ZCL\u TRANS\u UTILS\u DISC\u RES\u CONTR)通过创建CL\u ADT\u RES\u App\u BASE的子类并实现抽象方法FILL\u ROUTER和IF\u ADT\u REST\u RFC\u APPLICATION~ GET\u STATIC\u URI\u PATH来实现。下面的代码片段显示了这两个方法的实现。在GET\u STATIC\u URI\u PATH方法中,将返回ADT发现工具的基URI,即/ztransportutils。FILL\u ROUTER方法将类CL\u ADT\u RES\u DISCOVERY注册为路径模板/发现的发现处理程序。因此,对URI/ztransportutils/discovery的任何请求都将由CL\u ADT\u RES\u discovery类处理。
在实现discovery controller之后,下一步是创建BAdI BAdI\u ADT\u REST\u RFC\u应用程序的实现,并将其链接到discovery controller类(ZCL\u TRANS\u UTILS\u DISC\u RES\CONTR)。此外,淘客选品,需要为筛选器静态路径创建筛选器值/ztransportutils/discovery。RFC处理程序使用此筛选器值为特定URI调用正确的BAdI。下面的屏幕截图显示了BAdI BAdI ADT REST RFC应用程序的实现Z\u TRANSPORT UTILS\u DISC\RES和指定的筛选器值。
副本传输资源的实现由两部分组成。传输副本资源应用程序(ZCL\u TRANS\u UTILS\u TOC\u RES\u APP)和传输副本资源控制器(ZCL\u TRANS\u UTILS\u TOC\u RES\u CONTR)。资源应用程序是通过子类化CL\u ADT\u DISC\u RES\u APP\u BASE并实现其抽象方法来实现的。下面的代码片段显示了资源应用程序类的实现。
方法GET\u application\u TITLE在本例中只返回应用程序标题"Discovery Provider for ADT Transport of Copies"。IF\u ADT\u REST\u RFC\u APPLICATION~GET\u STATIC\u URI\u PATH方法返回应用程序的URI路径(即/ztransportutils/toc\u app)。最后,REGISTER\u RESOURCES方法将资源控制器ZCL\u TRANS\u UTILS\u TOC\u RES\u CONTR注册为请求URI/TOC/create\u TOC的处理程序类。因此。可以在URI/ztransportutils/toc\u app/toc/create\u toc访问资源控制器。在注册中还提供了类别模式和类别术语。此信息用于在eclipse插件中发现资源的具体URI(参见使用ADT SDK在eclipse插件中创建ABAP)。
在实现资源应用程序类之后,它用于实现BADI\ ADT\发现\提供者和SADT\ REST\ RFC\应用程序BAdIs。同样,有必要设置适当的过滤器值。BAdI BAdI\u ADT\u DISCOVERY\u PROVIDER的实现Z\u TRANPORT\u UTILS\u TOC\u DISC使用过滤器"/ztransportutils/discover=URI",而BAdI SADT\u REST\u RFC\u应用程序的实现Z\u TRANPORT\u UTILS\u TOC\u RES使用过滤器"STATIC\u URI\u PATH CP/ztransportutils/TOC\u app/*"。
这些过滤器值的结果是可以通过发现控制器发现资源的副本,并且所有对以/ztransportutils/toc\u app/开头的URI的请求都将转发到资源控制器ZCL\u TRANS\u UTILS\u toc\u RES\u CONTR.