转自https://www.cnblogs.com/Garfield/p/5313962.html

Enhancement(1)--BTEs

最近一个同事碰到一个FI的增强,要用BTEs实现,我也是第一次接触到这种增强,所以跟着他一起做了一下。写一个这方面的小节。

   BTEs(Business Transaction Events),是SAP的一种增强方式,技术上讲是介于Customer Exits和BAdIs的产物。
   它主要有两种类型的接口:
   Publish and Subscribe Interface
   Process Interface
   其比较核心的理念是,使一个接口重复利用,多种实现并且互不干扰。而技术实现的时候,就采用在标准程序中Call固定的一个functioin,然后再用 这个function动态调用自己定义的增强function,从而达到预期目的。
   这样的接口,在标准程序中常常是以OPEN_FI_PERFORM_或者OUTBOUND_CALL_开头的function。
由于采用这种技术架构,SAP就使这些接口,分为Made by SAP, Made by SAP's Partner, Made by SAP's Customer,三方可以个取所需。
   至于Publish and Subscribe Interface和Process Interface的区别,主要还是用途上的。前者,使给外部软件提供信息的,而后者主要用于R/3流程的。不过前者也可以生成或修改一些 additional data。
   BTEs主要用于总帐,应收应付和销售分销模块。
   我做的那个是Process Interface,说来也很简单,就是在billing posting的时候,把Head的text改掉。
   下面,我来说一下流程。
  1. T-code: FIBF 进入BTEs的界面
  2. Environment->Infosystem(Processes)->运行->Process 00001120->Sample function module, 然后复制这个function到自己的Z或Y程序中->编辑新复制的程序,加入自己的代码
  3. 回到FIFB界面,Settings->Products->...of customer->New Entries加入自己的product,并激活
  4. 回到FIFB界面,Settings->Process Modules->... of customer->新建主键是 00001120的Process,并将刚才建立的function module和product写到相应栏位。

之后,运行相应的过账程序,诸如T-CODE VF01或是FB01,生成财务凭证,察看凭证的HEAD TEXT是否被修改。

原代码不方便贴,就放些关键的代码。

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; }   LOOP  AT  T_BKPFSUB.
    T_BKPFSUB-BKTXT = 'KEVIN BTEs' .
    MODIFY  T_BKPFSUB INDEX  SY-TABIX.
  ENDLOOP .

Enhancement(2)--Dictionary Elements

对于透明表及结构的增强,主要两种。一种是Append Structure,还有一种就是Include形式。

    Append Structure可以扩展原来的表结构,但是并不是在原来的表上加字段,而是再建一个附加的结构,物理上,数据是存在两处的。而且,一个Append Structure只能有一张表结构。如果把有Append Structure结构的表进行复制的话,那么在新的表中,原有的Append Structure就变成了固定字段,物理表也变成了一张。
    Include格式,多见于由于增强而自动生成的表字段,比如做屏幕增强的时候。当然,你也可以自己定义。相比Append Structure, Include就可以包含多张表结构(Include的Data Elements可以Append Structure)。它不具有Append Structure的‘复制’性能,即使复制,还是会以原结构存在于新表中。
当你做完增强后,如果想所加字段在SM30表维护中也出现,那么需要通过以下路径生成表维护程序:
SE11->进入相应表,并做完增强->Utilities->Table Maintenance Generator
    如果你要反复地更改增强,比如改变某一字段的长度。那么在减少字段时,需用SE14进行物理表的修改,否则无法激活。
    有一种情况要注意,原有数据表中存在数据时,Append Structure或Include增强,不会影响原有数据,只会在原有的数据中加上相应的空白字段。如果,将字段的长度减少时,数据的就会丢失,一般是 从尾部开始丢失。所以不建议,在已有数据的情况下,减少字段长度。
    下面将以下我碰到的一个实际例子。
    由于业务的需要,一个标准表的标准字段长度不够,这时候就要增强字段长度。我那时候想了3套方案。
    1.直接增加字段长度。
    (由于这个字段有一定的命名规则,程序会截取字符进行进行判断,直接增加字段长度,直接修改代价比较大)
    2.Apend一个附加字段,在逻辑判断的时候,将附加字段和原有字段综合起来进行判断。
    (要修改相应的程序)
    3.由于这个字段是用来Mapping的,有它一定的命名规则。改变原有的命名规则,延长这个字段的使用寿命。
     现在还没定出来使用哪个。不过个人感觉,如果一开始架构的时候能对业务增长有一个比较可靠的估计,那么碰到这种情况的概率也会大大减少。毕竟,上线后再做 修改和增强,已经属于费力的工程了。
  
     对于字典文档的增强,可以在以下路径中做:
     CMOD->GoTo->Text enhancements->Data elements/Keywords
 
 
Enhancement(3)--User Exits
User Exits是SAP第一代增强技术,其技术原理就是在程序中预先置放一个Form...EndForm的子程序,并在事物运行时Call这个Form。当 然,如果这个Form是空的,那么不执行任何操作,反之,执行相应的动作。User Exits的写法,和修改标准程序是一致的,要有向SAP申请Access Key才能对这些程序进行修改。与修改标程的区别在于,在SAP做升级的时候,User Exits会自动保留,标程的修改如果不做特殊处理,就会被覆盖。

    在做这样的增强时,要养成一个习惯,那就是把你所要添加的代码都写在自己以Z开头的function中,然后在Form中调用这个function。
