午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

增強(qiáng)方式、方法總結(jié)

 細(xì)想生活 2014-10-15

 增強(qiáng)(enhancement)的概念其實很廣,SAP標(biāo)準(zhǔn)系統(tǒng)之上的所有二次開發(fā),我們都可以理解為增強(qiáng),做增強(qiáng)的目的就是標(biāo)準(zhǔn)的sap正常的業(yè)務(wù)系統(tǒng)不能滿足實際需求,所以我們在標(biāo)準(zhǔn)的系統(tǒng)基礎(chǔ)進(jìn)行增加不同的功能來達(dá)到不同企業(yè)的要求,換句話說我們今天開發(fā)過程中所有的ADD-ON都可以說是增強(qiáng)開發(fā)。

 但作為開發(fā)人員所說的增強(qiáng)主要是標(biāo)準(zhǔn)系統(tǒng)事先預(yù)留好的接口,根據(jù)不同業(yè)務(wù)需求,進(jìn)行開發(fā),我們稱為增強(qiáng),又叫出口。

比如:1:在業(yè)務(wù)檢查時,比如在某個工廠發(fā)貨,可以設(shè)定在某個庫位的出貨只能使用某種移動類型。2:在需要界面增強(qiáng)時,比如用戶對某個字段要求大寫,但是最終用戶不按規(guī)范操作,這也可以在出口中自動轉(zhuǎn)換,有些模塊甚至能自定義數(shù)據(jù)庫字段,并且可以在出口中增加字段輸入。還有的模塊能對輸入數(shù)據(jù)檢查,甚至實現(xiàn)自動替代等功能。3:有不規(guī)則業(yè)務(wù)時,比如按某種條件定價,可以設(shè)定從自己定義的表中按某種條件取值 4:搜索幫助的出口,可以對Sap標(biāo)準(zhǔn)的搜索幫助做權(quán)限控制。等等。

 Sap的用戶出口發(fā)展至今有四代:

一、          第一代(基于源代碼的增強(qiáng))是sap提供一個空代碼的子過程,在這個子過程中用戶可以添加自己的代碼,控制自己的需求。這類增強(qiáng)都需要修改sap的標(biāo)準(zhǔn)代碼,它們在發(fā)布的時候都是空的,集中在一些文件名倒數(shù)第二個字符為Z的包含程序中,由于在標(biāo)準(zhǔn)程序中,所以所有程序的全局?jǐn)?shù)據(jù)都可以使用,但同時系統(tǒng)升級時會被新版本覆蓋;這種源代碼增強(qiáng)和屏幕增強(qiáng)的說明可以從事務(wù)碼 spro 后臺配置中相關(guān)模塊的路徑里面找到;一般是以UserExit_打頭的子模塊。

找到所要增強(qiáng)的的程序,查找UserExit關(guān)鍵字。

這類增強(qiáng)事先要到 service marketplace 申請對象鍵(ACCESS KEY),然后才能修改這些子程序。

查找此類出口的方法:

1、  在增強(qiáng)程序中找第二個字符為Z的包含程序;

2、  在后臺找對應(yīng)模塊增強(qiáng);

3、  在程序中搜索USEREXIT_打頭的關(guān)鍵字子程序;

4、  字節(jié)列出對象列表“Display Object List”按鈕,在Subroutines列表下找“userexit”打頭的子程序;                  

二、  第二代增強(qiáng)(基于函數(shù)模塊的增強(qiáng)),用SMODCMOD維護(hù);在SAP發(fā)布的版本中,使用Call customer-function ‘xxx’調(diào)用函數(shù)模塊的,所以你可以通過在程序中收cusomer-function來查找第二代增強(qiáng),第二代增強(qiáng)函數(shù)名構(gòu)成:Exit_程序名_’xxx(3 digital number)’,這樣你就可以找到對應(yīng)的增強(qiáng)函數(shù)模塊了,它們在發(fā)布的時候只有一句代碼include ‘xxxxxxx’,修改時無需像第一代增強(qiáng)一樣需要ACCESS key,直接雙擊回車就可以了,但同時這種增強(qiáng)以及后面幾代的增強(qiáng)都不能像第一代一樣隨便使用程序的全局?jǐn)?shù)據(jù),只能使用接口中傳遞進(jìn)來的參數(shù)。

