SAP-BC425强晟中文学习笔记

前言

•本课程又是个重头戏,SAP 灵活性的最集中体现除了后台配置外就是这个增强和修正了。为了让软件更好的满足 用户需要,SAP允许客户在标准软件的基础上做功能性的修改,这些修改包括增强和修正。
•为了避免用户修改失控,损坏标准系统,SAP 建议先使用增强,就是根据标准系统预留的各种接口,对标准流程 做出信息扩充。只有当增强无法满足用户需要时,才能使 用修正,SAP 对修正有一套管理办法,确保用户修正都要通知SAP 公司,便于SAP 的技术人员诊断问题。

@[TOC]目录

•第一单元:课程概览

•课程目标

–对SAP 标准做出合格的修改
–评估修正的不同方法,并选择合适的

•在本课程结束,你应该可以:

–描述SAP 系统中不同类型的修改级别
–不修改ABAP 字典对象对其做出增强
–使用用户出口、客户出口、业务交易事件和业务增强来实现对R/3 标准的增强
–使用修正助手做出和调整修正

•主要业务场景

–你被一个专业旅行代理聘用,当计算机专家。你的责任是增强那些		客户服务专家使用的SAP 程序。
–可以有多种选择来帮助你完成这个任务。
–business example:一家旅行社由位于世界各地的多个独立的业务部门组成。每个单位由一名业务单位负责人领导,作为共同母公司之下的一个独立实体运作。你是该机构的售票经理,需要记录所有从美国前往欧洲的旅客,为了实现这些目标,需要自定义 the sap r/3 enterprise

•第二单元:修改SAP 标准

•单元内容

–调整选项的概览+选择一种调整技术的决策图表
–增强类型

•在本单元结束,你应该可以:

–确定可以用来对SAP 交付的标准系统做出修改的不同级别
–选择最适合的方法来修改标准
–列举可能的增强类型并解释它们的用途

•修改级别

–可以用下列方法调整R/3 系统来满足需要:
在这里插入图片描述

•定制customizing:根据一个实施向导为你的系统设置特定业务流程和功能。因此,所有可能的修改都要被考虑并组织。
•个性化personalization:对特定字段的全局显示属性做出修改(设置缺省值或隐藏字段)以及创建特定用户的菜单顺序。
•修正modification:在客户站点(customer site)对SAP 存储库对象做出修改。如果SAP 交付了该对象的一个修改版本,客户系统必须调整以表现这些修改。在4.0B 版之前,这些调整必须使用更新实用程序来手工完成。从4.5A 之后,这个过程可以用修正助手自动完成。
•增强enhancement:这意味着为各个客户创建参考了SAP 知识库中已有对象的知识库对象。
•客户开发customer developments:这意味着在客户命名空间创建各个客户唯一的知识库对象。

–定制和多数个性化都使用SAP 业务引擎中的工具来做。客户开发、增强和修正则都用ABAP 工作台中的工具来做。

对象在一个系统中是原始的,在sap交付对象的情况下,原来的系统位于sap本身。在客户系统中,这些对象只能作为副本使用。这适用于您的开发系统和之后的所有其他系统

如果您编写自己的应用程序,则创建的对象是原始的在您的开发系统中你把你的development 分配给request,request包括type、development/correction
request需要确保从DEV→QAS→PRD传输到下一个系统

在这里插入图片描述
correction and repairs:

change to an original are called corrections . they are record in a change request,the task of which have the type、 development/correction.

if change a copy ,which means an object outside ites own original system,the change is recorded in a task with type,repair.

repairs to sap object are called modification。

在这里插入图片描述
当修改your own objects,比如在系统中出现了某些错误,你可以直接更正the original 在开发系统中
当修改copy过来的内容时,必须马上更正the original ,因为这些copy过来的在你的系统中不是原始的???
原文:when you repair your own object ,such as if something goes wrong in your production system,you can correct the original in your development system straightaway.

when you change copies,you must correct the original immediately。notice that you cannot do this(?) with sap object because they are not original in any of your systems

•修改功能的流程

–如果你的需求无法用定制或个性 化来满足,可以 开始一个开发项 目或者使用补充 软件产品(CSP, Complementary Software Product) 解决方案。
在这里插入图片描述
–如果SAP 标准没有包含与想要开发的功能相似的功能,开发项目就会分到客户开发分类中。然而,如果 存在一个相似的SAP 功能,就尽量通过增强或修正的方法,如使用用户出口或简单的复制一个相应的SAP 程序来把它包含到开发项目中。

–修正可能会造成问题:在更新后,新版的SAP 对象必须跟已经创建的SAP 对象的修改版本进行比较。

–因此,只能在下列情况下使用修正:

• 定制或个性化无法满足需要
• 没有发现相似的增强或用户出口
• 无法把SAP 对象复制到客户命名空间

•定制customizing

–业务引擎由全部SAP 实施工具组成,包括:

• R/3 参考模型包含所有用来描述R/3 系统的模型(流程模型、数据模型和组织模型)
• 实施向导(*IMG*) 所有定制修改的完整列表
• a complete list of all customizing changes

•个性化personalization

–个性化能够加速并且简化R/3 系统的业务案例的处理。在个性化时,各个应用事务被调整,以适合公司整体 甚至是公司内某个特殊用户组的业务需要。事务中所 有不必要的信息和功能都被关闭。
– 不需要abap工作台
–方法mothods:

–全局显示属性允许定义特定屏幕字段的缺省值。还可以在某个特定事务中禁用某个字段或表控件列,甚至 是整个屏幕。
SET/GET parameters
variant transaction
table control setting valid throughout the entrie system
–基于角色的菜单(role-based menu)、收藏夹(favorites)和桌面快捷方式(shortcuts on your desktop)可以调整菜单顺序来符合公司中不同用户组的需要。

•使用ABAP 工作台的修改级别

–修正是在客户系统中修改 SAP 对象, 包括:

• 在用户出口的帮助下执行(它们 是在SAP 命名空间下为客户保 留的子程序)
• 在SAP 知识库对象的各个点上 的“硬编码”hard-coded

在这里插入图片描述
在这里插入图片描述
–客户开发是客户开发的能够调用SAP 知识库对象的程序。例如,客户经常创建调用SAP 函数模块的程序。function module
–在增强的概念中,角色分发是相反的:SAP 程序调用客户创建或修改的知识库对象。例如:使用一个被 SAP 程序调用的函数模块出口。可以在下列级别增强系统:

• 在ABAP 程序(函数模块出口)
• 在GUI 接口(菜单出口)
• 在屏幕上,在SAP 指定的区域插入一个子屏幕(屏幕出口)
• 在屏幕上,处理引用了一个特定屏幕字段的客户代码(字段出口)
• 在ABAP 字典表或结构中(表增强)

•表增强 table enhancement

–SAP 提供了两种方法为表和结构增加字段。

•追加结构
•定制包含(CI 包含)

–两种技术都允许向表附加字段而不实际修改表本身

–追加结构append structure是只为一个表table分配的结构。一个表table可以有多个追加结构(append structure)。在激活时,系统搜索该表的所有激活的 追加结构,并把它们附加给表。
如果copy一个有append structure 的table,那么append structure里的字段都将成为新表中的普通字段

–在如何参考表上how they refer to table,追加结构不同于包含结构。为了在表中包含一个结构中的字段,必须为表添加一个 ‘.INCLUDE…’ 行。这时表就参考这个子结构。而追加结构都是参考它们所属的表。
eg:table:MARA中的.include 参考子结构EMARA
在这里插入图片描述

•表增强:SAP 和客户

–追加结构允许向表附加字段而不实际修改表本身。因此表增强使用追加结构而不必由SAP 开发者来预先计划。追加结构只能属于某一个表。

–相反的,定制包含.include 则允许在多个表里使用相同结构。包含语句必须已经存在于SAP 表或结构中。表增强使用定制包含来处理SAP 开发者计划好的事情。

(追加结构完全是用户自己定义的,任何时候需要了都可以 添加。
定制包含则会跟后台配置有关,定制包含的结构在SAP 发布时已经用.INCLUDE 结构写在表里了,系统根据后台配置自动在.INCLUDE 结构里添加字段,从而添加到表中。)

