ABAP设计模式——适配器
计算机科学中的大多数问题都可以通过增加一层间接性来解决。 ——David Wheeler
适配器模式(Adapter Design Pattern),是一个广泛应用于真实世界和面向对象编程语言的设计模式。基于面向对象的标准SAP程序中同样很多地使用了适配器模式。
适配器是什么?
适配器把因为不同的“接口”而不兼容的对象转换(为兼容的)。通过实现适配器,我们可以让一些原本不能共同工作的类共同工作。
有时,我们有一个客户端,它希望对象只有一个确定的接口。还有一个对象,他能满足功能上的要求,但是两个对象的接口是不同的。因此,我们不能直接通过相同的接口调用现存的对象。所以,我们需要创建一种“包装”来把对象的接口转换为可以被另一个客户端或者对象所接受的接口。
听起来有点耳熟?是的,我们在很多情况下使用这种包装——无论是真实世界还是编程。在真实世界,我们使用通过USB接口工作的Mini SD卡读取器,从而读取数据。在ABAP里面,标准的SAP程序中的大部分BAPI FM会用到它。
适配器的UML
下图是本文的适配器示例的UML图:
有个简单的输出类来实现LIF_OUTPUT。客户端使用接口LIF_OUTPUT来和输出类交互。让我们看看适配器是如何实现的:
- LIF_OUTPUT——客户端只接受使和实现了该接口的对象一起工作。因此,所有的需要和客户端交互的对象必须实现该接口。该组件叫做“Target”.
- TREE_OUTPUT——这是一个没有实现相应接口的对象。但是该对象满足了我们对于生成树的所有需求。该组件叫做“Adaptee”.
- NEW_COMPLEX_OP——这是一个新的对象,扮演实现了LIF_OUTPUT的TREE_OUTPUT的包装者的角色。所以,客户端可以通过同样的接口无缝生成复杂输出(TREE).它叫做“Adapter”.
SALV模型使用了适配器模式来通过SALV的兼容接口来将属性映射到Classical ALV或者ALV Grid的属性上。
代码
使用OO ABAP实现适配器的代码:
REPORTZNP_DP_ADAPTER.*INTERFACElif_output.METHODS: generate_output.ENDINTERFACE. "lif_output*CLASS simple_op DEFINITION.PUBLIC SECTION.INTERFACES: lif_output.ENDCLASS. "simple_op DEFINITION*CLASS simple_op IMPLEMENTATION.METHODlif_output~generate_output.WRITE: / 'Simple Output - just using WRITE'.ENDMETHOD. "lif_output~generate_output ENDCLASS. "simple_op IMPLEMENTATION*CLASS tree_output DEFINITION.PUBLIC SECTION.METHODS: generate_tree.ENDCLASS. "tree_output DEFINITION*CLASS tree_output IMPLEMENTATION.METHODgenerate_tree.WRITE: / 'Creating Tree ... using CL_GUI_ALV_TREE'.ENDMETHOD. "generate_tree ENDCLASS. "tree_output IMPLEMENTATION*CLASS new_complex_op DEFINITION.PUBLIC SECTION.INTERFACES: lif_output.ENDCLASS. "new_complex_op DEFINITION*CLASS new_complex_op IMPLEMENTATION.METHODlif_output~generate_output.DATA: o_tree_op TYPE REF TOtree_output.CREATE OBJECTo_tree_op.
o_tree_op->generate_tree( ).ENDMETHOD. "lif_output~generate_output ENDCLASS. "new_complex_op IMPLEMENTATION*START-OF-SELECTION.DATA: o_op TYPE REF TOlif_output.CREATE OBJECT o_op TYPEsimple_op.
o_op->generate_output( ).*using the same "simple" Interface to perform the "complex",*Since Client only wants to use Simple interface .. CREATE OBJECT o_op TYPEnew_complex_op.
o_op->generate_output( ).
SAP PI入门
本教程的目的是让读者理解:SAP Process Integration(以下简称SAP PI)是什么。我们不需要探究课题的本质,但是会讨论SAP PI的架构和不同特点。本文只会覆盖到PI的基本特点,而不是讨论全部。
本文链接:http://www.cnblogs.com/hhelibeb/p/7105070.html
SAP ERP是什么
对于任何业务——无论是大的还是小的——都会有必须要执行的标准业务功能,比如:物料管理(MM),销售与分销(SD),财务(FI),人力资源(HR)等等。市场上有很多正在为业界所使用的软件。一个简单的例子:如果你前往一个大型零售商店、旅店的下属的小店面,并且它们运行在ERP系统之上的话,收银机器可以经由ERP生成销售发票。
对于绝大多数业务实现来说,企业资源计划(Enterprise Resource Planning,ERP)是一种可以改善生产力和业绩的有效途径。SAP ERP是SAP 公司推出的的企业资源计划,它是一个整合了组织的关键业务功能的集成软件解决方案。基本功能包括:HR,MM,SD,FICO等,在SAP中它们叫做业务模块。SAP把它们构建成产品并且在市场上销售。有两个(或者更多)模块是不直接支持业务功能的,而是用于展现和集成。前者叫做EP(企业门户)后者叫做PI(过程集成)。所有的业务模块都是由ABAP开发的,然而这两个模块却主要由Java开发。这些模块不是可执行文件,而是需要部署在应用服务器上运行。
在我们进入主题之前,需要认识到这些点:
- SAP代表用于数据处理的一些系统、应用、产品。
- SAP AG是一个德国的跨国软件公司,从事于制造管理业务操作和客户关系的企业软件。SAP ERP是该公司推出的企业资源计划,一个整合了组织的关键业务功能的集成软件解决方案。
- SAP NetWeaver Process Intergration(SAP PI)是SAP的企业应用集成(EAI)软件,是NetWeaver产品组的组件,用于帮助公司内部的软件、系统之间的信息交换,以及与外部的信息交换。
遗留系统
当在一个大型的机构中实施SAP的时候,并不是所有部件都可以放在SAP ERP中。其中的很多业务部件有它们自己的专有工具,可能极度复杂、并且无法被替代。它们和SAP系统平行运行。它们叫做“遗留系统”。有必要把这些先前存在的非SAP系统和SAP集成起来,这就是SAP PI出场的地方。
为什么我们需要SAP PI
在大型的机构中,除了遗留系统之外,SAP ERP也不是由一个单一系统组成的,而是集成了多个系统,如CRM,SRM和FICO等。为了处理这种复杂性,SAP引入了PI:一个可以为所有系统提供单一集成点的平台。它不需要接触已有的遗留系统的复杂网络。这是一个可以为SAP和非SAP应用之间、企业内部和内部或者内部和外部之间提供平滑的端对端集成的强大的中间件。SAP PI支持B2B和A2A交换,支持同步和异步消息交换,并且包含了用于设计和执行PI的内建引擎。
SAP PI架构
SAP PI有着轮辐式结构,由中心和辐条组成;辐条连接外部系统,中心会在它们之间交换消息。源系统成为发送者系统,目标系统成为接收者系统。PI不是一个单独的组件,而是很多个可以根据集成场景灵活地一起工作的组件的集合。该架构包含了在设计期间使用的组件、在配置期间使用的组件和在运行期间使用的组件。
我们可以把PI划分为多个领域:
- 集成服务器(Integration Server)
- 集成构建器(Integration Builder)
- 系统规划(System Landscape)
- 配置和监控(Configuration and Monitoring)
集成服务器是SAP PI的中心处理引擎。所有消息都在这里以一致的方式处理。它包含三个独立引擎:
- 集成引擎(Integration Engine)
- 适配器引擎(Adapter Engine)
- 业务处理引擎(Business Process Engine)
集成引擎可以被看做是中心,而适配器引擎则是轮辐。
关于业务处理引擎,本文会晚些解释。
集成构建器是一个用于访问和编辑集成对象的C/S框架,它包含两个相关的工具:
- 企业服务库(Enterprise Service Repository ,ESR)——用于设计和开发在不同场景下使用的对象。
- 集成目录(Integration Directory,ID)——用于配置开发场景的ESR组件。
二者放在一起,就是通常被成为场景的集成过程。
系统规划是数据中心的一个有关软件和系统的信息的中心库,简化了系统规划的管理。
在配置和监控中,可以监控消息和适配器。
单栈与双栈
在PI初次发布的时候,不是所有的组件都是在同一个平台上构建的。集成引擎和业务处理引擎由ABAP构建,然而适配器引擎、集成构建器、SL、CM和Mapping Runtime由Java构建。因此PI需要Java和ABAP环境来运行,这被称为双栈。
ABAP Stack | Java Stack |
|
|
但是在晚些的版本中,所有组件都是由Java构建的。某些双栈组件已经废除,或者在被修改后运行在Java栈。因此PI只需要Java环境来运行。这就是单栈。
(单双栈各有利弊,但是本文不会涉及到相关内容)
集成引擎
集成引擎负责中央集成服务器服务,例如管线步骤:路由和映射。如果源消息结构和目标的消息结构不同,集成引擎调用Mapping Runtime,源结构会被转换成目标结构。Mapping Runtime基于Java栈。集成引擎也可以利用ABAP程序来转换,这个基于ABAP栈。
消息可以是两种类型:
- 同步的——有请求和响应两部分。
- 异步的——只有请求或者响应二者之一。
在PI中,消息由接口表示。
接口:XML格式的消息结构和说明。
基于上面的限制,会有三种接口类型:
- 外向接口——连接发送系统。
- 内向接口——连接接收系统
- 抽象接口——连接BPE。
在PI中为每一个业务需求配置集成逻辑(场景)的时候,集成引擎会以循序渐进的方式执行配置。术语“管线”指的是在处理XML消息的时候执行的所有步骤。管线步骤包含:
- 接收者识别——决定参加消息交换的系统。
- 接口识别——判断应该使用何种接口接受消息。
- 消息分割——如果找到了不止一个接收者,PI会为每一个接收者实例化新的消息。
- 消息映射——把源消息映射为目标消息的格式。
- 技术路由——为消息绑定特定的目标和协议。
- 调用适配器——发送转换过的消息给适配器或者代理。
适配器引擎
你一定已经发现,集成引擎只使用XML-SOAP协议处理消息。但是如果我们有一对发送和接收系统,它们的数据格式是不同的呢?这时我们使用适配器引擎中的不同的适配器来将XML和基于HTTP的消息转换为这些系统需要的指定的协议和格式,或者相反。
如本文早先讨论的那样,SAP PI是轮辐式结构的,其中适配器引擎可以被看作轮辐。我们使用适配器引擎来连接集成引擎(中心)和外部系统。适配器框架基于适配器引擎,适配器框架是基于SAP J2EE Connector Archtiecture(JCA)的。适配器框架提供了用于配置、管理和监控适配器的接口。
在双栈系统中,大多数适配器基于Java栈,只有两个基于ABAP栈:
Java Stack |
RFC adapter, SAP Business Connector adapter, file/FTP adapter, JDBC adapter, JMS adapter, SOAP adapter, Marketplace Adapter, Mail adapter, RNIF adapter, CIDX adapter |
ABAP stack |
IDOC adapter and HTTP adapter |
在SAP PI从双栈变为单栈的时候,这两个适配器成为了Java栈的一部分。修改后的适配器引擎成为高级适配器引擎,两个适配器分别叫做IDOC_AAE和HTTP_AAE。
业务处理引擎
业务处理引擎(Business Process Engine)的职责是执行和持久化集成过程。
BPM代表跨组件业务处理管理(Business Process Management)或者ccBPM,也叫做集成过程。集成过程是指可运行的、跨系统的消息处理。在集成过程中,你可以定义所有需要运行的的处理步骤和相关的过程控制参数。业务处理管理提供了SAP Exchange Infrastructure,包含以下功能:
- 全状态消息处理:集成过程的状态可以在集成服务器上持久化。
- 可以使用相关性建立消息间的语义关系。
- 当你想要定义、控制、监控复杂的集成过程的时候,比如扩展到企业和应用程序边界,即收集/合并、拆分、多播的时候,需要实现集成过程。
在运行期间,BPE执行集成过程。集成过程可以只通过抽象接口发送和接收消息。
在SAP PI中建立场景
如果需要在PI中建立场景(scenario),要从主页开始。
主页界面如下:
主页有以下四个工作区的超链接:
- 企业服务库(ESR)
- 集成目录(ID)
- 系统规划(SL)
- 配置和监控(CM)
每个超链接都可以打开对应的应用。这四个都是Java应用。ESR和ID是swing应用。它们基于JNLP,需要从浏览器启动,所以第一次会花较多的时间来下载整个库文件。但是从第二次开始,加载时间就会变短了。SL和CM是纯web应用,运行在浏览器上。
企业服务库
使用企业服务库设计和创建用于制作场景的对象。PI中的数据流是这样的:
找到以下设计的选项:
- 接口对象——服务接口,消息类型,数据类型。
- 映射对象——操作映射和消息映射。
- 集成过程。
PI使用集成库来为发送者和接收者设计消息结构,并且通过相应的消息结构开发接口消息,接口消息是与外部世界互动的一个点。数据类型和消息类型可以用来对复杂接口进行简化和模块化设计。
操作映射允许源结构和目标结构之间的转换。但是如果源结构和目标结构是相同的,那该过程可能会免于执行。和服务接口类似,消息映射用于简化和木块话复杂的操作映射。消息映射可以通过四种方式进行:
- 图形化映射。
- Java映射
- XSLT映射
- ABAP映射
图形化映射是最常用的手段,因为它允许开发者图形化地映射结构的属性,以通过服务接口传递数据。对于其它三个,需要通过写代码来开发映射。如果是如果是单栈服务器,ABAP映射是不可用的。
(还有些其它方面,本文没有涉及)
集成目录
这里我们通过早先配置的ESR对象来制作管线步骤。这些步骤在运行期间通过集成引擎执行。
在我们开始配置之前,我们需要在DIR创建/导入以下的对象:
- 服务——业务系统/业务服务/集成过程
- 通信通道
服务允许你处理消息的发送者或者接收者。根据你使用这些服务的目的,你可以选择以下的服务类型:
- 业务系统——如果你想要将指定的业务系统作为消息的发送者或者接收者处理,选择该消息类型。在系统规划中,业务系统是真实的应用系统。
- 业务服务——如果你想要将抽象业务实体作为消息的发送者或者接收者处理,选择这个服务类型。业务服务不会再系统规划中定义。
- 集成过程服务——如果你想要将集成过程作为消息的发送者或者接收者处理,选择这个服务类型。在运行期间,这些集成过程由消息控制,他们自己也可以发送消息。
通信通道决定了消息的内向和外向处理。消息会通过适配器从原生格式被转换为soap-xml指定的消息格式,或者相反。通常一个场景中会有两个通信通道:
- 发送者信道。
- 接收者信道。
必须为服务分配一个信道。根据服务被视为消息的发送者或接收者,信道也会有一个发送者/接收者角色,二者必须匹配。不可以把信道分配给集成过程服务。
管线步骤DIR中的通过以下四步配置:
- 发送者协议
- 接收者判定
- 接口判定
- 接收者协议
发送者协议定义了发送者的消息如何转换,因此它可以由集成系统处理。它包含:
- 发送者组件
- 发送者接口
- 发送者信道
发送者协议类似于表中的主键。同一个规划中不可以有两个相同的发送者协议。
接收者协议则定义了消息如何被转换为接收者可以处理的形式。它包含:
- 发送者组件
- 接收者组件
- 接收者接口
- 接收者信道
使用接收者判定来指定消息发送的对象。可以通过定义条件以转发消息,它包括:
- 发送者组件
- 发送者接口
- 接收者组件
接收者判定包含2个类型——标准的和扩展的。使用哪个取决于你想要手工指定接收者、还是在在运行期间通过映射动态地指定。
接收者判定和接口判定——加在一起通常称为逻辑路由。发送者协议和接收者协议——这两个加在一起通常成为合作协议。
系统规划
SAP System Landscape Directory(SLD)是系统规划中的核心信息的提供者。在web页面上你可以发现以下连接:
- 技术系统——技术系统是在你的系统规划中安装的应用系统。
- 业务系统——业务系统是逻辑系统,在PI内作为发送者/接收者存在。业务系统与相关的技术性同有着一对一的依赖关系。
- 产品和组件——这是有关所有SAP产品和组件的信息,包含他们的版本。如果系统规划内有任何第三方产品,它们也会注册在这里。
SLD的界面如下图所示:
产品和组件都可以叫做组件信息。
技术系统和业务系统都叫做规划描述(Landscape Description)。
一个业务系统可以配置为集成服务器或者应用系统。
- 集成服务器(Integration server)——集成服务器只运行在集成构建器中配置的集成逻辑。它们也可以被识别为管线步骤。它接受XML信息、判断接收者、运行映射、路由XML信息到相应的接收者系统。因此配置过的集成引擎被识别为中央配置集成引擎。
- 应用系统(Application system)——应用系统不会执行集成逻辑。它一次调用集成服务器以运行集成逻辑。它会扮演XML消息的发送者或接收者的角色。因此,带有本地集成引擎的应用系统需要集成服务器来执行集成逻辑。
只有一个SAP系统中的客户端可以配置为集成服务器。
以下信息从SLD提取到ESR和DIR中:
- ESR中用到的用于定义产品的组件信息和SWCV。
在目录中用于定义消息发送者和消息接收者的业务系统。
配置和监控
配置和监控是监测的中心入口。它给予了你导航到集成引擎的功能,也可以与计算中心管理系统(Computing Center Management System,CCMS)、SAP的进程监控设施(Process Monitoring Infrastructure,PMI)集成。
配置和监控的界面如下图:
配置和监控支持以下监控功能:
- 组件监控——监控不同的SAP PI组件,包括Java和ABAP部分。
- 消息监控——跟踪SAP PI组件中的消息处理状态,以及错误侦测和分析。
- 端对端监控——从PI的视角监控消息的生命周期。
- 性能监控——可以通过RWW统计SAP PI的不同方面的性能。这里,你可以选择并聚合性能数据,比如,根据组件、时间序列、消息属性等。
- 索引管理——通过管理和监控每个PI组件的消息的索引,可以在消息监视中启用基于索引的消息搜索。这种消息搜索提供了增强的选择标准,包含指定适配器的消息属性和消息载荷中的术语或短语。
- 警报配置——通过使用警报框架,PI中的中心监控可以在消息处理期间获得所有的错误报告。它可以帮助改进ABAP运行期间和基于Java的适配器引擎来改进对错误的处理。为此,警报框架包含了基于确定时间的规则,相关内容处于PI消息协议的头部。这些规则决定了警报是否发送。如果发送了警报,警报可以用于错误分析。
- 警报信箱——警报信箱是用户特定的、显示各个警报服务器中根据警报配置而产生的所有警报。
- 缓存监控器——缓存监控器显示当前运行时缓存中的缓存对象。不同的缓存对象的监控是依据缓存实例进行的。
同步 vs. 异步
处理可以定义为同步或者异步。
- 同步处理通过请求/响应操作调用,处理的结果立刻通过操作返回给调用者。
- 异步处理通过单方向的操作调用,结果和错误会通过另一个单向的操作调用。结果通过回调操作返回。
计算机的世界里没有异步通信,所有的两个系统之间的通信总是通过方法调用进行(请求/响应操作)。所以如何使其异步呢?答案是,在调用者和被调用者之间引入一个第三方的系统。
假设存在两个系统——A和B。A与B之间所有的通信通过一个方法调用来进行,因此他们是同步的。我们在AB间引入一个第三方系统,称其为中间系统I。A和I之间的通信通过方法调用,I和B之间的通信也是通过方法调用进行。但是A和B之间的调用可以是异步的,因为A不需要等待来自B的响应。
这是异步通信的基本原理,那么什么是中间系统呢?答案是队列。A被称为调用者,B被称为接收者。来自于A的消息首先添加到队列中,接着它再次被从队列中拉出,并且发送给B。B的响应通过相同的方式返回给A。在某些情况下,业务需求要求消息按照以A触发的时顺序发送给B,这种情况下可以依据先进先出策略。如果没有这样的需求,则消息会以随机顺序从队列发送至B。
因此可以把消息通信分为三类:
- 同步的
- 异步且无序的
- 异步且有序的
在PI中,我们定义它们为:同步——BE(Best Effort),异步且无序的——EO(Exactly Once),异步且有序的(Exactly Once in Order)。
确认
确认是异步通信的基础,为什么?
对于同步通信,系统A调用系统B时,如果B发送响应失败,处理会失败。但是在异步通信中,系统A调用系统I并且系统I会调用系统B。所以假设A与I之间的通信成功,然而I和B之间的通信失败。A该怎样得知发送到B的过程失败了呢?它通过确认来实现,该确认通过消息从A到B相同的路由方式,反向发送给A。如果从B到A的确认没有成功抵达A,那么A会认为处理失败,并且再次发送消息。
当我们讨论PI中的异步的时候,我们会使用术语 ‘Exactly Once’ 来表示EO和EOIO。Exactly Onc的意思是一旦发送的消息不能再次发送。为了实现这一特性,每一个从A发往B的消息都会有一个确认。通信的终端是适配器,因此适配器必须支持确认。
所有适配器都提供系统确认(system-acknowledgment),比如发送确认。支持同步通信的适配器除了支持系统确认以外还支持应用确认。
所以在PI中存在着以下类型的确认:
- 系统确认——系统确认在运行期间使用,以确认异步消息已抵达接收者。
- 应用确认——应用确认用以确保异步消息成功地被接收者处理。
Remote Function Call
在进行PI工作时,你会接触到名词——RFC。这是什么?为了建立两个SAP系统之间的连接,比如R/3和PI,我们创建了RFC目标。RFC目标需要配置以下内容:
- 连接类型
- 接收者的IP地址和端口
连接类型描述了系统连接的类型,比如R/3,TCP/IP,内部连接等等..
创建的RFC目标可以根据通信类型分类。按照异步或者同步通信可以分为:
- 同步通信——同步RFC
- 异步通信且无顺序——Transactional RFC(tRFC)
- 异步通信且有顺序——Queued RFC(qRFC)
(译者注:此外还有bgRFC)
原文标题:SAP PI for Beginners
有关RFC的介绍:SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC
Fiori缓存与它的清除
最近在修改已有的Fiori应用,遇到了缓存上的一点问题,导致对Fiori应用的代码修改不能在前端页面生效。现将自己查到的一篇好资料翻译过来,以供参考。以下为正文。
2017.12.19更新:最近又遇到个问题,打开某应用时,提示“应用打开失败,请稍后再试(fiori could not open app. try again later)”,可以通过/UI2/INVALIDATE_GLOBAL_CACHES来解决。
我们知道,大部分情况下SAP Fiori安装在本地,使用企业的基础网络设施,经常会遇到网络延迟,特别是在复杂和分布式的场景下。
为了克服这些问题,SAP Fiori拥有以下缓存层:
- SAP后端系统缓存——通常是OData服务相关的缓存
- SAP Netweaver Gateway 缓存——OData服务,BSP应用和Fiori配置缓存
- SAP Fiori客户端/Web浏览器缓存——用户终端设备上的缓存
本文链接:http://www.cnblogs.com/hhelibeb/p/7793730.html
什么情况下我需要清除SAP Fiori缓存?
通常SAP Fiori缓存应该在它的配置、OData服务、Fiori BSP应用和主题发生修改时,或者应用了补丁/SAP notes时清空。在你遇到Fiori应用的陌生问题时,刷新缓存也是一个不错的故障定位方式。
清除缓存的步骤
1,清除后端缓存
为每个后端系统运行事务代码 /IWBEP/CACHE_CLEANUP (SAP ERP, CRM等)。
选择复选框"Cleanup Cache in all models"
2,清除SAP Gateway缓存
2.1 如果某些和主题相关的东西或系统发生了修改,需要重建客户主题、并且清除主题缓存。
- 在SAP Gateway URL中使用你的主题设计器重建主题,URL是:
https://<Your GW Server Host:Port>/sap/bc/theming/theme-designer/
选择客户主题,点击rebuild。
- 通过在你的SAP Gateway系统中运行事务代码 /ui5/theme_tool 来清空Fiori主题缓存。双击[Invalidate Cache]按钮。
2.2 运行事务代码 /IWBEP/CACHE_CLEANUP
选择复选框 "Cleanup Cache in all models"
2.3 运行事务代码 /IWFND/CACHE_CLEANUP (注意和2.2有区别)
2.4 运行以下报表
- /UI2/INVALIDATE_GLOBAL_CACHES - 选择运行模式
- /UI2/CHIP_SYNCHRONIZE_CACHE
- /UI2/DELETE_CACHE_AFTER_IMP
- /UI2/INVALIDATE_CLIENT_CACHES - 选择“所有用户”
- /UI5/UPDATE_CACHEBUSTER
2.5 运行事务代码 SMICM。在菜单选择 转到——HTTP插件——服务器缓存——使全局无效。
3,清除反向代理缓存(如有)
如果有的话,你需要清除反向代理缓存。通常它是 SAP Web Dispatcher,不过也可能是其它的产品。
4,清除客户端缓存
如果SAP UI5 Cache buster的设置正确,是不需要做额外操作的。如果不是正确设置过的话,你才需要手动清除浏览器或者Fiori客户端里的缓存。
参考文章:SAP Fiori – Cache Management
让ABAP开发者更加轻松的若干快捷键
引言
ABAP是一种和当代编程语言在许多方面有着相当不同的编程语言。ABAP的某些方面可能会让我们奇怪,为什么它会如此复杂?而它的某些方面又是那么杰出,给予了ABAP开发者们比其它任何语言更多的便利。
我发现有两样东西太cool了:
- 朴实的IDE(ABAP Editor)以及
- 酷炫的调试器
尽管SAP的IDE不支持某些更加有名的IDE(比如Eclipse)的一些特点,我依然发现在ABAP Editor中写代码要比其它IDE舒服太多。原因在于以下的快捷键以及它的可定制性。我会列出一些我常用的功能清单,如果没了它们,我可能就没办法写ABAP代码了。
2017.01.09更新:如果你发现某个快捷键不可用,那么很可能是热键冲突的原因。比如,在Windows 7下,QQ输入法和解除注释快捷键是冲突的。
大部分ABAP程序员甚至只有一点ABAP经验的人可能已经了解下面清单的部分内容了。如果你是这样的话,请忽略它们。如果你不是的话,那这部分就是为你准备的。
快捷键
快捷键 | 效果 |
Ctrl + D |
复制行. |
Ctrl + / |
跳转到左上角我们输入T-CODE的输入框。这个真的很方便,省去了从键盘切换到鼠标的时间,有的时候你切换键盘和鼠标再回到键盘仅仅是为了点击这个输入框 |
Ctrl + J |
将每个单词的首字母转换为大写,写注释的时候十分有用。 |
Ctrl + I & |
增量搜索。 这是查找(Ctrl + F) 功能的一个小小增强,可以在你键入的同时搜索,对没耐心的人来说很有用 加上Shift反向搜索 |
Ctrl + K |
大小写切换. |
Alt + 选择 |
在你指向选择表中某些字段的情况下,自动选择是一个很有用的功能。 caufv-aufnr, caufv-werks, caufv-objnr, caufv-plnbez, caufv-gamng, caufv-gasmg, caufv-gmein, caufv-plnnr, caufv-plnal, caufv-dispo, caufv-fevor, caufv-cy_seqnr , caufv-aufpl, caufv-gstrp, caufv-gltrp, caufv-gstrs, caufv-gltrs, caufv-gstri, caufv-gltri,
你可以按住ALT键来把下面的值选中并复制到剪切板中(类似Ctrl+Y)
aufnr, werks, objnr, plnbez, gamng, gasmg, gmein, plnnr, plnal, dispo, fevor, cy_seqnr , aufpl, gstrp, gltrp, gstrs, gltrs, gstri, gltri, |
Tab & Shift tab |
增加和删除缩进 |
Ctrl + O |
前往程序的某一行 |
Ctrl + Shift + S |
把当前文件以ABAP格式保存到桌面上,因为学会了这个快捷键,我才了解到.abap格式的存在 |
Ctrl + Selection |
当你按住Ctrl选择 **** + -> or <- 的时候,可以选取到符号左侧或者右侧的单词 |
Ctrl + . & Ctrl + , |
注释和解除注释 |
Ctrl+Alt+T |
交换当前行与上一行的位置。(译者注:个人测试未成功) 例子: INCLUDE ZTEST_ABAP_HTTP_CLIENT_TOP. INCLUDE ZTEST_ABAP_HTTP_CLIENT_C01. 变为 INCLUDE ZTEST_ABAP_HTTP_CLIENT_C01. INCLUDE ZTEST_ABAP_HTTP_CLIENT_TOP. |
Ctrl+Shift+L/X | 删除整行 |
Ctrl + ] & Ctrl + [ | 跳转到上一个段落、下一个段落
段落是用句子间留空行的方式创建的 |
Ctrl + Shift + Num8 & Ctrl + Shift + Num2 |
在编辑器中以行为单位上下移动,光标位置不随之改变
这个和Page Up & Page Down相似,只是每次移动的是行而不是整页 |
Ctrl + Spacebar | 显示补全选项列表(译者注:可能和输入法冲突)
例子: 输入CREATE之后,按 Ctrl + Spacebar将会显示一个列表让你选择DATA或者OBJECT |
Ctrl + U/L | 转换为大写/小写 |
更多编辑器工具
除了这个,还有一些其它东西可以在编辑器选项中设置。
代码模板
这里我使用了一个文本模板。它可以用在标记修改、或者定义以及实现本地类的情况,等等。
* Begin of Insertion <SID>K12345 <username>
* End of Insertion <SID>K12345 <username>
当我在编辑器输入i*的时候,它可以提示代码的补全...
当我点击tab补全的时候,弹出了TR号对话框
我们给出的TR号将会被添加到注释中。
变量名补全
这是一个小小的设置,但是它会将你从不停地复制粘贴/重复输入各种小单词的繁琐中拯救出来。
当你选中这个选项之后,他会提示你每一个变量名比如...
在长变量名的情况下特别有用。
如果你使用的编辑器是ADT(Eclipse)的话,在Window->Preferences中更改相关选项:
结论
除了编辑器和调试器功能,导航和使用位置列表(where used-list)也是我们经常使用的功能。由于这些特性,代码维护和支持的工作变得相对而言不那么繁重了。
另一个比较cool的地方是可以使用API来拓展核心编辑器的功能,这使得应用开发者也可以使用代码自定义编辑器特征。因为任何第三方开发者都有可能借此产生有关编辑器拓展的好主意,SAP方面也能由此得到有创意的东西。
就我目前的探索情况,我还没有发现任何BADI或者类可以用于执行编辑器功能,也许我应该多找找或者再等等。
更新:这篇博文得到的反响感动了我,让我去更深入地挖掘这个主题,之后我遇到了这个:
编程快捷键——极客风格
大部分列出的快捷键和没列出的快捷键可以在SAP-GUI编辑器选项中查看。
还是那样,点击编辑器界面右下角的编辑器选项按钮,
然后如图选择键盘选项...
现在,大部分快捷键都在上面的清单中列出来了。
我们可以按自己的意愿重新分配任何快捷键。
也有些没有默认分配快捷键的cool功能,Copy Append就是其中之一,很有用,而且未分配。
现在,根据新设置,按Ctrl+Alt+C,我就可以将内容追加到剪切板了。
例子:
+ Ctrl + Alt + C
+=
相似地,你可以设置Cut Append,跳转到书签,格式化选择文本等等..
自动完成
记不住难记的德文字段名?自动完成功能可以帮助你。(实践上不太好用,不如eclipse)
设置位置:
ADT中的多彩高亮
有点厌倦了万年不变的蓝色黑色代码?如果你使用的是ADT编辑器,可以使用Window->Preferences中的相关设置来把关键字变得五颜六色。(本节内容系译者自行添加)
本文链接:http://www.cnblogs.com/hhelibeb/p/5794460.html
英文原文:Shortcuts that can make an ABAP'er life easier
转载请注明
翻译:常见问题——ABAP Development Tools for Eclipse
ABAP Development Tools for Eclipse(简称ADT)是一个基于Eclipse的全新ABAP IDE,这篇文档试图回答有关ADT的最重要的常见问题。这只是一个开始,如果你对更多问题感兴趣,请看这个论坛,或者直接在本文下面回复。有关ABAP development tools的更多信息请看它的文档Getting Started Guide以及Quick Launch Sheet。
一般问题
- 为什么SAP选择了Eclipse平台建立一个新的ABAP IDE?
开源的Eclipse平台提供了一流的用户体验,强大的平台潜力,以及可以让人们贡献增强和拓展的广泛而有活力的生态系统。因此,作为Eclipse基金会的活跃贡献者和战略开发者,SAP持续投入资源给ADT或者是SAP HANA Studio这样的Eclipse平台,以提高开发者的生产力,并且实现特定的跨工具交互。
- 新的ABAP IDE有什么特别好处?
除了Eclipse平台本身的优点之外,ADT提供了具备多路ABAP应用服务器系统故障切换的在线开发环境,高级代码编辑和重构的支持,强大的搜索和导航能力,理想的任务导向和测试驱动开发,以及通过丰富的扩展点(见下文)实现内建的扩展性。有关ADT的更多信息请参考Getting Started Guide.
- ABAP development tools需要额外的许可证吗?
不需要,SAP NetWeaver的开发许可证中已经包含了它。
- ABAP development tools for Eclipse是开源软件吗?
不是。因为法律义务,我们没有获得发布源代码的许可。尽管如此,SAP已经提供了一个ABAP development tools的软件开发套件,从而允许社区和用户以及合作者扩展或增强IDE(见下文)。
- ADT支持的最低的SAP NetWeaver版本是多少?
目前,ADT兼容NetWeaver 7.31/7.03 SP04之后的版本,更多信息请看此博客。
- 哪些ABAP应用服务器版本支持ADT的特性?
某些ADT特性需要后台的支持,请看Thomas Fiedler的博客以获取有关ABAP应用服务器和ADT之间关系的信息。
- SAP会停止开发ABAP workbench (SE80)甚至禁用它吗?
不是的,SAP仍然会提供SE80的支持,但是未来更多新的特性将会成为ADT独占。在目前的时间点,ADT是一个附加的产品,并没有完全替代SE80。
- 我能平行地使用ADT和SE80吗?
对,这是可行的。两个IDE共享同一个源代码库和锁机制。
安装问题
- 哪些系统支持ADT?
目前,官方支持的版本可以在Microsoft Windows, Mac OS X 和 Linux上运行。
- 我要怎么安装ABAP development tools for eclipse?
安装ABAP development tools for eclipse最简单的方式是使用SAP Tools Updatesite:
https://tools.hana.ondemand.com/#abap
在这里你将找到安装前需要做的准备和安装指南。
- ABAP后台需要做什么?
为了使用ADT,你需要在ABAP服务器上面做一点小的调整。请在这篇文档中寻找更多信息:
Configuring the ABAP Back-end for ABAP Development Tools
- ADT有实验性版本吗?
是的,已经有ADT的实验性版本和与之兼容的SAP NetWeaver ABAP应用服务器后台。下载链接和更多信息请参考这篇文档。
核心概念
- 入门ABAP in Eclipse的最简单方式是什么?
使用Feature Explorer进行初学者之旅是学习Eclipse的操作和基本特征的最简单方式。更多细节请见这个博客:Get more out of ABAP in Eclipse with the Feature Explorer
- Ecplise中的ABAP project和标准project有什么区别?
在ADT中如果你通过SAP GUI和一个ABAP应用服务器后台进行连接的话,project代表了一个与ABAP应用服务器后台(server/client/user)间的预定义连接。因此,你可以同时开发并且比较不同的后台系统中的对象。有关组织project的更多信息请参考ADT文档。
- 我必须像使用JDT(Java Development Tools)一样提交和审查自己的ABAP代码吗?
不是的,ADT使用和ABAP workbench中一样的广为人知的ABAP应用服务器生命周期管理服务(e.g. TMS)。
- 基于表单的函数和类创建器在哪里?
我们的用户体验研究已经表明:一个强有力的源代码编辑器比使用多个表单编辑碎片化的代码更加有效率。新的大纲视图和快速大纲窗口通过为你的源代码提供方便的导航能力和结构化视图为新的代码编辑器补充了这方面的功能。
- 我找不到一些重要的工具了,它们在哪?
截至目前,并不是每一个工具都被迁移到了Eclipse平台。原因是多样的:有的将会在未来的ADT版本中出现,还有一些我们正在评估一些新的想法,使之更好的适应SAP的新战略。在这些情况下,现在你可以使用紧凑的SAP GUI集成,它允许你使用现存的包含上下文感知的导航(context-aware navigation)的事务。更多的信息请查阅文档。
- 我如何在Eclipse中调试应用?
如果你将ABAP应用服务器系统升级到了SAP Kernel 7.21(或者更高),你可以使用原生的ADT调试器。不然的话,你必须要用基于GUI的调试器。
- 开放的Ecplise平台提供了一流的扩展点(extension points),ADT的扩展性怎么样?
是的,SAP已经在为ADT提供一个软件开发套件。更多信息请下载SDK和阅读Michael Schneider的博客.
- 我能在Eclipse开发经典的dynpros吗?
我们暂时没有在Eclipse内提供一个本地的dynpro开发工具的计划。但是我们可以使用一体化的SAP GUI在Eclipse内运行标准的工作台工具,比如屏幕绘制器、菜单绘制器。
- 我要怎样在Eclipse中创建异常类?
在Eclipse里,我们目前不支持生成异常ID的向导程序。在这个页面你可以看到如何使用模板做这项工作。
Creating Exception Classes using Code Templates
原文链接:FAQs - ABAP Development Tools for Eclipse
本文链接:http://www.cnblogs.com/hhelibeb/p/5786905.html
转载请注明