




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 1 / 16 SAP-ABAPBAP 開發入門到進階開發入門到進階基礎篇 - 以簡短的篇幅介紹最基本的語法增強篇 - 介紹了常用的 ABAP 技術希望此書對想從事 ABAP 開發的讀者有相當幫助。一一. .基礎篇基礎篇 如果讀者已經有一定 ABAP 經驗,可不看此篇,在此篇中,花了很少篇幅回顧ABAP 編程的基本常識,讀者如有其他開發工具的知識,花很少時間就可理解這些常識.1.1.什么是什么是 ABAPABAP ? ?了解一下 ABAP 的發展歷史是必要的,ABAP 產生的最初的目的是用以生成簡單打印報表程序,我們知道 SAP 最初是為解決財務實時數據處理問題的,ABAP(Advanced
2、Business Application Programming-高級業務應用編程語言)現在用于編寫 SAP AG 的幾乎全部產品源代碼.嚴格地講,ABAP/4 不僅僅是一個開發工具,而且是一套完整的 client/server開發環境,這很好理解,微軟的 Visiual Studio 是一開發環境,VB,VC+等是開發工具.ABAP 開發環境包含支持程序開發的一些函數和包等. 如圖 1-1,是 SAP 開發環境的一個三層架構的例圖,三層(多層)的概念也不新鮮,比如在安裝 SAP 時也可將 DB instance 安在一臺 server, Central instance 在另一臺所謂的 Ap
3、plication server(我想這應是相關 SAP 基礎系統包括各種應用程序所在),而通常客戶端安裝的 SAP Logon Front End,SAP 會話管理器等是所謂的表示層,它通過 TCP/IP,SAP 演示協議或 RFC 和應用服務器進行數據傳輸,用戶看到的只是處理后的數據返回. 和 Delphi 的三層邏輯相近,在應用層包含多個組件象 ABAP 開發平臺,身份驗證,系統管理維護等用以處理會話,更新,排隊,網關,數據層處理 native 和 Open SQL 等(這是從部機制方面看),SAP 各模塊應用的業務邏輯都在應用層被處理(從用戶角度)然后結果被返回. 2 / 16圖 1-
4、2 是 SAP Logon 的一個截圖,1表示應用服務器(通常企業為了節省成本和方便管理可能會將應用服務器和數據庫安裝在同一起),2System number,舉個實例,開發和測試服務共用一臺服務器,開發使用 system number00,而測試使用 system number 01,通過 system number 邏輯地將一臺 physical server 邏輯地分成了兩臺application server. 學習 ABAP 并不難,有人說 SAP 系統重在管理思想,不在技術,通常對有編程經驗的讀者不用任何培訓參考一些相關資料就可立即上手. 簡單介紹下 ABAP/4 的一些特征:1.
5、和 SAP 緊密結合,尤其在開發報表方面,坦率地講,除了和 SAP 集成的好處,.我定認為 ABAP 在報表開發上比 Crystal reportTool 要高效簡單.2.和 VB 一樣 ,ABAP 是解釋形的,如讀者精通 VB,學習 ABAP 應該豪不費力,倒是既然 SAP 是企業管理解決方案,ABAPer 必須對企業管理流程熟悉. 3 / 16 解釋性的另一好處是可以很好跟蹤程序邏輯(使用/H),這對了解業務邏輯的實和追蹤錯誤很有效. 和 VB 不同的是,VB 跟蹤時允許程序運行指針隨意往回或往全拉而 ABAP 程序去不行, 但是 ABAP 程序允許在運行時修改變量的值,這是編譯程序不能做
6、到的. 當然通常編譯比解釋執行的速度會更快.ABAP 程序執行并不直接讀取源代碼,而是執行部經過“生成”的描述,對于ABAP/4 字典的修改激活后將觸發部描述的重新生成,如程序并沒激活就執行原版本,或者出現錯誤(程序沒激活可能造成 ABAP Dumping ABAP). 3.在對數據庫處理方面,除了可直接執行 SQL(使用 native sql,缺點是錯誤處理很難控制,相當于有開發環境將 SQL 語句直接傳給 DB 去執行),SAP 在 ABAP 開發環境層還提供了一套 Open SQL 訪問底層數據庫. 4. 程序員都知道 Windows 平臺下開發都支持事件驅動,Windows 系統本身也
7、支持事件驅動,ABAP 也提供了事件驅動,這表現在 Dialog 編程方面,但是 ABAP 在此方面并不強,而且相對講也比較難于掌握(在后面會討論). 5.基于面向對象的風靡,ABAP 在此方面也有相當反應,在 SAP 強大的軟件包中提供了大量可重復使用的程序,讀者也可定義類并使用它快速建立新的對象.6.類似 Java,ABAP 開發的程序能運行于任何操作系統(Java 有 Java 虛擬機,ABAP也有 ABAP processor),多種數據庫(比如在 ABAP 字典中實現了透明表對各種底層數據庫表的映射,這樣在 ABAP 層看到的透明表就和具體數據庫無關),各種網絡系統.圖 1-3 是一
8、個 ABAP 開發和運行環境的圖例. 1 1 使用 C|C+建立 ABAP 開發工具,數億行 ABAP source code 組成 SAP AG 多個產品. 姑且不論國 ERP 產品設計在解決企業流程上的局限性,在大多數國外的 ERP 產 4 / 16品中我們都可看到結合自身 ERP 自帶的開發工具,在技術上這也是落后人家.所以建議國 ERP 界能少談點象什么”不上 ERP 等死,上 ERP 找死”,”百分之百的企業上ERP 都失敗”諸如的空洞口號(實際上我并不知道他們是憑什么得出這樣的結論的),多干點實際的事情.2 2 既然 ABAP 是解釋型的,運行速度會有影響嗎?我想多少會有的,為了解
9、決這個問題,除了要加大相關服務器存外(相對日新月異的硬件技術這已非主要瓶頸),SAP 本身在提高性能也提供了相當的 ABAP 技術,比如使用 Cluster table, Pooled table 和 Logical database ,在接下來會有詳細介紹.2.ABAP2.ABAP 開發環境的建立開發環境的建立 一個 ABAP 顧問和我討論說,大學畢業我做 ABAP 開發不久做了顧問,薪資相當可觀,最要好同學在 unix 平臺下寫 Cobar 組件, 薪資卻并不理想. 從技術角度,我認為使用 C+寫組件肯定比 ABAP 開發難度要高,用其人話說他是坐的廟好.是的,SAP 行業特別是早些年是個
10、被異化的行業,人們可看到某些人出于經濟目的鋪天蓋地的對 ERP 不正確的宣傳,這同樣反應在 IT 各行業,”拿到 XX牌 Route 認證,拿到 XX 網絡認證,拿到 XX 數據庫認證,拿到 XX 管理學位年薪基本的都在十幾萬以上”,現在人們發現實際不是這回事,從現在,SAP 也已經開始降溫了,我想這趨勢還會持續. 和學習其它語言唯一不同的是,ABAP 是集成在 SAP 基礎平臺系統中的,為了學習 ABAP,你必須安裝一套 SAP(可選擇可選擇 R/3,miniSAP,R/3,miniSAP,或或 IDESIDES),而通常的情況是安裝光盤渠道比較難找(只有一些大企業實施了只有一些大企業實施了
11、 SAPSAP 才可能有才可能有, ,而且還必須注意問題而且還必須注意問題, ,其他開發工具隨其他開發工具隨便都可找到安裝程序便都可找到安裝程序),對想學習 ABAP 的程序員這是個主要門檻. 掌握基本的 ABAP 開發環境對 ABAPer 是有益的,似乎多數 ABAPer 對底層并不感興趣,3.3.獲得獲得 AccessAccess KeyKey . .4.ABAP4.ABAP workbenchworkbench 和和 ABAPABAP dictionarydictionary 5 / 165.5.第一個程序第一個程序-Hello-Hello World.World. 如何進行 ABAP
12、開發呢?本節使用老套的做法,介紹如何建立一個”Hello World”的 ABAP 程序, 為了讓讀者盡快掌握 ABAP 開發熟悉 ABAP 開發環境是必須的,請看圖圖 1.5-11.5-1.程序的原代碼如下:ReportReport ZHELLO.ZHELLO. 6 / 16WriteWrite HelloHello World!.World!.按 F8 運行,運行成功在屏幕上顯示 Hello World!的字樣,恭喜你,第一個程序運行成功.6.ABAP6.ABAP 語法簡介語法簡介數據類型控制流程文本摘要輸出格式程序調試7.Open7.Open SQLSQL 和和 NativeNative
13、 SQLSQL8.8.表和工作區表和工作區9.9.使用字段符號使用字段符號10.10.模塊化程序模塊化程序11.11.文件處理文件處理12.12.簇數據庫和邏輯數據庫簇數據庫和邏輯數據庫13.13.消息和錯誤處理消息和錯誤處理盡管消息這詞還用在其他地方比如 PO,SO 打印 等所謂的 output message(請看 ABAP 百夜談),系統出現異常,在這里消息只談在程序運行邏輯異常處理時的消息.1 1 定義消息定義消息( (參考圖參考圖 7-7).7-7).使用 Tcode SE91 可自定義包含多消息號的消息類,在圖 7-7 中就定義了一個消息類ZFIMSG,同時消息號 017 中使用了
14、倆&消息變量2 2 運用消息運用消息. .1.可在程序Title中使用MESSAGE-ID加入消息類.REPORT ZMSGTEST MESSAGE-ID ZFIMSG .MESSAGE I017.使用消息 IMG 有這樣的畫面,12的 appl 和 work area 實際上對應的就是程序的message_id(SE91:message class). 7 / 162.在程序 Title 中定義直接在語句中使用.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG).1. 將變量賦給消息.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG)
15、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_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFI
16、MSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY.假設你做了 Tcode 和 OBA5 一樣可配置消息類型,在程序中你就可根據返回值 SY-MSGTY 判斷下步工作,E 停止處理,A 退出程序等.在標準程序中,接下來會 PERFORM MESSAGE_SEND 來決定發送消息類型.3常用消息表格和各模塊常用消息配置Tcode. 在消息配置中,Application Area和SE91的Message Class實際上是同一概念.1 1消息相關最常用的消息相關最常用的table:table:T100: SAP能用到的消息都應該在此表
17、中找到.T160M :MM模塊相關消息表,此表可完全直接維護.就是說只要記住它,MM的消息配置直接使用SE16就可以.T100C: FI模塊中用戶自定義的消息,比如使用OBA5, OFMG等自定義的消息會寫入此表,CO配置消息不在此表.T100S: 此表保存著允許用戶更改的應用區域和消息號,舉例假設你刪除了KI 005則在OBA5中再不能配置此消息.(對MM模塊有些例外,M7不在此表,使用OMCQ依舊可設置,M3不 8 / 16在此表,OMT4依舊可設置)此表也可直接維護.和T160M不同的是,你必須在SE16輸入T100S按新建按鈕 才可維護.查詢時只可Display.T100U: 哪個用戶
18、最后更改了消息,從此表能找到.T100W: For Workflow2 2常用常用Tcode(Tcode(部分部分):):FI:OBA5|OFMG|OFPM MM: OMRM|OKZZ|OMT4|OMCQ |O04C|SD:OVAHCO:OPR4_ACT|OPR4_CK|OPR4_CKML|OPR4_CKPF|OPR4_KKA|OPR4_KKP|OPR4_KKS|OPR4_KKS1|OPR4_PPCOPPOthers: OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9|OPRCMFE|MSW1|MSW23 3應用舉例應用舉例. .物料價格維護問題Case 1如何在物料價格未
19、維護時依舊可估算成本.比如在CK11N(CK40N)計算成品標準成本時,其中有一些Component沒維護價格.就可使用OPR4_CK將默認的錯誤消息Switch Off掉(從Tcode OKKN-Misc.-Error Management按鈕也可).*另外臨時處理方法一是將相關一是將相關componentcomponent的物料的物料CostCost 1View1View選上選上DoDo notnot CostingCosting.對需要計算標準成本的材料選上它就不再允許計算標準成本,不妥,但是對原材料無所謂,因為系統會這樣處理,如此材料沒維護價格,BOM用到它的成品不計算其成本,但是如此
20、物料維護了價格后,還是以物料價格為先的.(當然CK11N去估算此原材料是不行的,用戶也不需如此做).二是按二是按SAPSAP推薦的如果將推薦的如果將priceprice設成設成0.01,price0.01,price unitunit設置成設置成100100.Case 2如何限定物料價格必須維護.(1)對采用S price control的.SAP默認是Warning(Tcode :OMT4 M3-132,如需要限定必須維護價格,將其改成W就可.(2)對采用V price control的,OMT4找不到其消息號M3-131,但系統默認是Warning,如果用戶認為也有相關配置就有犯了認為SA
21、P萬能的錯誤,再次強調SAP只是一堆代碼并不神秘.好讓我們看看其邏輯.*實際上直接使用SE16:T160M可直接配置MM相關.如圖:1SE38找到程序LMG11F01 2在此處設置斷點 3如價格為0(空格) 寫死的,當然配置無效. 9 / 16再看S Price control(如下圖,顯然從T160M表讀了IMG數據).4 4靈活運用消息靈活運用消息. .對于消息的運用,除了可配置消息類別外,另外一個重要用處就在于,可根據消息找到程序彈出消息的確切行,然后稍微花點時間看看程序邏輯就可大概知道異常發生的根本原因. 從某種程度來講,即使對某模塊很陌生,只要掌握得好,依舊可排除一些問題.5 5 配
22、置自定義的消息配置自定義的消息. .倆方法可模妨SAP的消息配置1 從上我們已經知道既然 T160M 是可直接使用 SE16 維護的,我們就可直接將相關設置寫入T160M.然后就可根據相關設置取得消息類別(如上圖我們使用函數 ME_CHECK_T160M),這樣比類似MESSAGE E017(ZFIMSG)Hard code 要安全得多,假設不管三七二十一就給出錯誤消息,除非在程序中確信已考慮了所有情況,否則還是在 T160M 這樣設置比較好(萬一在生產環境還可更改 E 成 W 什么的). 10 / 162我們知道T100C是所謂的可配置消息表,我們可使用SE16:T100C和V_T100C.
23、(1)SE16:T100S定義消息可配置信息.如圖1在此新建.(進去browse數據似乎不可新建)設置消息.如下圖.1Appl Area消息類ZFIMSG. 2表示允許配置的消息類型 3沒選則表示不能關閉消息.(2)SE16:V_T100C配置消息.如圖:1表示直接使用程序(Tcode)的消息類型2當當程序以BDC方式運行時的消息類型3就是上圖設置的允許的消息類型,可看到警告和關閉都沒出現(T100CT100C沒允許沒允許) 11 / 16同樣在程序中避免使用淚水MESSAGE E017(ZFIMSG)而采用CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPOR
24、TING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY.根據返回的SY-MSGTY去判斷消息類型將更好些.6 6實例介紹實例介紹PO在有發票校驗后禁止修改價格,假設無PO release策略,使用User-exit步驟如下:(1)找合適的用戶出口找合適的用戶出口發現EXIT_SAPMM06E_017比較合適,SMOD 輸入enhancement name :MM06E005(2)(2)編寫代碼編寫代碼. .*&-*& Include ZXM06U42 *&-*DATA : ZW
25、ATEKPO 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 KEY EBELP = I_EKPO-EBELP .*只對ME22N才生效.CHECK SY-TCODE = ME22N .*EKBE是PO history 表
26、,如有Q,R表示有發票校驗歷史,不允許更改價#SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn AND EBELP = I_EKPO-EBELP 12 / 16 AND ( BEWTP = Q OR BEWTP = R).CHECK SY-SUBRC = 0 .*如果SY-SUBRC =0表示發票已經校驗,不允許更改價格,否則還是可更改價格#IF I_EKPO-NETPR ZWATEKPO-NETPR .* Change e017(ZFIMSG) accordingly* MESSAGE e017(ZFIMSG).使用下面函數代替. CA
27、LL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTYNE - .REFRESH ZIEINFO. ZIEINFO-MSGID = ZFIMSG. ZIEINFO-MSGNO = 017 . ZIEINFO-MSGV1 = VAR1. ZIEINFO-MSGV2 = VAR2. APPEND ZIEINFO .CALL FUNCTION MESSAGE_GET_TEXT EXPORTING
28、 IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF.*在大多數情況下追蹤消息能發現問題所在,然而在一些特定情況下在大多數情況下追蹤消息能發現問題所在,然而在一些特定情況下,SAP,SAP顯示的消息似乎和實際業務并顯示的消息似乎和實際業務并不符合不符合. .好比一個人咳嗽的厲害好比一個人咳嗽的厲害, ,以為是感冒結果其實不過是有寫異物進入其喉嚨而已以為是感冒結果其實不過是有寫異物進入其喉嚨而已. .14.14.使用用戶授權使用用戶授權 13 / 161
29、5.15.調用外部程序和程序動態生產調用外部程序和程序動態生產16.16.選擇屏幕選擇屏幕17.17.使用程序運行變式使用程序運行變式18.18.制作制作 TcodeTcode二二. .加強篇加強篇. .1.CATT1.CATT 14 / 162.BDC2.BDC3.3.制作程序的制作程序的 backgroundbackground jobjob4.SapScript4.SapScript5.Smartform5.Smartform6.SAP6.SAP QueryQuery7.ALV7.ALV 編程編程8.ALE/iDoc8.ALE/iDoc9.Report9.Report painterpa
30、inter 和和 DrilldownDrilldown ReportReport10.RFC/BAPI10.RFC/BAPI11.11.編寫用戶增強編寫用戶增強12.12.深入深入 ABAPABAP 工作臺工作臺在這章將深入介紹各種 ABAP 對象的操作.13.13.傳輸請求傳輸請求這節并不是側重介紹如何配置傳輸請求和其運行機制的,這通常是 basis 的工作和ABAPer 并無關系,還是那句話,了解點大概是必要的. 15 / 16通常企業起碼會有兩個系統,開發(測試)系統和生產系統(有些企業開發任務相對少,開發和測試使用同一臺 server 甚至同一 client,開發和測試也都有 ABAPer 完成),如果要嚴格開發流程,開發,測試必須是分開的(為了節省當然可使用同一 server,不同的 Client 甚至用不同 System Number 邏輯分成兩 Server),在此不深入討論.熟悉幾個名詞:1 1 開發類開發類(Development(Development Class).Class).開發類可簡單理解為邏輯上相關的一組 ABAP 對象,在將來傳輸時將使用同一傳輸層.實際上開發類本身也可看做是一個 ABAP 對象,可使用 SE80 建立.$TMP 是本地開發類,屬于此開發類的任何 ABAP 對象(包括自定義的表,編寫的程序等都只能在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川雅安中學2025屆高三下學期期末學習能力診斷數學試題含解析
- 內蒙巴彥淖爾市2025年高三畢業班3月教學質量檢查語文試題含解析
- 山東省日照市五蓮二中學2025屆初三化學試題下學期期末考試試題含解析
- 武夷山職業學院《建筑與裝飾工程計量與計價課程設計》2023-2024學年第二學期期末試卷
- 山東省濟南市歷城區2025屆初三4月模擬(二模)考試生物試題理試題含解析
- 遼寧中醫藥大學《藥學綜合實驗》2023-2024學年第二學期期末試卷
- 六盤水幼兒師范高等專科學校《日語文學》2023-2024學年第二學期期末試卷
- 山西林業職業技術學院《遙感原理與方法》2023-2024學年第一學期期末試卷
- 二零二五房屋及土地租賃協議
- 智能駕駛之路
- 浦發銀行個人信用報告異議申請表
- 高考試卷命題設計的技巧 課件24張
- 施工進度計劃網絡圖-練習題知識講解
- 防孤島測試報告
- 按摩常用英語
- 食品公司規章制度
- midas NFX使用指南(八)
- 成都高新區小學數學五年級下冊半期考試數學試卷
- 2018年人教版九年級英語單詞表
- 蘋果中國授權經銷商協議
- 昆山市工業用地項目監管協議-蘇州市國有建設用地使用權網上出讓系統
評論
0/150
提交評論