•程序增强:如何工作

在这里插入图片描述
–程序增强的意图总是调用一个在客户命名空间中的对象。可以使用下列技术:

•客户出口(Customer Exits) SAP 应用程序调用的一个特殊出口函数模块。这个函数模块是系统为特殊意图处理的函数组的一部分。COMD/SMOD
•业务交易事件(Business Transaction Events) SAP 应用程序动态调用客户命名空间的函数模块。BTE
•业务附加(Business Add-Ins) 应用程序调用某个类或类的实例的方法。这个类在客户命名空间中。

•程序增强:SAP R/3 enterprise and customer

–程序增强允许为SAP 应用程序执行附加程序逻辑。SAP 现在提供了上述技术。
–特定增强技术的优点和限制将在后面的单元详细讨论。
在这里插入图片描述

•菜单增强:SAP R/3 enterprise and customer

在这里插入图片描述

–菜单增强menu允许向SAP 标准菜单添加附加菜单条目。系统当前提供两个选择:

•客户增强
•业务附加

–附加菜单条目会合并到GUI 接口中。

–当功能码被实现后,可以修改菜单条目的文本,并且修改图标——只要SAP 开发者提供了这些功能。

•屏幕增强

–屏幕出口是一种客户出口。它们允许在SAP 应用程序屏幕显示附加对象,增加客制栏位。SAP 开发者必须:

•定义子屏幕区域
•在逻辑流中指定对应的调用
•提供数据传输的框架
•在增强里包含屏幕出口
•维护文档!

–在SAP Web 应用服务器6.20 中,业务增强也可以包含屏幕出口。
–可以通过创建子程序(可能还有逻辑流)来实现屏幕出口。还必须实现数据传输。
–如何实现屏幕出口会在后面的两个单元:使用客户出口增强(对传统屏幕出口)和业务附加(对新的屏幕 出口)中讨论。

•修正

–任何对你的系统中SAP 交付的对象进行的修改都被称为修正。
–修正可能会在升级中导致不一致。当SAP 交付对象的一个新版本时,必须决定是否使用新对象,还是想要 继续使用你自己的旧对象。
–在4.0B 版以前,修正只记录在知识库对象级别(例如,一个包含程序)。
–从4.5A 之后,记录修正的粒度变得更细了。这让使用修正助手变得可能,将在本课程的《修正》单元讨论。
–修正调整处理也要被检查。修正如何被调整也会在《修正》单元讨论。

•第三单元:个性化

•单元内容

–使用事务变式来个性化事务

•在本单元结束,你应该可以:

–个性化事务,使用

•事务变式
•GuiXT

•业务场景

–终端用户只需要使用SAP 系统提供功能的一小部分。为了简化日常工作,需要设置他们的工作台来符合他 们的需要。
–同事应该能执行简化的事务。可以用事务变式来实现。

•定制层级

–SAP 系统能够把自身调整到用户的工作习惯上:当系统开始,它只给用户提供每天工作所需的功能。不需 要显示那些不用的功能。在过去,用户菜单可以从会 话管理器或者R/3 中的动态菜单来调用。从4.6A 版以后,基于角色的菜单出现在登录后的树结构中。
–当功能被选择,它在相同会话中开始。被执行的功能替换了基于角色的菜单。基于角色的菜单会在离开事 务或开始一个新会话时再次出现。
–在角色维护屏幕(事务码PFCG),管理员可以把一个角色的菜单结构(由事务码、报表和互联网链接组 成)与一个用户菜单合并。可以为包含的功能选择任 何结构和描述。

•事务变式:目的

–可以通过隐藏不需要的功能来简化系统的复杂程度。事务变式允许为用户简化完整事务的复杂程度。可以:

•用值预定义字段。这个预定义可以被用户覆盖;
•移除那些不需要用户输入字段的等待输入状态;
•禁用不需要的屏幕元素。这可以包含输入字段或其他屏幕元素;
•禁用整个屏幕。

–接下来讨论如何维护屏幕变式。

•独立变式和标准变式

–可以为SAP 事务定义下列变式:
•a) 创建一个变式事务,由SAP 事务和变式组成。
•b) 把变式声明为SAP 事务的标准变式。
–对于a),用户必须调用特定变式事务来访问变式。
–对于b),变式被附加到SAP 事务中,这样当SAP 事务被调用,系统自动使用这个变式。 可以为任何给定的SAP 事务定义唯一的一个标准变式。

•屏幕变式

–事务变式是引用一系列屏幕变式的集合。
–可以为一个屏幕创建任意数量的屏幕变式。事务变式由这些屏幕变式组成。

•事务变式:例子

–例子演示了一个SAP 事务的两个屏幕如何使用事务变式来重新设计。
–屏幕100 做出的修改:字段被隐藏;字段属性被修改;按钮被禁用或隐藏。
–屏幕200 做出的修改:按钮位置移动 并且插入了屏幕 (用GuiXT)。后面会讨论GuiXT。
在这里插入图片描述

•创建事务变式

–要创建事务变式,从SAP 菜单的加速SAP 条目选择组件“个性化” (这个路径没找到)
SPRO→SAP NetWeaver→General Setting→Field Display Characteristics→configure application transaction fields,事务代码SHD0。就到了维护事务变式的屏幕。
–输入想要创建变式的事务名称。变式的名字必须在系统中唯一,并且在客户命名空间中。
–如果想要创建一个特定客户端或者跨客户端的事务变式,可以使用“转到” 菜单选项。
–要创建变式,选择应用工具栏的相应按钮。

•事务变式:填写屏幕字段

–按“屏幕条目”,以调用模式开始事务。
–触发一个对话也会触发当前屏幕的PAI。系统发送另外一个屏幕,可以在其中评估屏幕上的字段。
–其他请阅读事务变式的联机文档。
–当继续时,被评估的屏幕被保存为屏幕变式。后面会详细讨论。

•屏幕变式的属性

–屏幕变式是独立的知识库对象,在系统中有唯一的名字。名字结构如下:

•变式名
•客户端(只对特定客户端的事务变式)
•屏幕号

–在这里定义字段内容是否要被复制到屏幕变式。可以为每个字段设置各种属性:可以移除一个字段的允许 输入状态,或者让它不可见。可以在屏幕变式的联机 文档中找到可能的细节清单。

•事务变式:测试和使用

–可以用下列方式开始事务变式:

•测试环境
•类型为“变式事务” 的事务码
•用户菜单

–可以在事务变式维护的测试环境中测试事务的处理流程。这在开发者创建事务变式时是主要步骤。
–要在用户菜单或角色中使用事务变式,必须创建类型为“变式事务” 的事务码。

•创建变式事务

–要从菜单开始一个事务变式,必须创建类型为“变式事务” 的事务码。可以在事务变式维护屏幕的菜单“转到” 下找到链接。此外,还可以从ABAP 工作台创建一个事务码。如果选择这种方式,记住选择正确的初始对 象,变式事务。
t-code:SE93
在这里插入图片描述

•GuiXT

–辅助工具GuiXT 允许以一种更灵活的方式设计各个屏幕。GuiXT 使用脚本语言来:

•定位屏幕上的对象
•设置属性
•包含新对象

在这里插入图片描述
–如果按下GuiXT,就会出现一个输入脚本的编辑窗口。还可以选择存储在本机上的图形文件。
–还可以导入在本机上创建的脚本,或者导出。

(这个过程也就是先用SHD0执行一遍需要设置的t-code ,设置好需要显示或必输的栏位,给这个变式取一个名字,在用SE93 给这个变式重新创建一个新的t-code :z****)

•GuiXT:脚本语言

–可以使用GuiXT 脚本语言来修改屏幕布局。可以:

•移动对象
•插入图片
•插入按钮
•插入值帮助
•修改字段的输入属性
•删除屏幕元素