例如:
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style: italic; color: #808080; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } FORM  Add  .
 CALL  FUNCTION  'ZGDTEST' 
   EXPORTING 
     I_CHAR        =
     I_FLOAT       =
*  IMPORTING 
*    E_DATE        = 
*    E_CHAR        = 
*    E_VAR         = 
           .
ENDFORM .             
下面来讲一下,如何找到此类出口:

方法 1:

SPRO -> SAP Reference IMG ,按  , Search Term 中填入 ’USER EXIT’ 就可以查到每个模块相应的出口了,每个出口 SAP 都 会有相应的使用说明。

例子:

User Exits In Sales Document Processing

程序: MV45AFZZ

出口名: USEREXIT_SAVE_DOCUMENT

使用说明:

Use this user exit to fill user-specific statistics update tables.

The user exit is called up by the FORM routine BELEG-SICHERN before the COMMIT command.

Note

If a standard field is changed, the field r185d-dataloss is set to X. The system queries this indicator at the beginning of the safety routine. This is why this indicator must also be set during the maintenance of user-specific tables that are also to be saved.

方法二

进入你要做增强的那个 screen ,找到相应的程序名,例 : va01 以下屏幕的程序就是 SAPMV45A

BTE增强的更多相关文章

  1. BTE 增强

    BTE的设计思路还是比较简单,和BADI有点类似.在标准程序中留有OPEN_FI的出口(以函数OPEN_FI_PERFORM_event id_type的形式存在),然后提供一个可配置的TABLE,可 ...

  2. BTE增强解析

    原理:转载http://blog.csdn.net/wbin9752/article/details/7954663 BTEs(Business Transaction Events),是SAP的一种 ...

  3. BTE的一些知识

    1.今天遇到一个问题,看项目上做了BTE增强00001120 事件的BTE 但是自定义函数  更改了参数  t_bseg  t_bkpf MODIFY t_bkpf FROM ls_bkpf TRAN ...

  4. 20170523 BSEG替代付款条件-ZTERM 天数-ZBD1T

    增强方式:替代,[替代基本用在FICO模块]BTE增强方式应用更广,需要学习总结. 程序:ZRGGBS* 步骤 1,SE16N:GB01 将 ZBD1T排除标记置为空,[注意,此更改跨client,d ...

  5. SAP 第四代增强-BTE

    第四代BTE实例详解:http://blog.csdn.net/wbin9752/article/details/7954922 第三代增强(BADI实例详解) :http://blog.csdn.n ...

  6. SAP增强Enhancement

    第一代:基于源码增强(子过程subroutine) 第一代增强基于源代码,是SAP提供的一个空代码的子过程.在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强集中在一些文件名倒数第二个字符 ...

  7. SAP 4代增强

    *20170325 160000 以下之外, 还有:.替代, -用过一次:.BTE -没用过,需要学习: 第二代增强和第三代增强的差别: 1.Tcode 不同:第二代: CMOD 增强管理,SMOD ...

  8. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  9. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

随机推荐

  1. Linux教程 Find命令的使用

    Linux中的Find(查找)命令是在Linux系统中最重要并且更有用的命令之一.Find命令主要用于指定匹配文件条件的参数查找或者定位文件和目录的列表.Find命令能够被使用基于各种各样的条件,例如 ...

  2. 正则表达式匹配IP地址

    '''首先分析ip地址的特征:255.255.255.255,前三位的数字处理基本一致 1位: 0-9              \d2位:10-99         [1-9]\d3位:100-19 ...

  3. ubuntu下后台服务的管理

    注册后台服务后都有脚本存在/lib/systemd/system路径下 如mysql为mysql.service 被service管理的进程被杀掉还是会重启的 应使用service XXX stop停 ...

  4. 四、vue基础--自定义组件

    1.语法:Vue.component("组件名字",{data,template}),代码如下: a. data: 必须是一个函数,有一个返回值.和vue里面的使用方法一样 b. ...

  5. Codeforces Round #590 (Div. 3)【D题:26棵树状数组维护字符出现次数】

    A题 题意:给你 n 个数 , 你需要改变这些数使得这 n 个数的值相等 , 并且要求改变后所有数的和需大于等于原来的所有数字的和 , 然后输出满足题意且改变后最小的数值. AC代码: #includ ...

  6. luogu 2114 [NOI2014]起床困难综合症 位运算+贪心

    感觉这个思路非常巧妙啊~ code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s&qu ...

  7. Luogu4191 [CTSC2010]性能优化【多项式,循环卷积】

    题目描述:设$A,B$为$n-1$次多项式,求$A*B^C$在系数模$n+1$,长度为$n$的循环卷积. 数据范围:$n\leq 5*10^5,C\leq 10^9$,且$n$的质因子不超过7,$n+ ...

  8. 前端使用lodop如何获取打印状态

    前面已经说过,如何简单使用lodop了,今天说一下如何获得lodop的打印状态? 在教程里面找了半天,摸索出来了一套. template: <!-- 实验代码 --> <div> ...

  9. Fltiss项目的架构、包名的定义和类的划分

    这是项目的一览 首先Web根目录. 除了WEB-INF以外,还有css,img,js,lib目录,这四者都是静态资源. 由于客户端无法访问WEB-INF下的内容,所以将它们放置在了Web根目录下. 而 ...

  10. java试题复盘——9月8日

    上: 1.可将语句块或方法设为同步使用的语句是(A) A synchronized              用于方法或者代码块前,使此方法或者代码变成同步的 B static             ...