sap-ABAP開發(fā)入門到進階_第1頁
sap-ABAP開發(fā)入門到進階_第2頁
sap-ABAP開發(fā)入門到進階_第3頁
sap-ABAP開發(fā)入門到進階_第4頁
sap-ABAP開發(fā)入門到進階_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、SAP-ABAPBAP 開發(fā)入門到進階開發(fā)入門到進階 基礎篇 - 以簡短的篇幅介紹最基本的語法 增強篇 - 介紹了常用的 ABAP 技術 希望此書對想從事 ABAP 開發(fā)的讀者有相當幫助。 一一. .基礎篇基礎篇 如果讀者已經有一定 ABAP 經驗,可不看此篇,在此篇中,花了很少篇幅回顧 ABAP 編程的基本常識,讀者如有其他開發(fā)工具的知識,花很少時間就可理解這些常 識. 1.1.什么是什么是 ABAPABAP ? ? 了解一下 ABAP 的發(fā)展歷史是必要的,ABAP 產生的最初的目的是用以生成簡 單打印報表程序,我們知道 SAP 最初是為解決財務實時數據處理問題的, ABAP(Advance

2、d Business Application Programming-高級業(yè)務應用編程語言)現在用 于編寫 SAP AG 的幾乎全部產品源代碼. 嚴格地講,ABAP/4 不僅僅是一個開發(fā)工具,而且是一套完整的 client/server 開發(fā) 環(huán)境,這很好理解,微軟的 Visiual Studio 是一開發(fā)環(huán)境,VB,VC+等是開發(fā)工具. ABAP 開發(fā)環(huán)境包含支持程序開發(fā)的一些函數和包等. 如圖 1-1,是 SAP 開發(fā)環(huán)境的一個三層架構的例圖,三層(多層)的概念也不新鮮, 比如在安裝 SAP 時也可將 DB instance 安在一臺 server, Central instance 在另

3、一臺所 謂的 Application server(我想這應是相關 SAP 基礎系統(tǒng)包括各種應用程序所在),而通 ??蛻舳税惭b的 SAP Logon Front End,SAP 會話管理器等是所謂的表示層,它通過 TCP/IP,SAP 演示協議或 RFC 和應用服務器進行數據傳輸,用戶看到的只是處理后的 數據返回. 和 Delphi 的三層邏輯相近,在應用層包含多個組件象 ABAP 開發(fā)平臺,身份驗證, 系統(tǒng)管理維護等用以處理會話,更新,排隊,網關,數據層處理 native 和 Open SQL 等 (這是從內部機制方面看),SAP 各模塊應用的業(yè)務邏輯都在應用層被處理(從用戶角 度)然后結果

4、被返回. 圖 1-2 是 SAP Logon 的一個截圖,1表示應用服務器(通常企業(yè)為了節(jié)省成本和方便 管理可能會將應用服務器和數據庫安裝在同一起),2System number,舉個實例,開發(fā) 和測試服務共用一臺服務器,開發(fā)使用 system number00,而測試使用 system number 01,通過 system number 邏輯地將一臺 physical server 邏輯地分成了兩臺 application server. 學習 ABAP 并不難,有人說 SAP 系統(tǒng)重在管理思想,不在技術,通常對有編程經 驗的讀者不用任何培訓參考一些相關資料就可立即上手. 簡單介紹下 AB

5、AP/4 的一些特征: 1.和 SAP 緊密結合,尤其在開發(fā)報表方面,坦率地講,除了和 SAP 集成的好處,.我定 認為 ABAP 在報表開發(fā)上比 Crystal report Tool 要高效簡單. 2.和 VB 一樣 ,ABAP 是解釋形的,如讀者精通 VB,學習 ABAP 應該豪不費力,倒是 既然 SAP 是企業(yè)管理解決方案,ABAPer 必須對企業(yè)管理流程熟悉. 解釋性的另一好處是可以很好跟蹤程序邏輯(使用/H),這對了解業(yè)務邏輯的實和 追蹤錯誤很有效. 和 VB 不同的是,VB 跟蹤時允許程序運行指針隨意往回或往 全拉而 ABAP 程序去不行, 但是 ABAP 程序允許在運行時修改變