–安装中还包含了GuiXT 的完整文档。可以在GuiXT 供应商的主页(http://www.synactive.com)找到更多信息。

•第四单元:增强字典元素

•单元内容

–追加结构
–定制包含
–文本增强

•在本单元结束,你应该可以:

–使用追加结构来增强表
–使用定制包含来增强表
–为SAP 数据元素修改字段标签和文档,不执行修正

第一课:表增强

•表增强:概览

–表和结构都可以通过两种方法来扩展:
–追加结构允许通过向表中增加非标准的字段来增强它。允许向任何表或结构添加所需的特定客户的字段。
–追加结构会为某个特定表创建。然而,一个表可以具有多个追加结构。
–如果预先知道某个SAP 交付的表或结构需要添加特定客户的字段,SAP 开发者就会使用定制包含语句来包含这些字段。
–相同的定制包含可以用在多个表或结构中。这确保了这些表和结构无论如何扩展都保持一致。
–不存在的 定制包含 不会导致错误。

•追加结构

–追加结构允许把字段附加到表,而无需修改表本身。

–追加结构只能分配给一个表。然而,一个表可以有多个附加的追加结构。任何时候表激活时,系统会搜索 该表的激活追加结构,并且把它们附加到表上。如果 一个追加结构被创建或者修改,并且激活,则它分配 到的表也会激活,所有对追加结构的修改也影响到表。

–在ABAP 程序中使用追加结构的字段跟使用表的其他字段一样。

–如果复制一个具有追加结构的表,则追加结构中的字段会成为新表的普通字段。
在这里插入图片描述

•升级时的追加结构

–在客户命名空间创建追加结构。这可以保护它们不在升级过程中被覆盖。标准表的新版本在升级时被加载。 包含在激活的追加结构中的字段会在新标准表首次被 激活的时候被追加倒到标准表。

–从3.0 版开始,ABAP 字典中的字段顺序可以跟数据库中不同。因此,当添加追加结构或向现有追加结构 中插入字段时都不会发生数据库表转换。所有必须的 结构调整都在调整数据库目录(ALTER TABLE)时自动完成。表的定义会在它在ABAP 在电脑中激活并且新字段追加到数据库表时改变。

–使用追加结构时注意下面几点:

•不能为池表或簇表创建追加结构。pool /cluster table
•如果表包含长字段(例如数据类型LCHR 或LRAW),就不能为表扩展追加结构。这是因为这种类型的长字段必须是相 关表的最后字段。从追加结构中的字段不能被添加到它们后 面。
•如果使用追加结构来扩展一个SAP 表,追加结构中的字段名必须在客户命名空间中,就是用YY 或ZZ 开头。这可以避免SAP 将来插入新字段时发生命名冲突。
•定制包含customizing includes

–R/3 标准交付的部分表和结构包含特定的包含语句, 称为定制包含。它们通常插入到这些标准表,并需要 添加特定客户的字段。

–跟追加结构不同,定制包含可以被插入多个表。这样可以在包含被改变时保持表和结构的一致性。

–定制包含程序是客户命名空间的一部分:所有名字都以“CI_” 开始。这个命名规则可以确保不存在的定制包含不会导致错误。R/3 标准不交付定制包含的代码。

–可以使用特定事务码来创建定制包含。部分已经是SAP 增强的一部分,可以通过使用项目管理来创建(查看《使用客户出口的增强》)。

–定制包含的字段名必须在客户命名空间中,跟追加结构的字段名类似,必须用YY 或者ZZ 开头。

–当把定制包含中的字段添加到数据库中时,遵守跟追加结构相同的规则。

在这里插入图片描述

第二课:文本增强

•文本增强:概览

–文本增强由特定客户的字段标签和SAP 数据元素的文档组成。customer keywords/customer documentation of data elements
–所有SAP 应用中的文本增强功能都使用受影响的数据元素(它们是全局增强)。

•覆盖SAP 字段标签

–只能覆盖哪些屏幕设计者没有明确指定描述文本的屏幕字段的字段标签。这时,屏幕字段的“字典被修改” 属性的值为“F”。
–“字典被修改” 属性可以有下列值。
•space:字段标签最适合字段长度

•1:短字段标签
•2:中字段标签
•3:长字段标签
•4:表头字段标签
•V:来自字典的可变文本传输(同space)
•F:固定,不从字典传输文本
keywords

SAP app programmers difine keywords in different lengths and provide a short description for each data element。
use the project management function to change these keywords and short text。
all the screen fields that use the keyword text of data elements can be renamed in this way。
a new short text in a data element will appear in the F1 help of the screen field.

editing text enhancements

to edit text enhancement in project management
路径:SAP menu→tools→Abap workbench→utilities→enhancement→project management
t-code:CMOD
在这里插入图片描述
在这里插入图片描述

•更新时覆盖文本

–如果SAP 重新交付已有字段标签,比如做为版本升级的一部分或导入新的纠正,就需要恢复客户字段标签。 如果想要保持自己的字段标签不被新版本覆盖,选择 菜单项“恢复客户字段标签”。SAP 推荐总是在版本更新后恢复字段标签。

–字段标签会在后台运行的程序中被恢复。这个程序检查所有编辑过的数据元素,如果有必要就恢复字段标 签。

–对于核心字段标签如BUKRS、MANDT 等,建议在一个使用这些字段的表不被修改的时间进行编辑和恢复。 否则,激活数据元素可能失败,修改状态只部分激活。

•恢复SAP 字段标签

–要撤销字段标签的修改,选择菜单选项“恢复SAP”。

–字段标签会用一个后台运行的程序恢复。这个程序检查所有编辑过的数据元素,如果有必要就进行恢复。

–对于核心字段标签,如数据元素BUKRS、MANDT 等,建议在使用这些字段的表的内容不被修改时再启动恢复。

•数据元素的增强文档enhanced documentation for data elements

–当增强数据元素文档时,可以复制SAP 文档。这时, 当用户在相应屏幕字段按F1 时,系统会同时显示SAP 文档和客户指定文档。

–可以生成一个已经被修改的数据元素的清单,并且通过选择清单中元素相应的行来编辑客户文档。

–如果想要显示SAP 原始文档,只需要删除自己的文档即可。

•创建客户文档

–CMOD-转到-全局增强-数据元素-EN 新客户文档

–使用上述路径打开一个对话窗口,必须选择“原始文本” 和“模版”。如果想要向SAP 文档添加内容就用第一项。如果想要创建客户特定文档而不包含SAP 文档,则使用第二项。

•第五单元:使用客户出口增强

•单元内容

–介绍
–增强管理
–函数模块出口
–菜单出口
–屏幕出口

•在本单元结束,你应该可以:

–使用根据客户出口技术创建的程序、菜单和屏幕出口
–解释组件、增强和增强项目分别是什么
–创建增强项目,编辑增强及其组件
–描述工作台组织器和传输系统的连接
–传输增强项目

第一课:概览

•SAP 应用增强

–应用增强允许客户增强应用的功能。SAP 预计划了客户出口,通常由几个组件构成。
–应用增强在交付时是不激活的,可以由用户按照需要来完成并激活。
–应用增强的特征:

•每个增强提供了一系列预计划的、精确定义的功能。
•SAP 和客户功能之间的接口被清晰定义。
•做为客户,不需要关于实现SAP 应用的深层知识。
•在升级时不需要调整增强。
•客户增强项目

–SAP 应用开发者从现有的函数模块出口、菜单出口和屏幕出口来创建SAP 增强。为这个意图提供了一个管理功能(事务码SMOD)。
–客户会得到一个包含了现有SAP 增强概览的目录。然后可以使用事务码CMOD 来把所需的SAP 增强合并到一个增强项目中。

SMOD:具体增强
CMOD:包含一个或几个具体增强的项目管理

•增强和增强项目

–SAP 增强由组件部分component part组成。这些组件包括程序出口、菜单出口和屏幕出口。一个特定组件只能在一个SAP 增强中使用一次(这确保了SAP 增强的唯一性)。
–客户增强项目由SAP 增强组成。每个独立的SAP 增强在一个单独的客户增强程序中只能使用一次(这确 保了客户项目的唯一性)。

•SAP 增强创建流程

–SAP 应用程序员计划一个应用中可能的应用增强,并定义必须的组件。这些组件被合并在SAP 增强中。
–程序员尽可能的编写完善的增强文档,这样客户可以不必分析程序源代码或屏幕源代码而实现增强。

第二课:增强管理

•客户假定的流程

–首先,创建一个增强项目,然后选择想要使用的SAP 增强。
–然后,使用项目管理功能编辑各个组件,并编写整个增强项目的文档。
–最后,激活增强项目。这会激活项目的所有组件部分。

•创建客户增强项目

–开始项目管理功能(事务码CMOD)。首先给增强项目一个名字。SAP 建议为所有项目制订一个命名规则。例如:把项目的事务或者模块池包含在名字中。项目 名字在系统中唯一标识了增强。

–接下来,转到项目属性,并且输入增强项目的短描述。系统输入其他属性(创建名字戳和时间戳以及状态)。

•分配SAP 增强到客户项目

–使用项目管理功能把SAP 增强分配到客户增强项目。在相应的屏幕上输入想要使用的SAP 增强的名字。

–搜索功能会给出一个关于现有SAP 增强的目录概览。从这里可以选择感兴趣的增强。

•编辑组件

–使用项目管理功能来编辑增强项目中的组件。

–根据编辑的组件是否是个函数模块、菜单条目或者子屏幕,可以分别转到函数制作器、输入菜单项的对话 框或者屏幕绘制器。

•激活增强项目

–激活增强项目会影响到它的所有组件。在成功激活后,项目状态为“激活”。

–在激活过程中,所有属于项目的程序、屏幕和菜单包含组件都被重新生成。在激活后,可以在应用中看到 增强的影响。

–“解除激活” 功能允许把激活的增强项目的状态重新设置为“不激活”。

•传输项目

–当增强项目被创建,就应该把它指定到一个修改请求。每个组件部分(包括程序、子屏幕、菜单出口等等) 都应该被指定到相同的修改请求。使用相同的修改请 求允许在同时传输整个增强。

第三课:程序出口

•程序出口概览

–程序出口允许客户在应用功能中实现附加的逻辑。SAP 应用程序员定义了程序模块出口插入在哪里和它们传输何种数据。SAP 程序员还创建了一个出口的相应函数模块,以及短文本、接口和文档,并且在SAP 文档中描述了每个程序出口的意图。
在这里插入图片描述

–自己在函数模块中编写源代码。如果需要,还必须为函数组创建自己的屏幕、文本元素和包含。

–系统在增强项目(函数模块是其中的组件)首次被整体激活时处理用户的ABAP 代码。

•程序出口:架构

–本图展示了程序提供一个程序出口形式的增强的流程。
在这里插入图片描述
–出口函数模块由SAP 应用开发者定义,在源代码 的某个点被调用。 在函数模块中, 用户可以使用一 个包含来添加一 个函数到客户命 名空间

•程序出口:语法

–SAP 应用程序员定义的函数模块使用ABAP 语句CALL CUSTOMER-FUNCTION ‘nnn’ 来调用,其中’nnn’ 是三位数字。SAP 应用程序员还创建相应的函数模块和函数组。
在这里插入图片描述

–函数模块总属于名字以X 开始的的函数组(X 函数组)。

–函数模块应用下列命名规则:

•前缀:EXIT
•调用函数模块的程序名
•后缀:三位数字
•名字的三部分之间用下划线分割。

–CALL CUSTOMER-FUNCTION 语句只在增强项目激活后执行一次。如果相同函数模块被多次调用,激活 会为所有调用有效。

•查找程序出口

–涉及到增强的最常见问题就是:如果应用程序提供了一个程序出口,该如何找到它?这对所有类型的增强 都是个核心问题。有若干种方法来找到问题的答案。
在这里插入图片描述
–要快速确定一个应用程序是否提供了程序出口。可以按照下列方法来查找。打开一个程序(通过事务 码),通过菜单“系统-状态” 查到程序名,双击程序名打开程序,然后使用菜单的“编辑-查找/替换” 功能,在源代码里查找“CALL CUSTOMER”。如果查询不成功,可以扩展搜索范围:为相应程序运行环境分 析,在程序环境中查询特定字符串。

–查找增强的名字可以使用一些工具,如应用层级(SE81),R/3 知识库信息系统(SE80),IMG (SPRO)等。可以用不同的条件显示在R/3 知识库信息系统中的搜索。重要的条件有:
•包
•增强的技术名称

–使用SE80 查找出口的一种方法。用SE80 进入对象浏览器, 点击“知识库信息系统” 按钮,展开下面的“Enhancements-客户出口”,双击其中的“Enhancements”,在右方出现选择标准,点击应用工具栏的“所有选项” 按钮(快捷键Shift+F9), 在出现的组件名后输入“EXIT_<prgram_name>*”,执行。就能查到某个程序对应的出口。

exit_xxx_xxx出口增强查找方法:
1.MODX_FUNCTION_ACTIVE_CHECK在最后一行添加断点
2.运行需要查找断点的t-code
3.debug进入程序查看字段l_funcname 就是运行时执行每一步中存在的增强
4.在通过se11查表modsap 输入出口看对应那个smod

疑问:

如果se80或者program name找不到,按照package比较好吧,像me21n的program_name就找不到出口,得是me21的程式名称SAPMM06E才能找得到,这是为什么?)

