




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 SAP-ABAP 開發入門到進階 基礎篇 - 以簡短的篇幅介紹最基本的語法增強篇 - 介紹了常用的ABAP技術希望此書對想從事ABAP開發的讀者有相當幫助。一.基礎篇 如果讀者已經有一定ABAP經驗,可不看此篇,在此篇中,花了很少篇幅回顧ABAP編程的基本常識,讀者如有其他開發工具的知識,花很少時間就可理解這些常識.1.什么是ABAP ?了解一下ABAP的發展歷史是必要的,ABAP產生的最初的目的是用以生成簡單打印報表程序,我們知道SAP最初是為解決財務實時數據處理問題的,ABAP(Advanced Business Application Programming->高級業務應用編程語
2、言)現在用于編寫SAP AG的幾乎全部產品源代碼.嚴格地講,ABAP/4不僅僅是一個開發工具,而且是一套完整的client/server開發環境,這很好理解,微軟的Visiual Studio是一開發環境,VB,VC+等是開發工具.ABAP開發環境包含支持程序開發的一些函數和包等. 如圖1-1,是SAP開發環境的一個三層架構的例圖,三層(多層)的概念也不新鮮,比如在安裝SAP時也可將DB instance安在一臺server, Central instance在另一臺所謂的Application server(我想這應是相關SAP基礎系統包括各種應用程序所在),而通常客戶端安裝的SAP Log
3、on Front End,SAP會話管理器等是所謂的表示層,它通過TCP/IP,SAP演示協議或RFC和應用服務器進行數據傳輸,用戶看到的只是處理后的數據返回. 和Delphi的三層邏輯相近,在應用層包含多個組件象ABAP開發平臺,身份驗證,系統管理維護等用以處理會話,更新,排隊,網關,數據層處理native 和Open SQL等(這是從內部機制方面看),SAP各模塊應用的業務邏輯都在應用層被處理(從用戶角度)然后結果被返回. 圖1-2是SAP Logon的一個截圖,1表示應用服務器(通常企業為了節省成本和方便管理可能會將應用服務器和數據庫安裝在同一起),2System number,舉個實例
4、,開發和測試服務共用一臺服務器,開發使用system number00,而測試使用system number 01,通過system number邏輯地將一臺physical server邏輯地分成了兩臺application server. 學習ABAP并不難,有人說SAP系統重在管理思想,不在技術,通常對有編程經驗的讀者不用任何培訓參考一些相關資料就可立即上手. 簡單介紹下ABAP/4的一些特征:1.和SAP緊密結合,尤其在開發報表方面,坦率地講,除了和SAP集成的好處,.我定認為ABAP在報表開發上比Crystal report Tool要高效簡單.2.和VB一樣 ,ABAP是解釋形的,
5、如讀者精通VB,學習ABAP應該豪不費力,倒是既然SAP是企業管理解決方案,ABAPer必須對企業管理流程熟悉. 解釋性的另一好處是可以很好跟蹤程序邏輯(使用/H),這對了解業務邏輯的實和追蹤錯誤很有效. 和VB不同的是,VB跟蹤時允許程序運行指針隨意往回或往全拉而ABAP程序去不行, 但是ABAP程序允許在運行時修改變量的值,這是編譯程序不能做到的. 當然通常編譯比解釋執行的速度會更快.ABAP程序執行并不直接讀取源代碼,而是執行內部經過“生成”的描述,對于ABAP/4字典的修改激活后將觸發內部描述的重新生成,如程序并沒激活就執行原版本,或者出現錯誤(程序沒激活可能造成ABAP Dumpin
6、g ABAP). 3.在對數據庫處理方面,除了可直接執行SQL(使用native sql,缺點是錯誤處理很難控制,相當于有開發環境將SQL 語句直接傳給DB去執行),SAP在ABAP開發環境層還提供了一套Open SQL訪問底層數據庫. 4. 程序員都知道Windows平臺下開發都支持事件驅動,Windows系統本身也支持事件驅動,ABAP也提供了事件驅動,這表現在Dialog編程方面,但是ABAP在此方面并不強,而且相對講也比較難于掌握(在后面會討論). 5.基于面向對象的風靡,ABAP在此方面也有相當反應,在SAP強大的軟件包中提供了大量可重復使用的程序,讀者也可定義類并使用它快速建立新的
7、對象.6.類似Java,ABAP開發的程序能運行于任何操作系統(Java有Java虛擬機,ABAP也有ABAP processor),多種數據庫(比如在ABAP字典中實現了透明表對各種底層數據庫表的映射,這樣在ABAP層看到的透明表就和具體數據庫無關),各種網絡系統.圖1-3是一個ABAP開發和運行環境的圖例. 1 使用C|C+建立ABAP 開發工具,數億行ABAP source code組成SAP AG多個產品. 姑且不論國內ERP產品設計在解決企業流程上的局限性,在大多數國外的ERP產品中我們都可看到結合自身ERP自帶的開發工具,在技術上這也是落后人家.所以建議國內ERP界能少談點象什么”
8、不上ERP等死,上ERP找死”,”百分之百的企業上ERP都失敗”諸如的空洞口號(實際上我并不知道他們是憑什么得出這樣的結論的),多干點實際的事情.2 既然ABAP是解釋型的,運行速度會有影響嗎?我想多少會有的,為了解決這個問題,除了要加大相關服務器內存外(相對日新月異的硬件技術這已非主要瓶頸),SAP本身在提高性能也提供了相當的ABAP技術,比如使用Cluster table, Pooled table和Logical database ,在接下來會有詳細介紹.2.ABAP開發環境的建立 一個ABAP顧問和我討論說,大學畢業我做ABAP開發不久做了顧問,薪資相當可觀,最要好同學在unix平臺下
9、寫Cobar組件, 薪資卻并不理想. 從技術角度,我認為使用C+寫組件肯定比ABAP開發難度要高,用其人話說他是坐的廟好.是的,SAP行業特別是早些年是個被異化的行業,人們可看到某些人出于經濟目的鋪天蓋地的對ERP不正確的宣傳,這同樣反應在IT各行業,”拿到XX牌Route認證,拿到XX網絡認證,拿到XX數據庫認證,拿到XX管理學位年薪基本的都在十幾萬以上”,現在人們發現實際不是這回事,從現在,SAP也已經開始降溫了,我想這趨勢還會持續. 和學習其它語言唯一不同的是,ABAP是集成在SAP基礎平臺系統中的,為了學習ABAP,你必須安裝一套SAP(可選擇R/3,miniSAP,或IDES),而通
10、常的情況是安裝光盤渠道比較難找(只有一些大企業實施了SAP才可能有,而且還必須注意版權問題,其他開發工具隨便都可找到安裝程序),對想學習ABAP的程序員這是個主要門檻. 掌握基本的ABAP開發環境對ABAPer是有益的,似乎多數ABAPer對底層并不感興趣,3.獲得Access Key .4.ABAP workbench和ABAP dictionary5.第一個程序-Hello World.如何進行ABAP開發呢?本節使用老套的做法,介紹如何建立一個”Hello World”的ABAP程序, 為了讓讀者盡快掌握ABAP開發熟悉ABAP開發環境是必須的,請看圖1.5-1.程序的原代碼如下:Rep
11、ort ZHELLO.Write Hello World!.按F8運行,運行成功在屏幕上顯示Hello World!的字樣,恭喜你,第一個程序運行成功.6.ABAP語法簡介數據類型 控制流程文本摘要輸出格式程序調試7.Open SQL和Native SQL8.內表和工作區9.使用字段符號10.模塊化程序11.文件處理12.簇數據庫和邏輯數據庫13.消息和錯誤處理盡管消息這詞還用在其他地方比如PO,SO打印傳真等所謂的output message(請看ABAP百夜談),系統出現異常,在這里消息只談在程序運行邏輯異常處理時的消息.1定義消息(參考圖7-7). 使用Tcode SE91可自定義包含多
12、消息號的消息類,在圖7-7中就定義了一個消息類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 ZMSGTEST .ME
13、SSAGE 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 '
14、;READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFIMSG' I_DTYPE = '' I_MSGNR = '017' IMPORTING E_MSGTY = SY-MSGTY.假設你做了Tcode和OBA5一樣可配置消息類型,在程序中你就可根據返回值SY-MSGTY判斷下步工作,E停止處理,A退出程序等.在標準程序中,接下來會PERFORM MESSAGE_SEND來決定發送消息類型.3常用消息表格和各模塊常用消息配置Tcode. 在消息配置中,Application Area和SE91的
15、Message Class實際上是同一概念.1消息相關最常用的table:T100: SAP能用到的消息都應該在此表中找到.T160M :MM模塊相關消息表,此表可完全直接維護.就是說只要記住它,MM的消息配置直接使用SE16就可以.T100C: FI模塊中用戶自定義的消息,比如使用OBA5, OFMG等自定義的消息會寫入此表,CO配置消息不在此表.T100S: 此表保存著允許用戶更改的應用區域和消息號,舉例假設你刪除了KI 005則在OBA5中再不能配置此消息.(對MM模塊有些例外,M7不在此表,使用OMCQ依舊可設置,M3不在此表,OMT4依舊可設置)此表也可直接維護.和T160M不同的是
16、,你必須在SE16輸入T100S按新建按鈕 才可維護.查詢時只可Display. T100U: 哪個用戶最后更改了消息,從此表能找到.T100W: For Workflow2常用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
17、|MSW23應用舉例.物料價格維護問題Case 1如何在物料價格未維護時依舊可估算成本.比如在CK11N(CK40N)計算成品標準成本時,其中有一些Component沒維護價格.就可使用OPR4_CK將默認的錯誤消息Switch Off掉(從Tcode OKKN->Misc.->Error Management按鈕也可).*另外臨時處理方法一是將相關component的物料Cost 1 View選上Do not Costing.對需要計算標準成本的材料選上它就不再允許計算標準成本,不妥,但是對原材料無所謂,因為系統會這樣處理,如此材料沒維護價格,BOM用到它的成品不計算其成本,但是
18、如此物料維護了價格后,還是以物料價格為先的.(當然CK11N去估算此原材料是不行的,用戶也不需如此做).二是按SAP推薦的如果將price設成0.01,price unit設置成100.Case 2如何限定物料價格必須維護.(1)對采用S price control的.SAP默認是Warning(Tcode :OMT4 M3-132,如需要限定必須維護價格,將其改成W就可.(2)對采用V price control的,OMT4找不到其消息號M3-131,但系統默認是Warning,如果用戶認為也有相關配置就有犯了認為SAP萬能的錯誤,再次強調SAP只是一堆代碼并不神秘.好讓我們看看其邏輯.*實
19、際上直接使用SE16:T160M可直接配置MM相關.如圖:1SE38找到程序LMG11F01 2在此處設置斷點 3如價格為0(空格) 寫死的,當然配置無效.再看S Price control(如下圖,顯然從T160M表讀了IMG數據).4靈活運用消息.對于消息的運用,除了可配置消息類別外,另外一個重要用處就在于,可根據消息找到程序彈出消息的確切行,然后稍微花點時間看看程序邏輯就可大概知道異常發生的根本原因. 從某種程度來講,即使對某模塊很陌生,只要掌握得好,依舊可排除一些問題.5 配置自定義的消息.倆方法可模妨SAP的消息配置1從上我們已經知道既然T160M是可直接使用SE16維護的,我們就可
20、直接將相關設置寫入T160M.然后就可根據相關設置取得消息類別(如上圖我們使用函數ME_CHECK_T160M),這樣比類似MESSAGE E017(ZFIMSG)Hard code要安全得多,假設不管三七二十一就給出錯誤消息,除非在程序中確信已考慮了所有情況,否則還是在T160M這樣設置比較好(萬一在生產環境還可更改E成W什么的).2我們知道T100C是所謂的可配置消息表,我們可使用SE16:T100C和V_T100C.(1)SE16:T100S定義消息可配置信息.如圖1在此新建.(進去browse數據似乎不可新建)設置消息.如下圖.1Appl Area消息類ZFIMSG. 2表示允許配置的
21、消息類型 3沒選則表示不能關閉消息.(2)SE16:V_T100C配置消息.如圖:1表示直接使用程序(Tcode)的消息類型2當當程序以BDC方式運行時的消息類型3就是上圖設置的允許的消息類型,可看到警告和關閉都沒出現(T100C沒允許)同樣在程序中避免使用淚水MESSAGE E017(ZFIMSG)而采用CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFIMSG' I_DTYPE = '' I_MSGNR = '017' IMPORTING E_MSGT
22、Y = SY-MSGTY.根據返回的SY-MSGTY去判斷消息類型將更好些.6實例介紹PO在有發票校驗后禁止修改價格,假設無PO release策略,使用User-exit步驟如下:(1)找合適的用戶出口發現EXIT_SAPMM06E_017比較合適,SMOD 輸入enhancement name :MM06E005(2)編寫代碼.*&-*& Include ZXM06U42 *&-*DATA : ZWATEKPO like BEKPO , ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73) TYPE C.T
23、ABLES 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 表,如有Q,R表示有發票校驗歷史,不允許更改價#SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn
24、 AND EBELP = I_EKPO-EBELP 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)."使用下面函數代替. CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EX
25、PORTING 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 = 'VAR1'. ZIEINFO-MSGV2 = 'VAR2'. APPEND ZIEI
26、NFO . CALL FUNCTION 'MESSAGE_GET_TEXT' EXPORTING IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF.*在大多數情況下追蹤消息能發現問題所在,然而在一些特定情況下,SAP顯示的消息似乎和實際業務并不符合.好比一個人咳嗽的厲害,以為是感冒結果其實不過是有寫異物進入其喉嚨而已.14.使用用戶授權15.調用外部程序和程序動態生產16.選擇屏幕17.使用程序運行變式18.制作Tcode二.加強篇.
27、1.CATT2.BDC3.制作程序的background job4.SapScript5.Smartform6.SAP Query7.ALV編程8.ALE/iDoc9.Report painter和Drilldown Report10.RFC/BAPI11.編寫用戶增強12.深入ABAP工作臺在這章將深入介紹各種ABAP對象的操作.13.傳輸請求這節并不是側重介紹如何配置傳輸請求和其運行機制的,這通常是basis的工作和ABAPer并無關系,還是那句話,了解點大概是必要的.通常企業起碼會有兩個系統,開發(測試)系統和生產系統(有些企業開發任務相對少,開發和測試使用同一臺server甚至同一client,開發和測試也都有ABAPer完成),如果要嚴格開發流程,開發,測試必須是分開的(為了節省當然可使用同一server,不同的Client甚至用不同System Number邏輯分成兩Server),在此不深入討論.熟悉幾個名詞:1開發類(Development Class).開發類可簡單理解為邏輯上相關的一組ABAP對象,在將來傳輸時將使用同一傳輸層.實際上開發類本身也可看做是一個ABAP對象,可使用SE80建立.$TMP是本地開發類,屬于此開發類的任何ABAP對象(包括自定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作室設計與工作環境優化
- 工作中的時間管理與自律
- 工業設計與產品創新實踐
- 工業設計創新與技術趨勢
- 工業風餐廳裝修設計思路
- 工作場所中的安全衛生規范
- 工廠企業火災防范與應急處理
- 工程機械結構強度與穩定性研究
- 工程質量管理中的監理職責與實施策略
- 工程機械的故障診斷與維修
- 公司職員員工宿舍安全衛生檢查表
- GB∕T 17466.1-2019 家用和類似用途固定式電氣裝置的電器附件安裝盒和外殼 第1部分:通用要求
- DB6112∕T 0001-2019 西咸新區中深層無干擾地熱供熱系統應用技術導則
- 青島市 主要片區 項目 拆遷補償方案 鏈接
- 病例報告表(CRF)模板
- Q∕GDW 11612.2-2018 低壓電力線高速載波通信互聯互通技術規范 第2部分:技術要求
- 第三章_采場頂板活動規律
- 數字PID控制器設計制作.答案
- DR曝光參考條件
- 年中轉100萬噸水泥中轉站項目可行性研究報告模板
- 宣恩水利水產局
評論
0/150
提交評論