6、量的值,這是 編譯程序不能做到的. 當然通常編譯比解釋執(zhí)行的速度會更快. ABAP 程序執(zhí)行并不直接讀取源代碼,而是執(zhí)行內部經過“生成”的描述,對于 ABAP/4 字典的修改激活后將觸發(fā)內部描述的重新生成,如程序并沒激活就執(zhí)行 原版本,或者出現錯誤(程序沒激活可能造成 ABAP Dumping ABAP). 3.在對數據庫處理方面,除了可直接執(zhí)行 SQL(使用 native sql,缺點是錯誤處理很難 控制,相當于有開發(fā)環(huán)境將 SQL 語句直接傳給 DB 去執(zhí)行),SAP 在 ABAP 開發(fā)環(huán) 境層還提供了一套 Open SQL 訪問底層數據庫. 4. 程序員都知道 Windows 平臺下開發(fā)

7、都支持事件驅動,Windows 系統(tǒng)本身也支持 事件驅動,ABAP 也提供了事件驅動,這表現在 Dialog 編程方面,但是 ABAP 在此 方面并不強,而且相對講也比較難于掌握(在后面會討論). 5.基于面向對象的風靡,ABAP 在此方面也有相當反應,在 SAP 強大的軟件包中提 供了大量可重復使用的程序,讀者也可定義類并使用它快速建立新的對象. 6.類似 Java,ABAP 開發(fā)的程序能運行于任何操作系統(tǒng)(Java 有 Java 虛擬機,ABAP 也有 ABAP processor),多種數據庫(比如在 ABAP 字典中實現了透明表對各種底 層數據庫表的映射,這樣在 ABAP 層看到的透明

8、表就和具體數據庫無關),各種網 絡系統(tǒng). 圖 1-3 是一個 ABAP 開發(fā)和運行環(huán)境的圖例. 1 使用 C|C+建立 ABAP 開發(fā)工具,數億行 ABAP source code 組成 SAP AG 多個產 品. 姑且不論國內 ERP 產品設計在解決企業(yè)流程上的局限性,在大多數國外的 ERP 產 品中我們都可看到結合自身 ERP 自帶的開發(fā)工具,在技術上這也是落后人家.所以建 議國內 ERP 界能少談點象什么”不上 ERP 等死,上 ERP 找死”,”百分之百的企業(yè)上 ERP 都失敗”諸如的空洞口號(實際上我并不知道他們是憑什么得出這樣的結論的), 多干點實際的事情. 2 既然 ABAP 是

9、解釋型的,運行速度會有影響嗎?我想多少會有的,為了解決這個問題, 除了要加大相關服務器內存外(相對日新月異的硬件技術這已非主要瓶頸) ),SAP 本身在提高性能也提供了相當的 ABAP 技術,比如使用 Cluster table, Pooled table 和 Logical database ,在接下來會有詳細介紹. 2.ABAP2.ABAP 開發(fā)環(huán)境的建立開發(fā)環(huán)境的建立 一個 ABAP 顧問和我討論說,大學畢業(yè)我做 ABAP 開發(fā)不久做了顧問,薪資相當 可觀,最要好同學在 unix 平臺下寫 Cobar 組件, 薪資卻并不理想. 從技術角度,我認為使用 C+寫組件肯定比 ABAP 開發(fā)難度

10、要高,用其人話說他 是坐的廟好.是的,SAP 行業(yè)特別是早些年是個被異化的行業(yè),人們可看到某些人出于 經濟目的鋪天蓋地的對 ERP 不正確的宣傳,這同樣反應在 IT 各行業(yè),”拿到 XX 牌 Route 認證,拿到 XX 網絡認證,拿到 XX 數據庫認證,拿到 XX 管理學位年薪基本的 都在十幾萬以上”,現在人們發(fā)現實際不是這回事,從現在,SAP 也已經開始降溫了,我 想這趨勢還會持續(xù). 和學習其它語言唯一不同的是,ABAP 是集成在 SAP 基礎平臺系統(tǒng)中的,為了學 習 ABAP,你必須安裝一套 SAP(可選擇可選擇 R/3,miniSAP,或或 IDES),而通常的情況是安裝光 盤渠道比較