•编辑程序出口

–使用项目管理功能(CMOD)来为程序出口编辑函数模块。

–使用编辑组件的按钮来直接到函数模块编辑器(显示模式)。

–不要修改函数模块本身,尤其是它的接口。函数模块中包含一个INCLUDE 语句,包含了可以在客户命名空间创建的程序。

–双击对象,就会自动转到包含程序,这里可以输入源代码。

–注意,这里SAP 设置了一个很变态的陷阱,双击时会提示“函数模块为程序蕴含保留”,接下来就按什么按钮都过不去了,这时需要按一下回车键,就能转到包含程序里。

•函数组的结构

–要理解X 函数组如何工作,就需要理解一般的函数组如何工作:

•函数组由多个包含组成。系统为不同对象分配唯一的名字给包含。部分包含的名字是简单建议的,部分不能被修改。
•全局数据被存储在TOP 包含中。这个包含在函数组创建时自动生成。
•函数模块被存储在顺序编号的包含中,按顺序全部保存在以UXX 结束的包含里,XX 是两位数字。
•接下来可以位其他对象选择其他名字的包含(子程序、模块、事件等等),建议接受建议的名字。

SAPLXAAA-------------------program name
LXAAATOP----------------Global data
LXAAAUXX----------------all function modules
LXAAAU01-------------function module 01
LXAAAU02-------------function module 02
LXAAAF01-----------------subroutines

•出口函数组的结构

–出口函数组由SAP 应用程序员为增强出口创建,包含以LX 或ZX 开始的包含程序。只能编辑那些以ZX 开始的包含,因为它们存储在客户命名空间。
–其他函数模块不能被添加到函数组中。
–包含程序ZxaaaUnn 包含函数模块出口的函数模块的源代码。

SAPLXAAA-------------------program name
LXAAATOP----------------Global data
LXAAATAP-------------global SAP data
ZXAAATOP------------global customer data
LXAAAUXX----------------all function modules
LXAAAU01-------------function module 01
ZXAAAU01---------customer source code
LXAAAU02-------------function module 02
ZXAAAU02---------customer source code
LXAAAF00-----------------SAP source text proposal

•出口函数组的全局数据

–SAP 应用程序员可以在包含程序LXaaaTOP 中声明全局数据。

–用户可以在包含ZXaaaTOP 中声明自己的全局数据。

–包含程序LXaaaTOP 还包含FUNCTION-POOL 语句,不能修改。因此,在输出消息时必须总是在圆括 号中包含消息类,例如MESSAGE E500 (EU)。
在这里插入图片描述

•客户特定的处理块

–程序ZXaaaUnn 的INCLUDE 在一个FUNCTION - ENDFUNCTION 块中。因此,这里不允许出现事件、子程序(FORM)、模块(MODULE)。它们需要被在独立的包含中被创建,后面会讨论它的流程。这里 用DATA 声明的数据只在函数模块中本地有效。

–SAP 应用程序员还可以为源代码做出建议。这时,就创建包含LXaaaFnn,这里的nn 是函数模块中包含LXaaaUxx 的内部编号。在SAP 增强中还提供了文档。可以在项目管理事务中从这个包含中复制源代码到自 己的包含程序ZXaaaUnn 中。

