?

SAP軟件中的程序對象管理

2017-03-01 09:34李林王春波
中國新通信 2016年23期

李林+王春波

【摘要】 SAP系統是一種企業資源管理軟件,其由德國SAP公司開發,并成功應用于80%的世界500強企業,而在SAP軟件的使用過程中,大部分公司都會使用SAP公司提供的ABAP高級開發語言進行了本地化系統改造, ABAP語言編寫的SAP程序一般由多種類型的程序對象組成,這些程序對象類型之間ABAP語言定義了之間的關聯關系,但是SAP公司卻沒有明確說明,本文通過對程序對象類型的分析,得到常用的程序對象類型之間的父子關系。這一點可以幫助我們理解ABAP語言的整體架構,有助于我們進行程序開發及企業對自己定制化開發的程序對象進行有效管理。

【關鍵詞】 SAP ABAP程序 程序對象

在SAP系統中,進行本地化開發與配置時,會生成不同類型的開發對象,這些開發對象以數據的形式,存儲在系統的數據庫表中,其通過PGMID、OBJECT、OBJ_NAME三個字段來唯一標識一個開發對象。

第一個字段PGMID是指程序標識的一組編碼,一般包括: R3TR、LIMU、CORR幾個值,其各自的具體含義如下:

R3TR是表示其內容是程序對象,指SAP中各種類型的開發內容的一種抽象叫法,是程序開發內容的一種載體,如類、可執行程序、接口等。

LIMU也是指其包含的內容是程序對象,但其與R3TR的區別在于,其標識的是R3TR類型的對象的子對象,舉例以“可執行程序”這種程序對象來說,一個“可執行程序”類型的對象,包括多個子類型的對象,如“程序屏幕”,指可給用戶看到的主屏幕、子屏幕、選擇屏幕等;再如“源代碼”對象,指程序中執行的主體ABAP代碼語句;可執行程序還可以包括“文本元素”對象,用于在選擇屏幕上展示字段的標簽,或在程序源代碼中作為文本常量進行使用。

CORR是指備注、注釋之類的信息,其不包含具體的程序對象和開發內容。如一批對象所在的傳輸請求號,對象釋放的具體日期、時間,以及開發者信息。

第二個字段OBJECT是用來表明對象的類型具體是什么的一組編碼,如為主程序(PROG)類型、源代碼(REPT)類型、文本元素(REPS)類型、程序屏幕(DYNP)等。OBJECT所包含的類型,涵蓋了ABAP程序語言所有已定義的程序對象類型,從而將所有的程序對象,進行了明確的分類,用以管理程序對象在軟件平臺中的存儲、分析、以及組織整個系統有效地運行。

第三個字段OBJ_NAME就是指具體的程序對象名稱了,如程序的名稱,數據庫表的名稱,接口的名稱等等。

當一個程序對象激活時,SAP系統會從數據庫中讀取需要的對象內容,然后根據其類型不同,執行不同的處理機制,形成不同的實際物理對象,如數據庫表、編譯后的程序文件等。

SAP中所有基于ABAP開發的程序對象都有一個對象類型,不同的對象類型與對象類型之間,存在著特定架構關系。如某個報表,其對象類型可以是主程序(PROG)類型,其可能包含源代碼(REPT)類型、文本元素(REPS)類型、程序屏幕(DYNP)類型,這說明他們之間是父子關系,而文本元素(REPS)類型和程序屏幕(DYNP)類型是相互獨立的關系,不存在關聯關系。因此可以理解為一個“主程序類型”的父開發對象,包含“源代碼類型”、“文本元素類型”、“程序屏幕類型”幾個子類型的開發對象,也可以說成“主程序”開發對象由“源代碼”、“文本元素”、“程序屏幕”幾個子開發對象組成。

以上只是列舉了其中的一個例子,來說明對象類型之間的關系,那么SAP系統中存在很多的開發對象類型,問題來了,如此多的對象類型,SAP是如何進行有組織的管理呢?作為開發者,該如何找到這些關系模型呢?

實際上SAP在開發ABAP開發平臺時已經考慮到這一點,其在ABAP平臺中設立了管理這些程序對象類型的方法。這里將SAP開發對象類型定義成兩種大的類型集合,用以組織對象類型之間的關系。一種以PGMID為R3TR 的父類型集合,一種是以PGMID為LIMU 的子類型集合,根據這種定義方式,一個父類型可以包含一個或者多個子類型,一個子類型只屬于一個父類型。另外根據SAP數據視圖EUOBJV,可以查詢某個父類型包含哪些子類型,以及一個子類型屬于哪個父類型。

上圖1描述了實現流程,從ABAP的代碼角度具體的實現方法如下:

1.設計ABAP程序函數,實現子類型尋找父類型的功能函數。函數輸入為子類型OBJECT編碼,定義類型為CHAR4,輸出為父類型OBJECT編碼,定義類型為CHAR4。

2.函數邏輯參考邏輯流程圖“子類型尋找父類型”,首先判斷輸入的類型是否存在,再使用下列實例SQL語句取出父類型

SELECT SINGLE tadir INTO ex_object

FROM euobjv WHERE id = in_object.

3.上述SQL語句輸出的ex_object變量作為返回參數,即為父類型OBJECT編碼。

4.設計ABAP程序函數,實現父類型尋找子類型的功能函數。函數輸入為父類型OBJECT編碼,定義類型為CHAR4,輸出為子類型OBJECT編碼列表,定義為內表格式。

5.函數邏輯參考邏輯流程圖“父類型尋找子類型”,首先判斷輸入的類型是否存在,再使用下列實例SQL語句取出子類型內表

SELECT e071 INTO CORRESPONDING FIELDS OF TABL E e071_object FROM euobjv WHERE tadir = object.

6.上述SQL語句輸出的e071_object即為子類型內表,但其中包含重復項,使用下面的ABAP語句可以去除重復項,得到父類型的所有子類型內表。

DELETE ADJACENT DUPLICATES FROM e071_object

7.返回e071_object內表,作為父類型所有的子類型集合。

通過這種方式,我們可以方便地得到程序對象類型與程序對象類型之間的關系,從而可以幫助使用SAP軟件的企業,或從事SAP軟件開發咨詢的軟件公司,了解SAP源程序的關系,理解系統將各種類型的程序對象組織運行的機制。在國內的企業中,尤其是在中國大型國有企業,如中國石化、國家電網等,這些企業對SAP系統進行大批量本地化開發,本文所闡述的對象與對象之間關系的分析方法,可以幫助企業更加有效地組織自己開發代碼,管理自己的開發對象,加強自開發程序對象的版本管理,從而幫助企業在系統分析、系統安全方面取得進一步的提升。

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合