第二代增強(qiáng)中主要有3類:1E . Ehancement exits:         這些出口 Exit_打頭,你可以到SE37中查看,也可以在數(shù)據(jù)字典中TFDIR(函數(shù)表)中查詢Exit_打頭的函數(shù)。2C .GUI codes,     (GUI增強(qiáng)) 3)S . Subscreens(屏幕增強(qiáng))。4T. include structure增強(qiáng)

 Enhancement比較重要的表MODSAP,這個表里重要的字段增強(qiáng)名(Name),組件類型(TYP: E C S T,組件功能模塊名(Member):里面記錄了所有enhancement的增強(qiáng).TFDIR所有的函數(shù)表,重要字段FUNCName(函數(shù)名),MAND(功能模塊激活狀態(tài) 如果是C代表此函數(shù)模塊激活)

  查找Enhancement的方法:

1、             在程序中搜索Customer-function找到后面的3digit suffix,然后出口函數(shù)組成就是Exit_程序名_3 digit suffix.

2、             代碼找增強(qiáng) 利用如下代碼找enhancement(有些exit使用它并不能找到)

REPORT  ZLC_FIND_EXIT no standard page heading.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.

select single from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
  
select single from tadir where pgmid = 'R3TR'
  
and object = 'PROG'
  
and obj_name = tstc-pgmna.
  
move : tadir-devclass to v_devclass.
  
if sy-subrc ne 0.
    
select single from trdir where name = tstc-pgmna.
    
if trdir-subc eq 'F'.
      
select single from tfdir where pname = tstc-pgmna.
      
select single from enlfdir where funcname =
      tfdir-funcname.
      
select single from tadir where pgmid = 'R3TR'
      
and object = 'FUGR'
      
and obj_name eq enlfdir-area.

      
move : tadir-devclass to v_devclass.
    endif.
  endif.
  
select from tadir into table jtab
  
where pgmid = 'R3TR'
  
and object = 'SMOD'
  
and devclass = v_devclass.
  
select single from tstct where sprsl eq sy-langu and
  tcode 
eq p_tcode.
  
format color col_positive intensified off.
  write:/(19) 
'Transaction Code - ',
  20(20) p_tcode,
  45(50) tstct-ttext.
  skip.
  
if not jtab[] is initial.
    write:/(95) sy-uline.
    
format color col_heading intensified on.
    write:/1 sy-vline,
    
'Exit Name',
    
21 sy-vline ,
    
22 'Description',
    
95 sy-vline.
    write:/(95) sy-uline.
    
loop at jtab.
      
select single from modsapt
      
where sprsl = sy-langu and
      name = jtab-obj_name.
      
format color col_normal intensified off.
      write:/1 sy-vline,
      
jtab-obj_name hotspot on,
      
21 sy-vline ,
      
22 modsapt-modtext,
      
95 sy-vline.
    endloop.
    write:/(95) sy-uline.
    
describe table jtab.
    skip.
    
format color col_total intensified on.
    write:/ 
'No of Exits:' , sy-tfill.
  else.
    
format color col_negative intensified on.
    write:/(95) 
'No User Exit exists'.
  endif.
else.
  
format color col_negative intensified on.
  write:/(95) 
'Transaction Code Does Not Exist'.
endif.

at line-selection.
  
get cursor field field1.
  
check field1(4) eq 'JTAB'.
  
set parameter id 'MON' field sy-lisel+1(10).
  
call transaction 'SMOD' and skip first screen.

3、             利用系統(tǒng)函數(shù)尋找增強(qiáng)

Function:

[1].DYNP_VALUES_READ

[2]. MODX_ALL_ACTIVE_MENUENTRIES(菜單增強(qiáng))

[3].MODX_FUNCTION_ACTIVE_CHECK(出口函數(shù)增強(qiáng))

 [4].MODX_MENUENTRY_ACTIVE_CHECK(菜單增強(qiáng))

[5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增強(qiáng))

我們可以在函數(shù)最后設(shè)置斷點,然后通過跑對應(yīng)的增強(qiáng)程序就會去調(diào)用這樣的函數(shù),這樣你就可以在調(diào)試模式下找到對應(yīng)的增強(qiáng)。

 

  下面附加出幾個重要的表:

Table:

[1]. TFDIR->function module table

[2]. MODSAP->sap enhancement table

[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增強(qiáng))

[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜單文本增強(qiáng))

[5].MODSAPA àsap 增強(qiáng)的屬性

[6] MODATTRàsap增強(qiáng)項目屬性

[7] TADIR à資源庫對象的目錄

[8] TFTITà函數(shù)功能的短文本

注意:出口真正應(yīng)用是要在激活的狀態(tài)下,也就是在TFIDR下的MAND字段為C.激活的時候要同時激活程序(se38)和出口函數(shù)(smod, cmod,出口程序都可)

當(dāng)然一般情況,我們知道出口模塊到modsap中找到對應(yīng)的增強(qiáng)。可以通過下面的程序?qū)⑵浼せ睢?/span>