11、難找(只有一些大企業(yè)實施了只有一些大企業(yè)實施了 SAPSAP 才可能有才可能有, ,而且還必須注意版權問題而且還必須注意版權問題, ,其他開發(fā)其他開發(fā) 工具隨便都可找到安裝程序工具隨便都可找到安裝程序),對想學習 ABAP 的程序員這是個主要門檻. 掌握基本的 ABAP 開發(fā)環(huán)境對 ABAPer 是有益的,似乎多數 ABAPer 對底層并不感 興趣, 3.3.獲得獲得 AccessAccess KeyKey . . 4.ABAP4.ABAP workbenchworkbench 和和 ABAPABAP dictionarydictionary 5.5.第一個程序第一個程序-Hello-Hell

12、o World.World. 如何進行 ABAP 開發(fā)呢?本節(jié)使用老套的做法,介紹如何建立一個”Hello World”的 ABAP 程序, 為了讓讀者盡快掌握 ABAP 開發(fā)熟悉 ABAP 開發(fā)環(huán)境是必須的,請看 圖圖 1.5-1. 程序的原代碼如下: ReportReport ZHELLO.ZHELLO. WriteWrite HelloHello World!.World!. 按 F8 運行,運行成功在屏幕上顯示 Hello World!的字樣,恭喜你,第一個程序運行成功. 6.ABAP6.ABAP 語法簡介語法簡介 數據類型 控制流程 文本摘要 輸出格式 程序調試 7.Open7.Op

13、en SQLSQL 和和 NativeNative SQLSQL 8.8.內表和工作區(qū)內表和工作區(qū) 9.9.使用字段符號使用字段符號 10.10.模塊化程序模塊化程序 11.11.文件處理文件處理 12.12.簇數據庫和邏輯數據庫簇數據庫和邏輯數據庫 13.13.消息和錯誤處理消息和錯誤處理 盡管消息這詞還用在其他地方比如 PO,SO 打印傳真等所謂的 output message(請看 ABAP 百夜 談),系統(tǒng)出現異常,在這里消息只談在程序運行邏輯異常處理時的消息. 1 定義消息定義消息(參考圖參考圖 7-7). 使用 Tcode SE91 可自定義包含多消息號的消息類,在圖 7-7 中就

14、定義了一個消息 類 ZFIMSG,同時消息號 017 中使用了倆&消息變量 2 運用消息運用消息. 1.可在程序Title中使用MESSAGE-ID加入消息類. REPORT ZMSGTEST MESSAGE-ID ZFIMSG . MESSAGE I017. 使用消息 IMG 有這樣的畫面,12的 appl 和 work area 實際上對應的就是程序的 message_id(SE91:message class). 2.在程序 Title 中定義直接在語句中使用. REPORT ZMSGTEST . MESSAGE I017(ZFIMSG). 1. 將變量賦給消息. REPORT ZMSG

15、TEST . MESSAGE I017(ZFIMSG) with Var1 Var2 Var3 . 或者 MESSAGE ID ZFIMSG TYPE I NUMBER 0171 with Var1 Var2 Var3 . 盡管 017 只定義了兩消息變量,但是可 With 多個值,當然只有前倆生效. 4.SAP 程序消息類型有下列幾種. I:信息窗口 W:警告 E:錯誤 S:成功 A:終止程序或 Tcode X:未知. 5.和標準 SAP 一樣,你可配置消息,比如你需要由用戶決定消息類型,使用下面程序. PROGRAM ZMSGTEST . CALL FUNCTION READ_CUSTOM

16、IZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. 假設你做了 Tcode 和 OBA5 一樣可配置消息類型,在程序中你就可根據返回值 SY- MSGTY 判斷下步工作,E 停止處理,A 退出程序等. 在標準程序中,接下來會 PERFORM MESSAGE_SEND 來決定發(fā)送消息類型. 3常用消息表格和各模塊常用消息配置Tcode. 在消息配置中,Application Area和SE91的Message Class實際上是同一概念. 1 1消息相關最常用的

17、消息相關最常用的table:table: T100: SAP能用到的消息都應該在此表中找到. T160M :MM模塊相關消息表,此表可完全直接維護.就是說只要記住它,MM的消息配置直接使 用SE16就可以. T100C: FI模塊中用戶自定義的消息,比如使用OBA5, OFMG等自定義的消息會寫入此表,CO配 置消息不在此表. T100S: 此表保存著允許用戶更改的應用區(qū)域和消息號,舉例假設你刪除了KI 005則在OBA5 中再不能配置此消息.(對MM模塊有些例外,M7不在此表,使用OMCQ依舊可設置,M3不 在此表,OMT4依舊可設置) 此表也可直接維護.和T160M不同的是,你必須在SE1