–可以为函数组创建文本元素。
在这里插入图片描述

•出口函数组中的其他SAP 对象

–SAP 应用程序员可以在包含LXaaaF01 中提供默认的子程序。
–特定子对象可以包含在下列包含中。

•LXaaaF01:包含SAP 交付的子程序subroutine
•LXaaaE01:包含属于X 函数组的事件ABAP events
•LXaaaO01:包含屏幕提交的PBO 模块
•LXaaaI01:包含相应的PAI 模块
•出口函数组中的客户对象

–子程序、模块和交互式事件(AT…)都做为包含程序创建,并且使用包含程序ZXaaaZZZ 做为包含增强。
–附加包含必须遵守下列命名规则:

•ZXaaaFnn 给子程序
•ZXaaaOnn 给PBO 模块
•ZXaaaInn 给PAI 模块
•ZXaaaEnn 个事件
•客户屏幕

–可以使用CALL SCREEN 来调用自己的屏幕。为输出前处理(PBO)和输入后处理(PAI)模块创建相关的包含程序ZXaaaZZZ。

–使用向前导航(选中对象在上面双击)来创建自己的屏幕和模块。

–这种方式创建的屏幕会自动获得函数模块的主程序的名字SAPLXaaa。这种屏幕的PBO 模块可以在ZXaaaO01 中找到,PAI 模块在ZXaaaI01 中。

•摘要:程序出口

–可以通过在预定义的点添加自己的逻辑流来增强SAP 应用。
–这种增强可以包含自己的屏幕,以及相应的逻辑流和图形用户界面,以及客户创建的文本元素。
在这里插入图片描述

第四课:菜单出口

•菜单出口概览

–菜单出口允许附加自己的功能到SAP 菜单的菜单选项中。SAP 应用程序员为此在GUI 接口中保留了特定的菜单条目。可以自己指定这些菜单条目的文本。
–一旦激活了菜单出口,它们就可以在SAP 菜单中看到。当选择相应菜单选项,系统就转到包含了特定客户功 能的程序出口中。

•菜单出口需求

–为了能够实现菜单出口,SAP 应用程序员必须用加号开头的功能码来配置GUI 接口
–这些功能码首先是不激活的,并且不出现在GUI 中, 直到激活它们。它们不会出现在屏幕上。

•菜单出口和屏幕出口

–SAP 应用程序员确定一个程序在哪里读取附加的功能码,以及它们如何反应——使用程序出口或用预定义的功能。

•命名和编辑菜单出口

–菜单出口用项目管理事务CMOD 来编辑。
–编辑组件的按钮调用一个对话框,这里可以为每个附加菜单条目输入依赖语言的短描述。
–不能对GUI 接口做出任何修改。

case ok_code.
	when ‘DISP’。
	...
	when ‘+ABC’.
		CALL CUSTOMER-FUNCTION '001'
			EXPORTING
				<i_variables>
			IMPORTING
				<e_variables>.
		...	

第五课:屏幕出口

•屏幕出口概览

–屏幕出口允许使用主屏幕的保留区域(子屏幕区域)。可以显示在这个区域显示附加信息或输入数据。在客 户屏幕(子屏幕)中定义必要的输入和输出字段。

•屏幕(一般)

–子屏幕是屏幕上的长方形区域,为在运行是显示附加屏幕而保留。其他屏幕(子屏幕类型)可以在运行时 显示在每个子屏幕上。

•调用一般子屏幕

–系统决定哪个屏幕会在PBO 事件时显示在一个子屏幕区域上。一般语法是:CALL SUBSCREEN INCLUDING <dynpro_no/screen_no>。
–对于每个子屏幕PAI 和PBO 事件都会把子屏幕当作一个正常屏幕来处理。
–在主屏幕中的逻辑流里CALL SUBSCREEN 的顺序确定了各个子屏幕被处理的逻辑流顺序。

–重要:

•功能码只能通过主屏幕被处理!
•不允许为子屏幕的命令字段输入名字!
•不允许为子屏幕定义GUI 状态!
•在子屏幕的流控制里不能输入下一屏幕的值!
•定义屏幕出口

–SAP 应用程序员可以为一个屏幕保留多个子屏幕。
在这里插入图片描述
–在主屏幕的流控制中使用CALL CUSTOMER- SUBSCREEN 语句来调用子屏幕。子屏幕区域的名字必须不能带引号。子屏幕所属的函数组必须在一对引号中静态定义,但是屏幕号可以通过使用字段保持可 变,它必须总是有四个字符长度。
–屏幕出口调用起初是不激活的,当屏幕被处理时被跳过。
–只有相应子屏幕被创建在增强项目之后,这个项目被激活,系统处理这个屏幕出口。
–在X 函数组中创建子屏幕。通常,这些函数组值包含程序出口。

•调用客户子屏幕

–在一个屏幕的流控制中的PBO 中发生语句CALL CUSTOMER-SUBSCREE INCLUDING <screen_number> 时,子屏幕就被包含在SAP 应用程序员定义的子屏幕区域中。在这一点,所有在子屏幕的PBO 事件被调用的模块也都被处理。
–子屏幕的PAI 事件在调用程序的PAI 事件中使用CALL CUSTOMER-SUBSCREEN 时被调用。

•传输数据到子屏幕

–调用程序的全局数据对保护子屏幕的X 函数模块不可见。SAP 应用程序员使用程序出口来明确提供这些数据给子屏幕。
–为了便于数据传输,模块在调用程序的流控制中被调用,通过接口参数来传输数据。
–相应的出口函数模块必须跟创建客户子屏幕在同一个X 函数组中。

•从子屏幕传输数据

–数据必须以另一个方向传输,因为来自包含了子屏幕的用户条目的X 函数组的全局数据也不为调用程序所知。因此,SAP 应用程序员使用程序出口来把子屏幕中修改的数据返回给调用程序。
–为此,系统在主屏幕的PAI 事件中调用模块,包含了一个程序出口,可以从X 函数组接收相关的全局数据。

•命名和编辑屏幕出口

–屏幕出口用项目管理事务CMOD 来编辑。
–屏幕出口的技术名称由调用程序的名称、四个数字的主屏幕号和子屏幕区域的名称组成,后面是X 函数组的程序名和子屏幕号。

•编辑子屏幕

–SAP 开发环境支持客户子屏幕的创建和相应的PBO 和PAI 模块做为向前导航的一部分。
–确保创建的子屏幕的屏幕类型为子屏幕。
–不允许修改任子屏幕和程序出口所属的X 函数组的接口,也不允许添加任何自己的函数模块。

•第六单元:业务交易事件

•单元内容

–什么是业务交易事件(BTE)
–不同类型的BTE
–查找业务交易事件
–使用业务交易事件
–比较:客户出口和业务交易事件

•在本单元结束,你应该可以:

–描述什么是业务交易事件(BTE)
–查找合适的的业务交易事件
–使用业务交易事件来增强SAP 软件

•软件交付流程

–软件交付已经跟早期流程有了相当大的改变:以前, 只有两个参与者——SAP(生产者)直接把软件交付给终端用户。客户可以使用客户出口来增强标准。
–由于强烈的面向组件化,今天很多参与者加入了软件交付流程:SAP 交付R/3 标准,做为工业业务单位(Industrial Business Unit,IBU)的基础软件,它再进行开发并提供封装的功能。接下来可能是一个合作 伙伴公司,它构建它自己的基于R/3 的补充软件程序(Complementary Software Program,CSP)解决方案。这个链的最后一环是客户。
在这里插入图片描述
–这个流程中的所有部分都是潜在用户,并且提供增强。这个需求无法通过客户出口满足,因为它只能使用一 次。因而,从4.0 版后SAP 开发了一个新的增强技术,允许增强被重用。

•业务交易事件(属性)

–业务交易事件(BTE,Business Transaction Events) 允许添加附加组件到R/3 系统中,比如以函数模块的形式。
–为此有两种类型的接口:

•发布和订阅接口:这些接口通知外部软件,特定事件发生在SAP 标准应用,并且把处理过的数据提供给它们。外部软件不向SAP 标准系统返回数据。
•处理接口:这些接口用来控制业务流程以不同于标准R/3 系统的方式处理。它们干预标准流程,把数据返回给SAP 应用。

