[ZT]Enhancement-01

Enhancement(1)--BTEs架构

最近一个同事碰到一个FI的加强,要用BTEs实现,我也是第一次接触到这种加强,因此跟着他一块儿作了一下。写一个这方面的小节。app

   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是否被修改。post

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

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 .  this

 

 

Enhancement(2)--Dictionary Elementscode

 

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

    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 都 会有相应的使用说明。ci

例子:element

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

本站公众号
   欢迎关注本站公众号,获取更多信息