18、6輸入T100S按新建按鈕 才可維護.查詢時只可Display. T100U: 哪個用戶最后更改了消息,從此表能找到. T100W: For Workflow 2 2常用常用Tcode(Tcode(部分部分):): FI: OBA5|OFMG|OFPM MM: OMRM|OKZZ|OMT4|OMCQ |O04C| SD: OVAH CO: OPR4_ACT|OPR4_CK|OPR4_CKML|OPR4_CKPF|OPR4_KKA|OPR4_KKP|OPR4_KKS| OPR4_KKS1|OPR4_PPCOPP Others: OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9

19、|OPRCMFE|MSW1|MSW2 3 3應用舉例應用舉例. . 物料價格維護問題 Case 1如何在物料價格未維護時依舊可估算成本. 比如在CK11N(CK40N)計算成品標準成本時,其中有一些Component沒維護價格.就可使用 OPR4_CK將默認的錯誤消息Switch Off掉(從Tcode OKKN-Misc.-Error Management按鈕也 可). *另外臨時處理方法一是將相關一是將相關componentcomponent的物料的物料CostCost 1 1 ViewView選上選上DoDo notnot CostingCosting. 對需要計算標準成本的材料選上它就

20、不再允許計算標準成本,不妥,但是對原材料無所謂,因 為系統(tǒng)會這樣處理,如此材料沒維護價格,BOM用到它的成品不計算其成本,但是如此物料維 護了價格后,還是以物料價格為先的.(當然CK11N去估算此原材料是不行的,用戶也不需如此 做).二是按二是按SAPSAP推薦的如果將推薦的如果將priceprice設成設成0.01,price0.01,price unitunit設置成設置成100100. Case 2如何限定物料價格必須維護. (1)對采用S price control的.SAP默認是Warning(Tcode :OMT4 M3-132,如需要限定必須維 護價格,將其改成W就可. (2)對

21、采用V price control的,OMT4找不到其消息號M3-131,但系統(tǒng)默認是Warning,如果用 戶認為也有相關配置就有犯了認為SAP萬能的錯誤,再次強調SAP只是一堆代碼并不神秘. 好讓我們看看其邏輯. *實際上直接使用SE16:T160M可直接配置MM相關. 如圖:1SE38找到程序LMG11F01 2在此處設置斷點 3如價格為0(空格) 寫死的,當然配置無效. 再看S Price control(如下圖,顯然從T160M表讀了IMG數據). 4 4靈活運用消息靈活運用消息. . 對于消息的運用,除了可配置消息類別外,另外一個重要用處就在于,可根據消息找到程序彈 出消息的確切行

22、,然后稍微花點時間看看程序邏輯就可大概知道異常發(fā)生的根本原因. 從某 種程度來講,即使對某模塊很陌生,只要掌握得好,依舊可排除一些問題. 5 5 配置自定義的消息配置自定義的消息. . 倆方法可模妨SAP的消息配置 1 從上我們已經知道既然 T160M 是可直接使用 SE16 維護的,我們就可直接將相關設置寫入 T160M.然后就可根據相關設置取得消息類別(如上圖我們使用函數 ME_CHECK_T160M),這樣 比類似MESSAGE E017(ZFIMSG)Hard code 要安全得多,假設不管三七二十一就給 出錯誤消息,除非在程序中確信已考慮了所有情況,否則還是在 T160M 這樣設置比

23、較 好(萬一在生產環(huán)境還可更改 E 成 W 什么的). 2我們知道T100C是所謂的可配置消息表,我們可使用SE16:T100C和V_T100C. (1)SE16:T100S定義消息可配置信息. 如圖1在此新建.(進去browse數據似乎不可新建) 設置消息.如下圖. 1Appl Area消息類ZFIMSG. 2表示允許配置的消息類型 3沒選則表示不能關閉消息. (2)SE16:V_T100C配置消息. 如圖: 1表示直接使用程序(Tcode)的消息類型2當當程序以BDC方式運行時的消息類型 3就是上圖設置的允許的消息類型,可看到警告和關閉都沒出現(T100CT100C沒允許沒允許) 同樣在程

24、序中避免使用淚水MESSAGE E017(ZFIMSG)而采用 CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. 根據返回的SY-MSGTY去判斷消息類型將更好些. 6 6實例介紹實例介紹 PO在有發(fā)票校驗后禁止修改價格,假設無PO release策略,使用User-exit步驟如下: (1)找合適的用戶出口找合適的用戶出口 發(fā)現EXIT_SAPMM06E_017比較合適,SMOD 輸入enhancement

25、 name :MM06E005 (2)(2)編寫代碼編寫代碼. . *&-* *& Include ZXM06U42 * *&-* DATA : ZWATEKPO like BEKPO , ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73) TYPE C. TABLES EKBE . *TEKPO records all the old PO item date . * I_EKPO records currently processed PO item . READ TABLE TEKPO INTO ZWATEKPO WITH K