–可以附加各种外部开发给R/3 系统,可以使用ABAP 工作台创建附加的开发。

•BTE 功能:如何工作

–程序包含业务交易事件形式的增强。SAP 程序调用一个函数模块,确定并处理当前实现。事件函数模块的 名字用“OPEN_FI_PERFORM_” 或“OUTBOUND_CALL_” 开始。
–事件函数模块OPEN_FI_PERFORM_<…> 或OUTBOUND_CALL_<…> 确定每个增强的当前实现, 并且把它们存储在一个内表中。函数模块按照在内表 中定义的顺序被实现。在这一点,系统还考虑函数模 块在客户命名空间被处理的条件。例如:国家或应用 可以做为条件输入。这些条件也会做为过滤值被引用。

•BTE:在SAP 程序中的调用语法

–在SAP 应用程序中,函数模块“OPEN_FI_PERFORM_<…>”(或OUTBOUND_CALL_<…>)被调用。应用创数接口数据给这个服务函数模块。接口由SAP 开发者预定义。
–服务函数模块还查找现有实现,并且在内表中输入。找到的实现会在一个循环中被处理。

•BTE:可能的场景

–SAP 应用开发者让接口可以在事务的某个调用点被用户获得。可以在这些点定义附加逻辑。在这里插入图片描述

–在最基本的场景,SAP 合作伙伴和客户可以自己使用这些接口。这时,业务交易事件功能的作用跟客户出 口非常相似。
在这里插入图片描述
–跟客户出口不同,业务交易事件允许为多种类型的附加逻辑使用相同接口。
–如果这样,可以决定是否为某个给定的BTE 执行所有增强或只有指定的增强。
–这样,两个增强同时存在,互不影响。

•发布& 订阅接口

–发布& 订阅接口
•在一个特定事件被触发时允许开始一个或多个附加操作。它们不影响标准R/3 程序。
•多个操作不会互相干扰。
•附加组件只能导入数据
•附加检查(权限、存在重复等等)

•流程接口

–流程接口
•跟发布& 订阅接口不同,在流程接口中数据会双向交换。这会影响到附加到该接口的增强。
•当事件触发时,标准程序的流程只能被一个使用流程接口的外部流程替代。
•如果使用一个来自SAP 合作伙伴的使用流程接口的附加,这个增强会在运行时处理。如果选择为一个自己的开发使用相 同的流程接口,合作伙伴增强就会被忽略,在运行时处理自 己的增强。

•BTE:SAP 和客户

–业务交易事件允许在一个任务功能中实现附加逻辑, 类似程序出口。SAP 应用程序员决定是否在一个任务功能放置业务交易事件,以及在每个点应该传输的数 据。他们还会在SAP 文档中创建示例函数模块以及短描述、接口、文档,并描述功能可能的增强。
–首先,SAP 应用程序员给业务交易事件指定一个8 位数字的编号以唯一标识。这些编号应该遵守一定规则。 例如,集成在相同SAP 应用程序中的事件的名字应该在第五和第六个字符标记。
–SAP 开发者注册事件,并创建模版函数模块, sample_interface_,为用户设立接口。

•BTE:搜索

–在SAP 定制实施向导(IMG)中,可以在财务会计区域的“财务会计全局设置” 节点下找到条目“使用业务交易事件”。选择这个条目调用事务码FIBF,这里可以为使用业务交易事件执行所有的必要的操作。
–在菜单“环境” 下,可以找到搜索功能,用来确定相应的业务交易事件。可以从清单中浏览事件的文档。

•BTE:文档

–事务码FIBF 的“环境” 菜单包含两个程序,可以用来搜索BTE,可以使用各种参数来显示搜索。
–系统找到的BTE 显示在一个清单里,可以:
•显示模型函数模块(打开函数制作器,并复制)
•显示接口
•显示文档
–文档提供了关于如何使用增强和应用条件的清晰解释。

•BTE:产品

–使用事务码FIBF 来创建一个产品。产品组把增强集合在一起。
–可以在交付链的各个层创建产品。他们为实现业务交易事件的处理定义了一个顺序。
–只能把产品做为一个实体整体切换打开或关闭。这允许用户控制哪个增强应该被处理和不被处理。它还确 保了整个增强的完整性。

•实现一个BTE

–可以使用事务码FIBF 来执行使用一个业务交易事件的所有必须激活步骤。
–首先,选择一个想要附加自己函数模块的接口。这个接口按钮显示选择的接口的参数接口。还可以使用文 档来确定每个接口允许执行的功能。
–使用ABAP 工作台来复制示例函数模块sample_interface_ 到可以命名空间的客户函数组中。必须不能修改接口。可以用任何源文本填写模 块,除了COMMIT WORK。不要使用COMMIT WORK,不要忘记激活函数模块。
–在管理屏幕创建一个产品。
–为函数模块和产品指定一个编号。

•比较:客户增强和BTE

客户出口业务交易事务
程序出口
菜单出口
屏幕出口
屏幕上追加字段
管理层
可重用
客户端依赖
特定过滤器

–跟客户出口相比,业务交易事件是客户端相关的。这意味着在不同客户端可以为不同目的而使用相同事件。
–业务交易事件可以多次使用。

•第七单元:业务附加(Business Add-Ins,BAdI)

•单元内容

–搜索业务附加
–实现业务附件
–创建业务附加

•在本单元结束,你应该可以:

–搜索业务附加
–实现业务附件
–创建业务附加

•业务附加:动机

–早期增强技术的缺点

•只能使用一次(客户出口)
•没有屏幕增强(业务交易事件)
•没有菜单增强(业务交易事件)
•没有管理级别(业务交易事件)

–新增强技术的需求
•可重用
•所有增强类型(程序、菜单、屏幕出口)
•管理级别
•使用最新技术实现

第一课:接口

•对象

–类是对对象的抽象描述。对象只在程序运行时存在。本单元中,根据上下文,我们说的对象有可能是指抽 象描述(类)。
–对象由它的类描述,并且由两层组成——内部和外部。

•公共组件:公共组件是类中可以被外界看到的组件(例如属性和方法)。所有类的用户都可以直接使用公共组件。对象 的公共组件构成了它的接口。
•私有组件:这些组件只在对象内部可见。跟公共组件相似, 私有组件可以是属性和方法。

–面向对象的目标是确保一个类可以保证它的一致性。相对的,对象的数据一般是内部的,就是说,使用私 有属性标识。类的内部(私有)属性只能被类的方法 修改。因此,类的公共组件是方法。方法处理类内部 的数据,确保它总是一致的。
–为了把对象跟其他具有相同属性和方法的对象区分开,还需要有一个标识。

•函数组的实例做为一个对象

–在4.0 版以前,与对象最接近的是函数组和函数模块。

–当调用一个函数模块时,函数组的实例——带有所有的数据定义——被加载到内部会话的内存区域。实例是一个实际的软件对象。一个ABAP 程序可以调用函数模块来加载不同函数组的实例,但是同时每个函数 组只能存在一个实例。

–实际面向对象和函数模块的最根本不同是,程序可以处理不同函数组的实例,但是不能处理同一个函数组 的不同实例。例如,假设程序想要同时管理多个独立 帐户,或者多个订单。如果使用函数组来做,就必须 编写实例管理程序来区分不同的实例(如使用编号)。

•类推广了函数组

–实际上在一个函数组内实现实例管理是非常麻烦的。因此,数据通常都在调用程序中,函数模块来处理这 些数据。这会造成各种问题。例如:所有用户都必须 处理函数组中相同的数据结构。如果想要修改某个函 数组的内部数据结构,就会影响很多用户,并且隐含 的修改通常很含预料。
–其他问题是所有用户都会复制数据,很难在做出修改时保持一致。
–在函数组中处理全局数据是很危险的,因为在一个复杂事务中几乎不可能控制好加载的全部函数组。
–这些问题在引入了类之后就都解决了。数据和函数都在类中定义而不用函数组。ABAP 程序可以处理任何数量的运行时实例,它们都基于相同的模版。ABAP 程序不再在调用函数模块时隐含加载一个函数组的单独运行时实例,而是显式的创建类的运行时实例。不 同的运行时实例都是可以唯一标识的对象,使用对象 引用来定位。