REPORT Zactexitfun .

update tfdir set MAND = 'C'.

where FUNcname = 'EXIT_SAPMM06E_013'.

 

*判斷是否存在相應(yīng)增強(qiáng)的定義(SMOD)

    select single name

      from  modsapa

       into mod0-name

      where name   = 'PPCO0002'.

    if sy-subrc = 0.

    endif.

    select single *

     from tadir

    into ps_tadir_db

    where pgmid      =   'R3TR'

    and   object     =  'SMOD'

    and   obj_name   =  'PPCO0002'.

 

*判斷是否存在相應(yīng)增強(qiáng)項目的定義(CMOD)

          SELECT SINGLE name FROM MODATTR into mod0-name

                 WHERE NAME   = 'PPCO0002'.

 

*提取增強(qiáng)的定義的組件 (可以用此反查增強(qiáng)定義)
  select * from modsap
         where name = 'PPCO0002'.

當(dāng)然我們可以用下面的函數(shù)來找增強(qiáng)的組件。MOD_SAP_MEMBER_TEXT

 

*獲得出口功能模塊的信息
      select single * from tftit
             where "SPRAS" = '1' AND "FUNCNAME" = 'EXIT_SAPLCORE_001'
      if sy-subrc = 0.
      endif.

 

*判斷該增強(qiáng)是否移植到BADI實現(xiàn)

  select single migrated     into migrated

        from modsapa where name = modname.

  if sy-subrc = 0 and migrated = x.

   說明此增強(qiáng)已經(jīng)移植到BADI實現(xiàn)了

  endif.

 

三、  第三代增強(qiáng)(基于面向?qū)ο蟾拍畹脑鰪?qiáng)BADIbusiness add-in),源代碼發(fā)布以接口的方式,通過接口的方法調(diào)用來實現(xiàn)使用的。用戶增強(qiáng)實際上是實現(xiàn)一個或多個基于這個接口的實現(xiàn)類,因為接口類實際上是一個抽象類,所以對同一個增強(qiáng)會出現(xiàn)不同的源代碼,這些不同的源代碼是通過過濾器(adapter)來區(qū)別用于不同的業(yè)務(wù)場景的。這種增強(qiáng)是用SE18 SE19來實現(xiàn)的。

BADI的查找方法:

1、             BADI對象的信息存儲在SXS_INTER,SXC_EXIT,SXC_CLASSSXC_ATTR這四個表中。

2、             SAP BADI程序都會調(diào)用cl_exithandler=>get_instance來判斷對象是否存在,并返回實例,這個方法實際就是對上面4個表和視圖V_EXT_IMPV_EXT_ACT進(jìn)行查詢和搜索的。我們可以在這個方法處設(shè)置斷點,獲取實例。

3、             它的調(diào)用方式是call method(instance), 可以通過exit_handler關(guān)鍵詞來查找。

4、             ST05選擇“table buffer trace”而不是常用的"SQL trace",然后查找上面的幾個表和視圖找到對應(yīng)的BADI.

5、             se18 查找接口,se19 實現(xiàn)接口就可以實現(xiàn)用戶增強(qiáng)

 

四、  第四代其實是第三代的加強(qiáng)switch Framework

當(dāng)sap進(jìn)入newweaver 7.0以后推出的新增強(qiáng)體系,將BADI進(jìn)行了改進(jìn),叫新BADI了。還新增 Enhancement Spot Enhancement Section 以及隱式增強(qiáng)點的概念,基本可以在面向?qū)ο蟮某绦蚶飳崿F(xiàn)處處皆可增強(qiáng)的最高境界。

     

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多