26、EY EBELP = I_EKPO-EBELP . *只對ME22N才生效. CHECK SY-TCODE = ME22N . *EKBE是PO history 表,如有Q,R表示有發(fā)票校驗歷史,不允許更改價# SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn AND EBELP = I_EKPO-EBELP AND ( BEWTP = Q OR BEWTP = R). CHECK SY-SUBRC = 0 . *如果SY-SUBRC =0表示發(fā)票已經校驗,不允許更改價格,否則還是可更改價格# IF I_EKPO-NETPR ZWATEK

27、PO-NETPR . * Change e017(ZFIMSG) accordingly * MESSAGE e017(ZFIMSG).使用下面函數代替. CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTY NE - . REFRESH ZIEINFO. ZIEINFO-MSGID = ZFIMSG. ZIEINFO-MSGNO = 017 . ZIEINFO-MSGV1 = VA

28、R1. ZIEINFO-MSGV2 = VAR2. APPEND ZIEINFO . CALL FUNCTION MESSAGE_GET_TEXT EXPORTING IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY . ENDIF. *在大多數情況下追蹤消息能發(fā)現問題所在,然而在一些特定情況下在大多數情況下追蹤消息能發(fā)現問題所在,然而在一些特定情況下,SAP,SAP顯示的消息似乎和實際業(yè)務并顯示的消息似乎和實際業(yè)務并 不符合不符合. .好比一個人咳嗽的厲害好比一

29、個人咳嗽的厲害, ,以為是感冒結果其實不過是有寫異物進入其喉嚨而已以為是感冒結果其實不過是有寫異物進入其喉嚨而已. . 14.14.使用用戶授權使用用戶授權 15.15.調用外部程序和程序動態(tài)生產調用外部程序和程序動態(tài)生產 16.16.選擇屏幕選擇屏幕 17.17.使用程序運行變式使用程序運行變式 18.18.制作制作 TcodeTcode 二二. .加強篇加強篇. . 1.CATT1.CATT 2.BDC2.BDC 3.3.制作程序的制作程序的 backgroundbackground jobjob 4.SapScript4.SapScript 5.Smartform5.Smartform

30、6.SAP6.SAP QueryQuery 7.ALV7.ALV 編程編程 8.ALE/iDoc8.ALE/iDoc 9.Report9.Report painterpainter 和和 DrilldownDrilldown ReportReport 10.RFC/BAPI10.RFC/BAPI 11.11.編寫用戶增強編寫用戶增強 12.12.深入深入 ABAPABAP 工作臺工作臺 在這章將深入介紹各種 ABAP 對象的操作. 13.13.傳輸請求傳輸請求 這節(jié)并不是側重介紹如何配置傳輸請求和其運行機制的,這通常是 basis 的工作和 ABAPer 并無關系,還是那句話,了解點大概是必要

31、的. 通常企業(yè)起碼會有兩個系統(tǒng),開發(fā)(測試)系統(tǒng)和生產系統(tǒng)(有些企業(yè)開發(fā)任務相對少, 開發(fā)和測試使用同一臺 server 甚至同一 client,開發(fā)和測試也都有 ABAPer 完成),如 果要嚴格開發(fā)流程,開發(fā),測試必須是分開的(為了節(jié)省當然可使用同一 server,不同的 Client 甚至用不同 System Number 邏輯分成兩 Server),在此不深入討論. 熟悉幾個名詞: 1 開發(fā)類開發(fā)類(Development Class). 開發(fā)類可簡單理解為邏輯上相關的一組 ABAP 對象,在將來傳輸時將使用同一 傳輸層.實際上開發(fā)類本身也可看做是一個 ABAP 對象,可使用 SE80 建立. $TMP 是本地開發(fā)類,屬于此開發(fā)類的任何 ABAP 對象(包括自定義的表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論