•接口

–接口与类分别定义。
–接口可以包含元素的声明,例如属性和方法。
–接口由类来实现。
–类就有一个统一的外部联系点。它们必须通过实现它的方法来提供所有的接口功能。
–在程序中,可以用对引用的接口创建引用变量。然而,不能实例化一个接口。
–接口引用可以指向不同类的对象。

第二课:查找和实现BAdI

•Business Add-Ins:架构

–业务附加,跟客户出口不同,会考虑软件交付流程的变更。从这一点上,它跟BTE 类似,不仅仅包含供应商和客户,还包含了整个中间提供者。
–要想业务附加起作用,需要SAP 应用程序提供了增强选项。至少需要一个接口和一个BAdI 类实现这个接口。接口则由用户来实现。
–这个概念的最大作用在于它的可重用性:BAdI 可以实现多次,在整个软件交付链中的任何一方都可以实现 它。
–业务附加还允许软件交付链的任何一方来提供增强。

•Business Add-Ins:组件

–一个业务附加会包含增强的组件。每个业务附加都可以包含下列组件:
•程序增强:在业务附加里,程序增强的接口以接口方法的形式定义。这个接口用来实现增强。SAP 程序调用生成的业务附加类的接口方法。
•菜单增强:跟客户出口一样,可以在业务附加里输入功能码。这些菜单条目就能在GUI 定义中获得,并且在业务附加被实现后可见。
•屏幕增强:跟客户出口一样,可以在业务附加里定义屏幕增强,然后实现它。
–当定义一个业务附加时会创建几个组件:

•接口
•为实现接口而生成的类(业务附加类)

–生成的类(业务附加类)执行下列任务:

•过滤:如果实现了一个依赖于过滤的业务附加,附加类就确保只有相关的实现被调用。
•控制:适配器类会调用当前的实现。
•Business Add-Ins:程序出口的流程

–本图展示了包含了一次BAdI 调用的程序处理流程。它让我们看到了在业务附加中内在的能力和限制。
在这里插入图片描述
–没有显示的:必须声明一个引用变量,指向在声明段中的BAdI 接口。
–在第一步生成一个对象引用。这会替代SAP 提供的服务类CL_EXITHANDLER。相关语法会在后面讨论。这就生成了调用程序增强方法的条件。
–当定义业务附加时,系统生成一个BAdI 类,实现这个接口。在调用(2) 中,BAdI 类的接口方法被调用。BAdI 类查找业务附加的全部当前实现,并且调用实现的方法。

•Business Add-Ins:SAP 程序中的调用语法

–本页代码展示了调用一个业务附加时使用的语法。数字对应前面的调用步骤。

•首先,必须定义指向BAdI 接口的参考变量。参考变量的名字不一定必须包含BAdI 的名字。
•在第一个调用里,创建对象引用。这会创建一个生成的BAdI 类的实例。只有这个接口的方法 能够使用这个对象引 用来联系。
•可以使用这个对象引用来调用所需的增强 中的有效方法。

REPORT <sap_program>.
DATA r_var TYPE REF TO .

CALL METHOD cl_exithandler=>get_instance
CHANGING instance = r_var.

CALL METHOD r_var->meth_abc
EXPORTING <i_variables>
IMPORTING <e_variables>.

•查找业务附加

–有各种方法来搜索业务附加:

•可以在相关应用程序中搜索字符串“CL_EXITHANDLER”。如果从程序中调用了业务附加,就必须调用它的 “GET_INSTANCE” 方法。
•可以使用向前导航来获得业务附加的定义以及文档。

–双击参考变量
–双击接口
–使用接口的所用处清单
–找到类CL_EX_<BAdI名字>
–事务码SE18
–查看BAdI 的定义和文档

•使用应用层级来限制想要搜索的组件。打开知识库信息系统(SE80),选择“增强->业务附加” 来开始相关的搜索程序。
•此外,还可以在IMG 的相关组件中使用条目。
•实现业务附加:介绍

–要实现业务附加,使用事务码SE19,菜单路径:工具-> ABAP 工作台->实用程序->业务附加->实现。
–输入实现的名字并选择“创建”,会出现一个对话框。输入业务附加的名字,然后出现业务附加的维护屏幕。
–此外,还可以使用业务附加定义事务码SE18 来获得它的实现。菜单中包含条目“实现”,可以用来获得关于现有实现的概览。还可以从这里创建新的实现。
•注意,对于SAP NetWeaver 应用服务器7.0,除了传统的BAdI 以外还有新的BAdI。事务码SE19 的初始屏幕也相应调整。要创建一个传统BAdI 的实现,在初始屏幕下面的输入区域选择“传统BAdI”,在相应字段输入BAdI 名字,并选择按钮“创建实现”。

•实现业务附加:方法

–可以为实现类指定任何名字。然而,遵守一定的命名规则是一个好主意。建议的命名包含如下规则:

•命名空间前缀:Y 或Z
•类前缀CL_
•实现前缀IM_
•实现的名字

–要实现方法,双击它的名字。系统就打开类制作器的编辑器。
–当完成后,必须激活对象。

•实现业务附加:私有方法

–在实现类中,可以创建私有方法,然后从接口方法中调用它们。
–为此,必须直接在类制作器里编辑实现类。创建私有方法和接口。为方法指定一个可见级别并且实现它。

•实现业务附加:激活实现

–使用“激活” 按钮来激活业务附加的实现。从此以后, 实现的方法就回在相关调用程序被执行的时候被执行。

–如果解除了某个实现的激活,方法就不会被调用。然而,应用程序中相应的调用仍然会执行。不同之处在 于适配器类的实例不会找到任何激活的实现。跟 “CALL CUSTOMER-FUNCTION” 不同,“CALL METHOD CL_EXITHANDLER=>GET_INSTANCE” 调用即使没有实现时也会被执行。对于调用适配器类的方法的调用来说也是一样。

–只能在实现的原始系统中激活或者解除激活它,而不能修正。激活或解除激活必须被传输到后续的系统。

–如果业务附加只有一个实现,相同系统中也可以存在不止一个实现。然而,任何时候只能有一个激活。

•业务附加:菜单出口(概览)

–跟使用客户出口一样,可以在业务附加中使用菜单增强。然而,必须满足下列条件:

•程序开发者必须已经为程序计划了增强。
•菜单增强必须已经在一个BAdI 实现中实现了。
•业务附加:菜单出口(SAP 的准备)

–菜单增强的功能码用加号开始。
–如果一个激活的BAdI 实现包含了相应的增强,则相应菜单条目就会出现。

•业务附加:菜单出口(功能码处理)

–如果用户在程序中选择了功能码以加号开头的菜单条目,系统就会处理相关的方法调用。
–方法调用和菜单增强互相不可分离。只有 前者而没有后者就毫 无意义。因此,把这 两个增强组件合并到 一个独立增强——业务附加——中是非常重要的。

PROGRAM <sap_program>.
DATA ok_code LIKE sy-ucomm.
DATA r_var TYPE REF TO <badi-interface>.
...
CASE ok_code.
WHEN 'DISP'.
...
WHEN '+XXX'.
CALL METHOD r_var-><meth_abc>
EXPORTING <i_variables>
IMPORTING <e_variables>
...
END CASE.
•业务附加:菜单出口(限制)

–只能为单独使用业务附加来创建功能码。此外,业务附加一定不能依赖于过滤器。
–这些限制用来确保在两个或多个实现之间不存在冲突(该显示哪个菜单条目)。

第三课:定义BADI

•业务附加定义:介绍

–要创建一个业务附加,使用BAdI 制作器,菜单路径“工具-ABAP 工作台-实用程序-业务附加-定义”, 或者事务码SE18。
–在SAP NetWeaver 应用服务器7.0 前,初始屏幕只有一个名字输入栏和相应按钮。
–在SAP NetWeaver 应用服务器7.0 后,还有新BAdI,包含在一个被称为增强场所(Enhancement Spot)的对象中(关于这点,请参见附录中的介绍)。这时要创建传统BAdI,需要选择菜单选项“实用程序-创建传统BAdI”。

•业务附加定义:属性

–业务附加具有两个必须定义的重要属性:

•可重用
•依赖过滤器

–如果选中了“可重用” 复选框,对于业务附加就可以存在多个实现。这些实现将会被处理的顺序并未定义。 即使业务附加不支持多重使用,仍可以为它开发多个 实现。然而,同时只能有一个实现被激活。
–如果让一个业务附加为依赖过滤器,就可以依赖于特定条件来调用它。必须指定以ABAP 字典中的数据元素或结构形式出现的过滤器类型。数据元素使用的域 的值表包含关于实现的有效值。如果使用结构做为过 滤器类型,对于单字段的结构也是这样的。
–当增强方法被调用,过滤值必须被传递给接口。

•业务附加定义:为菜单出口的限制

–可以在业务附加定义中包含功能码(类似客户出口中的菜单出口)。为此,在相关的选项页输入程序名和 功能码,以及短描述。
–限制:

•当前还不能创建值包含菜单增强(功能码)的BAdI。
•如果使用菜单增强,就不能重用BAdI 或者让它依赖于过滤器。
•业务附加定义:定义接口方法

–系统为接口和生成的类建议一个名字。你一般可以修改这个接口名字为自己需要的。然而,如果保留建议 的名字,BAdI 会比较容易理解。
–生成的类名按下列规则组成:

•命名空间前缀
•CL_(意味着一般的类)
•EX_(代表出口)
•业务附加的名字(不带命名空间前缀)

–如果双击接口名,系统会切换到类制作器,这里可以定义接口的方法。
–业务附加接口可以具有多个接口方法。

•业务附加定义:方法接口参数

–可以使用类制作器的所有标准功能,例如,可以:

•定义接口方法
•为方法定义接口参数
•声明接口的属性

–如果业务附加是依赖于过滤器的,必须为每个方法定义一个输入参数flt-val,否则,就定义增强所需的接口参数。

•业务附加定义:激活BAdI 接口

–一旦完成了接口的工作,就必须激活它。这会为业务附加生成BAdI 类。
–如果修改了接口,BAdI 类会自动重新生成。
–可以在任何时候显式的生成BAdI 类,从业务附加维护事务的初始屏幕选择“使用程序-重新生成”。

•业务附加定义:在程序中调用

–要在应用程序中调用业务附加方法,必须在程序中包含下列语句:
–用对业务附加接口的引用来声明一个引用变量。
–调用服务类CL_EXITHANDLER 的静态方法GET_INSTANCE。这会返回所需对象的一个实例。这包含了一个隐式的向下转型,这样只有引用变量指向 对象的接口方法才可以被调用。
–现在可以调用业务附加的所有方法了。确保正确的指定了方法的接口。

•调用依赖于过滤器的业务附加

–如果业务附加是依赖于过滤器的,必须传递相应值给参数flt_val.

REPORT <sap_program>.
DATA: r_var TYPE REF TO <badi-interface>.
...
CALL METHOD cl_exithandler=>get_instance
CHANGING instance = r_var.
...
CALL METHOD r_var-><method>
EXPORTING
flt_val = <filter_value>   “对于一般业务附加,不需要加flt_val 参数;对于带过滤器的附加,则必须加这个参数。
<i_variables>
IMPORTING
<e_variables>.
...

第四课:创建BAdI 屏幕出口

•BAdI 屏幕出口:基本原理

–ABAP 虚拟机无法识别绑定到类的屏幕。因此,只有程序类型为1、F 或M 的程序可以用来包含屏幕。屏幕增强必须考虑这个问题。
–当创建业务附加的屏幕增强时,提供者在应用程序屏幕上保留了子屏幕区域,然后用实现类的子屏幕填充 这一区域(类似客户出口)。然而,应用程序和程序 的子屏幕容器不会直接通讯。它们使用生成的BAdI 类通讯。
–下面会一步一步的介绍这个通讯过程。

•BAdI 屏幕出口:组件

–如果某个BAdI 包含一个或多个屏幕增强,就不能被标记为可重用。如果它还包含菜单增强,它也就不能 是依赖于过滤器的。
–再子屏幕选项卡上输入调用程序、屏幕号和子屏幕区域。实现程序的名称和子屏幕的屏幕号都会由以后的 实现开发者来指定。

•BAdI 屏幕出口:子屏幕容器程序的PBO

–要使用BAdI 来提供一个屏幕增强,必须实现应用屏幕的下列步骤:

•生成业务附加的类实例
•发布实例,这样应用类可以访问它
•指定实现的程序名和屏幕号
•让数据对于子屏幕可用
•把子屏幕集成到子屏幕区域
•BAdI 屏幕出口:子屏幕容器程序的PAI

–在子屏幕容器屏幕的PAI 中,子屏幕必须被再次调用——并且依赖于增强的设计——子屏幕上被用户修改的数据必须被加载到应用程序。
–在PAI 中需要:

•调用子屏幕
•从子屏幕获得用户输入
•PBO 步骤一:创建BAdI 实例

–在第一步,要生成一个附加类的实例,跟功能增强一样。通过调用类CL_EXITHANDLER 的GET_INSTANCE 静态方法来完成。

•PBO 步骤二:发布实例

–接下来,实现需要访问BAdI 类的实例。因此,需要发布这个实例。为此,调用标准类 CL_EXITHANDLER 的静态方法SET_INSTANCE_FOR_SUBSCREENS。

•PBO 步骤三:提供子屏幕号

–必须在容器屏幕的PBO 中为语句CALL SUBSCREEN 的实现确定子屏幕的屏幕号以及相应的程序。为此,调用方法CALL MOTHOD cl_exithandler=>get_prog_and_dynp_for_subscr。
–如果还没有激活的实现,方法就会从现有的虚拟函数组(SAPLSEXM)中返回一个空的虚拟子屏幕(0200)。
–如果有一个想要使用的BAdI 定义的激活的实现,在实现中指定的子屏幕屏幕就会被使用。

•PBO 步骤四:提供数据

–要让数据传递给实现,需要两步来传递:
–传递数据给业务附加类。这样传输的数据存储再这个方法的实现的全局属性中。强烈建议在这一点提供示 例代码。数据通过调用BAdI 中定义的方法来传递。
–如果存在激活的实现的话,存储在BAdI 类的全局属性的数据被自动传递给实现类的全局属性。

•PBO 步骤五:集成子屏幕

–最后,应用程序调用子屏幕屏幕。
•PAI 步骤:调用子屏幕和加载数据
–如果用户在子屏幕上做出的条目需要被加载到应用程序进一步处理,必须调用相应的方法。

第五课:实现BAdI 屏幕出口

•实现BAdI 屏幕出口:步骤

–要实现一个业务附加的屏幕增强,需要:

•为附加的定义创建实现。指定包含子屏幕屏幕和屏幕号的程序。
•创建在BAdI 实现中指定的程序。
•创建和布局子屏幕屏幕。

–如果想要在子屏幕上被修改的数据被返回给应用程序,必须调用子屏幕屏幕PAI 中相应的方法。

•PBO 步骤一:提供BAdI 实例

–要获得业务附加类的实例的引用,使用类CL_EXITHANDLER 中的方法GET_INSTANCE_FOR_SUBSCREENS。

•PBO 步骤二:提供子屏幕数据

–实现程序通过调用相应方法来获得要显示在子屏幕上的数据。数据被存储在实现程序的全局变量中,在 PBO 结束时填写相应的子屏幕字段。

•PAI 步骤:返回数据

–如果想要子屏幕上的数据可以被修改,然后应该确保被修改的数据返回给应用程序,这样它们可以被用于 进一步处理。可以调用相应的业务附加方法来完成这 个工作。

•第八单元:修正

•单元内容

–什么是修正
–做出修正
–修正助手
–修正浏览器
–用户出口
–SAP Note 助手
–修正调整

•在本单元结束,你应该可以:

–描述什么是修正
–列出在修正过程中遵守的最重要的规则
–使用修正助手来实现修正
–使用用户出口来实现增强
–使用Note 助手来维护SAP Notes
–调整修正

•第九单元:摘要

•第十单元:附录

第一单元:课程概览

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值