ABAP代表高級業(yè)務(wù)應(yīng)用程序編程,4GL(第4代)語言。 目前,它與Java一起被定位為SAP應(yīng)用服務(wù)器編程的主要語言。
讓我們從SAP系統(tǒng)的高級架構(gòu)開始。 典型SAP系統(tǒng)的3層客戶端/服務(wù)器體系結(jié)構(gòu)如下所示。
表示層包含可用于控制SAP系統(tǒng)的任何輸入設(shè)備。 這可以是web瀏覽器,移動設(shè)備等。 所有中央處理都在應(yīng)用程序服務(wù)器中進行。 應(yīng)用服務(wù)器本身不僅僅是一個系統(tǒng),而且它可以是處理系統(tǒng)的多個實例。 服務(wù)器與通常保存在單獨服務(wù)器上的數(shù)據(jù)庫層進行通信,主要是出于性能原因以及安全性。 通信發(fā)生在系統(tǒng)的每一層之間,從表示層到數(shù)據(jù)庫,然后備份鏈。
注意 - ABAP程序在應(yīng)用程序服務(wù)器級別運行。 軟件的技術(shù)分發(fā)與其物理位置無關(guān)。 這意味著基本上所有三個級別可以在一臺計算機上彼此安裝,或者每個級別可以安裝在不同的計算機或服務(wù)器上。
ABAP程序駐留在SAP數(shù)據(jù)庫中。 它們在作為SAP內(nèi)核一部分的運行時系統(tǒng)的控制下執(zhí)行。 運行時系統(tǒng)處理所有ABAP語句,控制流邏輯和響應(yīng)用戶事件。
因此,與C ++和Java不同,ABAP程序不存儲在單獨的外部文件中。 在數(shù)據(jù)庫內(nèi)部,ABAP代碼以兩種形式存在 -
可以使用ABAP工作臺工具查看和編輯的源代碼。
生成的代碼,它是一個二進制表示。 如果你熟悉Java,這個生成的代碼有點類似于Java字節(jié)碼。
運行時系統(tǒng)可以被認為是一個虛擬機,就像Java虛擬機一樣。 ABAP運行時系統(tǒng)的一個關(guān)鍵組件是將數(shù)據(jù)庫獨立語句(Open SQL)轉(zhuǎn)換為底層數(shù)據(jù)庫(本機SQL)理解的語句的數(shù)據(jù)庫接口。 SAP可以與各種各樣的數(shù)據(jù)庫一起工作,并且相同的ABAP程序可以在所有這些數(shù)據(jù)庫上運行。
報告是熟悉一般ABAP原則和工具的良好起點。 ABAP報告用于許多領(lǐng)域。 在本章中,我們將看到寫一個簡單的ABAP報告是多么容易。
讓我們開始使用常見的“Hello World"示例。
每個ABAP語句以ABAP關(guān)鍵字開頭,以句點結(jié)尾。 關(guān)鍵字必須至少由一個空格分隔。 無論是否為ABAP語句使用一行或多行。
您需要使用ABAP編輯器輸入您的代碼,ABAP編輯器是SAP NetWeaver應(yīng)用服務(wù)器ABAP(也稱為“AS ABAP")附帶的ABAP工具的一部分。
“AS ABAP"是具有自己的數(shù)據(jù)庫,ABAP運行時環(huán)境和ABAP開發(fā)工具(如ABAP編輯器)的應(yīng)用程序服務(wù)器。 AS ABAP提供獨立于硬件,操作系統(tǒng)和數(shù)據(jù)庫的開發(fā)平臺。
步驟1 - 啟動事務(wù)SE38以導(dǎo)航到ABAP編輯器(在下一章中討論)。 讓我們開始創(chuàng)建一個是許多ABAP對象之一的報表。
步驟2 - 在編輯器的初始屏幕上,在輸入字段PROGRAM中指定報告的名稱。 您可以指定名稱為ZHELLO1。 前面的Z對于名稱很重要。 Z確保您的報告駐留在客戶命名空間中。
客戶命名空間包括所有具有前綴Y或Z的對象。當(dāng)客戶或合作伙伴創(chuàng)建對象(如報告)以將這些對象與SAP的對象區(qū)分開并防止與對象的名稱沖突時,始終使用它。
步驟3 - 您可以用小寫字母鍵入報告名稱,但編輯器會將其更改為大寫。 所以ABAP對象的名稱是\'不區(qū)分大小寫。
步驟4 - 指定報告的名稱后,單擊CREATE按鈕。 將彈出一個彈出窗口ABAP:PROGRAM ATTRIBUTES,您將提供有關(guān)您的報告的更多信息。
步驟5 - 選擇“可執(zhí)行程序"作為報告類型,輸入標題“我的第一個ABAP報告",然后選擇保存以繼續(xù)。 接下來將彈出CREATE OBJECT DIRECTORY ENTRY窗口。 選擇按鈕LOCAL OBJECT,彈出框?qū)㈥P(guān)閉。
您可以通過輸入REPORT語句下面的WRITE語句來完成第一個報表,以便完整的報表只包含以下兩行:
REPORT ZHELLO1. WRITE 'Hello World'.
我們可以使用鍵盤(Ctrl + S)或保存圖標(命令字段旁邊的右側(cè))來保存報告。 ABAP開發(fā)在AS ABAP中進行。
啟動報告就像保存報告一樣簡單。 單擊激活按鈕(開始圖標旁邊的左側(cè)),然后使用圖標DIRECT PROCESSING或F8功能鍵啟動報告。 還顯示標題“My First ABAP Report"以及輸出“Hello World"。 這里是輸出 -
My First ABAP Report Hello World
只要您不激活新報告或激活對現(xiàn)有報告的更改,就不會與其用戶相關(guān)。 這在中央開發(fā)環(huán)境中非常重要,您可以在其中開發(fā)其他開發(fā)人員在其項目中使用的對象。
如果查看字段程序并雙擊值ZHELLO1,ABAP編輯器將顯示報告的代碼。 這稱為前向?qū)Ш健?/span> 雙擊對象的名稱在適當(dāng)?shù)墓ぞ咧写蜷_該對象。
為了理解SAP ABAP,您需要具有登錄,ABAP編輯器,注銷等屏幕的基本知識。 本章重點介紹屏幕導(dǎo)航和標準工具欄功能。
登錄到SAP服務(wù)器后,SAP登錄屏幕將提示輸入用戶ID和密碼。 您需要提供有效的用戶ID和密碼,然后按Enter鍵(用戶ID和密碼由系統(tǒng)管理員提供)。 以下是登錄屏幕。
以下是SAP屏幕工具欄。
菜單欄 - 菜單欄是對話框窗口的頂行。
標準工具欄 - 此工具欄中提供了大多數(shù)標準功能,如頁首,頁尾,上一頁,下一頁和保存。
標題欄 - 標題欄顯示您當(dāng)前所在的應(yīng)用程序/業(yè)務(wù)流程的名稱。
應(yīng)用程序工具欄 - 此處提供了特定于應(yīng)用程序的菜單選項。
命令字段 - 我們可以啟動應(yīng)用程序,而無需瀏覽菜單事務(wù),一些邏輯代碼分配給業(yè)務(wù)流程。 在命令字段中輸入事務(wù)代碼以直接啟動應(yīng)用程序。
您可以只啟動事務(wù)SE38(在命令字段中輸入SE38)以導(dǎo)航到ABAP編輯器。
退出鍵用于退出程序/模塊或注銷。 它們還用于返回到最后訪問的屏幕。
以下是SAP中使用的標準退出鍵,如圖所示。
以下是檢查,激活和處理報告的選項。
完成工作后,從SAP系統(tǒng)退出ABAP編輯器或/和注銷始終是一個很好的做法。
ABAP源程序由注釋和ABAP語句組成。 ABAP中的每個語句都以關(guān)鍵字開頭,以句點結(jié)尾,ABAP不區(qū)分大小寫。
程序中的第一個非注釋行以單詞REPORT開頭。 報告將始終是創(chuàng)建的任何可執(zhí)行程序的第一行。 該語句后面是以前創(chuàng)建的程序名稱。 然后用一個滿程終止該行。
語法是 -
REPORT [Program_Name]. [Statements…].
這允許語句根據(jù)需要在編輯器中占用盡可能多的行。 例如,REPORT可能看起來像這樣 -
REPORT Z_Test123_01.
語句包括命令和任何以句點結(jié)尾的變量和選項。 只要句子出現(xiàn)在語句的結(jié)尾,就不會出現(xiàn)問題。 正是這個時期,標志著聲明的完成。
讓我們編寫代碼。
在REPORT語句下面的行,只需鍵入以下語句:寫\'ABAP教程\'。
REPORT Z_Test123_01. Write 'This is ABAP Tutorial'.
撰寫語句時需要考慮的四件事: -
寫語句將引號中的任何內(nèi)容寫入輸出窗口。
ABAP編輯器將所有文本轉(zhuǎn)換為大寫,除了由單引號包圍的文本字符串。
與一些較舊的編程語言不同,ABAP不關(guān)心語句在一行上開始的位置。 您可以利用這一點,并通過使用縮進指示代碼塊來提高程序的可讀性。
ABAP對語句的布局沒有限制。 也就是說,可以在單個行上放置多個語句,或者單個語句可以跨多個行擴展。
如果每個語句的開頭是相同的,則連續(xù)語句可以鏈接在一起。 這是使用冒號(:)運算符和逗號,用于終止單個語句,就像句點結(jié)束正常語句。
下面是一個程序的例子,可以保存一些關(guān)鍵撫摸 -
WRITE 'Hello'. WRITE 'ABAP'. WRITE 'World'.
使用冒號表示法,可以這樣重寫 -
WRITE: 'Hello', 'ABAP', 'World'.
像任何其他ABAP語句,布局沒有關(guān)系。 這是一個同樣正確的聲明 -
WRITE: 'Hello', 'ABAP', 'World'.
內(nèi)聯(lián)注釋可以通過以下兩種方法之一在程序中的任何位置聲明:
通過在行的第一個位置放置星號(*)來指示全行注釋,在這種情況下,整個行被系統(tǒng)認為是注釋。 注釋不需要以句點終止,因為它們可能不會跨越多個行延伸 -
* This is the comment line
部分行注釋通過在語句之后輸入雙引號(“)來表示,雙引號后面的所有文本都被系統(tǒng)視為注釋。您無需在一段時間內(nèi)終止部分行注釋,因為它們不能跨越更多 比一條線 -
WRITE 'Hello'. "Here is the partial comment
注意 - 注釋代碼未由ABAP編輯器大寫。
NO-ZERO命令在DATA語句之后。 它抑制包含空格的數(shù)字字段的所有前導(dǎo)零。 輸出通常更容易讓用戶閱讀。
REPORT Z_Test123_01. DATA: W_NUR(10) TYPE N. MOVE 50 TO W_NUR. WRITE W_NUR NO-ZERO.
上面的代碼產(chǎn)生以下輸出 -
50
注意 - 沒有NO-ZERO命令,輸出為:0000000050
SKIP命令有助于在頁面上插入空行。
消息命令如下 -
WRITE 'This is the 1st line'. SKIP. WRITE 'This is the 2nd line'.
上述消息命令產(chǎn)生以下輸出 -
This is the 1st line This is the 2nd line
我們可以使用SKIP命令插入多個空白行。
SKIP number_of_lines.
輸出將是由線數(shù)定義的幾個空白行。 SKIP命令還可以將光標定位在頁面上所需的行上。
SKIP TO LINE line_number.
此命令用于在頁面上上下動態(tài)移動光標。 通常,在此命令后發(fā)出WRITE語句,將輸出放在所需的行上。
ULINE命令自動在輸出插入一條水平線。 也可以控制線的位置和長度。 語法很簡單 -
ULINE.
消息命令如下 -
WRITE 'This is Underlined'. ULINE.
上面的代碼產(chǎn)生以下輸出 -
This is Underlined (and a horizontal line below this).
MESSAGE命令顯示由程序開始處REPORT語句中指定的消息ID定義的消息。 消息ID是一個2字符代碼,用于定義在使用MESSAGE命令時程序?qū)⒃L問的1000個消息的集合。
消息編號從000到999.與每個數(shù)字相關(guān)聯(lián)的消息文本最多為80個字符。 調(diào)用消息號時,將顯示相應(yīng)的文本。
以下是用于Message命令的字符 -
信息 | 類型 | 后果 |
---|---|---|
E | Error | 消息出現(xiàn),應(yīng)用程序在當(dāng)前點暫停。 如果程序在后臺模式下運行,則作業(yè)將被取消,并且消息將記錄在作業(yè)日志中。 |
W | Warning | 將出現(xiàn)該消息,用戶必須按Enter鍵才能繼續(xù)應(yīng)用程序。 在后臺模式下,消息將記錄在作業(yè)日志中。 |
I | Information | 將打開一個彈出窗口,其中包含消息文本,用戶必須按Enter鍵才能繼續(xù)。 在后臺模式下,消息將記錄在作業(yè)日志中。 |
A | Abend | 此消息類將取消用戶當(dāng)前正在使用的事務(wù)。 |
S | Success | 這會在屏幕底部提供一條信息性消息。 顯示的信息是正性的,它只是為用戶反饋。 該消息不以任何方式阻礙程序。 |
X | Abort | 此消息中止程序并生成ABAP短轉(zhuǎn)儲。 |
錯誤消息通常用于阻止用戶做不應(yīng)該做的事情。 警告消息通常用于提醒用戶他們的行動的后果。 信息消息給用戶有用的信息。
當(dāng)我們?yōu)橄?chuàng)建消息時,ID AB,MESSAGE命令 - MESSAGE E011給出以下輸出 -
EAB011 This report does not support sub-number summarization.
當(dāng)在ABAP中編程時,我們需要使用各種變量來存儲各種信息。 變量只是保留值的存儲位置。 這意味著,當(dāng)您創(chuàng)建一個變量,你在內(nèi)存中保留一些空間。 您可能希望存儲各種數(shù)據(jù)類型的信息,如字符,整數(shù),浮點等?;谧兞康臄?shù)據(jù)類型,操作系統(tǒng)分配內(nèi)存并決定在保留內(nèi)存中可以存儲的內(nèi)容。
ABAP為程序員提供了豐富的固定長度和可變長度數(shù)據(jù)類型。 下表列出了ABAP基本數(shù)據(jù)類型 -
類型 | 關(guān)鍵詞 |
---|---|
字節(jié)字段 | X |
文本域 | C |
Integer | I |
浮點 | F |
打包數(shù)量 | P |
文本字符串 | STRING |
一些字段和數(shù)字可以使用一個或多個名稱來修改,如下所示 -
下表顯示數(shù)據(jù)類型,將值存儲在內(nèi)存中需要多少內(nèi)存,以及可以存儲在此類變量中的最小值和最大值。
類型 | 典型長度 | 典型范圍 |
---|---|---|
X | 1字節(jié) | 任何字節(jié)值(00到FF) |
C | 1個字符 | 1?65535 |
N(數(shù)字文本字段) | 1個字符 | 1?65535 |
D(類似字符的日期) | 8個字符 | 8個字符 |
T(字符型時間) | 6個字符 | 6個字符 |
I | 4字節(jié) | -2147483648至2147483647 |
F | 8字節(jié) | 2.2250738585072014E-308至1.7976931348623157E + 308正或負 |
P | 8字節(jié) | [-10 ^(2len -1)+1]到[+ 10 ^(2len -1)1](其中l(wèi)en =固定長度) |
STRING | Variable | 任何字母數(shù)字字符 |
XSTRING(字節(jié)字符串) | Variable | 任何字節(jié)值(00到FF) |
REPORT YR_SEP_12. DATA text_line TYPE C LENGTH 40. text_line = 'A Chapter on Data Types'. Write text_line. DATA text_string TYPE STRING. text_string = 'A Program in ABAP'. Write / text_string. DATA d_date TYPE D. d_date = SY-DATUM. Write / d_date.
在此示例中,我們有一個具有預(yù)定義長度40的C類型的字符串。STRING是可用于任何長度可變的字符串(文本字符串)的數(shù)據(jù)類型。 類型STRING數(shù)據(jù)對象通常應(yīng)用于固定長度不重要的字符內(nèi)容。
上面的代碼產(chǎn)生以下輸出 -
A Chapter on Data Types A Program in ABAP 12092015
DATE類型用于存儲日期信息,并且可以存儲八位數(shù)字,如上所示。
復(fù)雜類型分為結(jié)構(gòu)類型和表類型。 在結(jié)構(gòu)類型中,基本類型和結(jié)構(gòu)(即,嵌入在結(jié)構(gòu)中的結(jié)構(gòu))被分組在一起。 你可以只考慮基本類型的分組。 但是你必須意識到結(jié)構(gòu)的嵌套的可用性。
當(dāng)基本類型被分組在一起時,數(shù)據(jù)項可以作為分組數(shù)據(jù)項被訪問或者可以訪問各個基本類型數(shù)據(jù)項(結(jié)構(gòu)字段)。 表類型在其他編程語言中更好地稱為數(shù)組。 數(shù)組可以是簡單數(shù)組或結(jié)構(gòu)數(shù)組。 在ABAP中,數(shù)組被稱為內(nèi)部表,并且與其他編程語言相比,它們可以以許多方式被聲明和操作。 下表顯示了表示內(nèi)部表的參數(shù)。
S.No。 | 參數(shù)& 描述 |
---|---|
1 |
線或行類型 內(nèi)部表的行可以是基本類型,復(fù)雜類型或引用類型。 |
2 |
鍵 將字段或一組字段指定為標識表行的內(nèi)部表的鍵。 鍵包含基本類型的字段。 |
3 |
存取方法 描述ABAP程序如何訪問單個表條目。 |
引用類型用于引用類,接口和運行時數(shù)據(jù)項的實例。 ABAP OOP運行時類型服務(wù)(RTTS)允許在運行時聲明數(shù)據(jù)項。
變量是用于在程序的分配的存儲區(qū)域中存儲值的命名數(shù)據(jù)對象。 顧名思義,用戶可以在ABAP語句的幫助下更改變量的內(nèi)容。 ABAP中的每個變量都有一個特定的類型,它決定了變量內(nèi)存的大小和布局; 可以存儲在該存儲器內(nèi)的值的范圍; 以及可以應(yīng)用于該變量的一組操作。
您必須先聲明所有變量,然后才能使用它們。 變量聲明的基本形式是 -
DATA <f> TYPE <type> VALUE <val>.
這里< f> 指定變量的名稱。 變量的名稱最多可包含30個字符。 < type> 指定變量的類型。 具有完全指定的技術(shù)屬性的任何數(shù)據(jù)類型被稱為< type&gt ;. < val> 指定< f>的初始值。 變量。 在定義基本固定長度變量的情況下,DATA語句會自動使用類型特定的初始值填充變量的值。 < val>的其他可能值 可以是文字,常量或顯式子句,例如Is INITIAL。
以下是變量聲明的有效示例。
DATA d1(2) TYPE C. DATA d2 LIKE d1. DATA minimum_value TYPE I VALUE 10.
在上面的代碼片段中,d1是C類型的變量,d2是d1類型的變量,minimum_value是ABAP整數(shù)類型的變量。
本章將解釋ABAP中可用的各種變量類型。 ABAP中有三種變量 -
靜態(tài)變量在子程序,函數(shù)模塊和靜態(tài)方法中聲明。
生命周期與聲明的上下文相關(guān)聯(lián)。
使用\'CLASS-DATA\'語句,可以在類中聲明變量。
“PARAMETERS"語句可用于聲明鏈接到選擇屏幕上的輸入字段的基本數(shù)據(jù)對象。
您還可以使用“SELECT-OPTIONS"語句聲明在選擇屏幕上鏈接到輸入字段的內(nèi)部表。
以下是命名變量時使用的約定 -
您不能使用特殊字符(例如“t"和“,")來命名變量。
無法更改預(yù)定義數(shù)據(jù)對象的名稱。
變量的名稱不能與任何ABAP關(guān)鍵字或子句相同。
變量的名稱必須傳達變量的含義,而不需要進一步的評論。
連字符被保留以表示結(jié)構(gòu)的組件。 因此,你應(yīng)該避免在變量名中使用連字符。
下劃線字符可用于分隔復(fù)合詞。
這個程序顯示如何使用PARAMETERS語句聲明一個變量 -
REPORT ZTest123_01. PARAMETERS: NAME(10) TYPE C, CLASS TYPE I, SCORE TYPE P DECIMALS 2, CONNECT TYPE MARA-MATNR.
這里,NAME表示10個字符的參數(shù),CLASS表示整數(shù)類型的參數(shù),默認大小(以字節(jié)為單位),SCORE表示具有最多兩個小數(shù)位的值的打包類型參數(shù),CONNECT是指ABAP字典的MARA-MATNF類型 。
上面的代碼產(chǎn)生以下輸出 -
聲明引用變量的語法是 -
DATA <ref> TYPE REF TO <type> VALUE IS INITIAL.
REF TO附加聲明一個引用變量ref。
REF TO之后的規(guī)范指定了引用變量的靜態(tài)類型。
靜態(tài)類型限制< ref>的對象集合。 可以參考。
引用變量的動態(tài)類型是它當(dāng)前引用的數(shù)據(jù)類型或類。
靜態(tài)類型總是更加通用或與動態(tài)類型相同。
TYPE添加用于創(chuàng)建綁定引用類型和起始值,并且只能在VALUE添加后指定IS INITIAL。
CLASS C1 DEFINITION. PUBLIC SECTION. DATA Bl TYPE I VALUE 1. ENDCLASS. DATA: Oref TYPE REF TO C1 , Dref1 LIKE REF TO Oref, Dref2 TYPE REF TO I . CREATE OBJECT Oref. GET REFERENCE OF Oref INTO Dref1. CREATE DATA Dref2. Dref2→* = Dref1→*→Bl.
在上面的代碼片段中,聲明了對象引用Oref和兩個數(shù)據(jù)引用變量Dref1和Dref2。
這兩個數(shù)據(jù)引用變量都是完全類型化的,可以使用取消引用運算符→*在操作數(shù)位置取消引用。
ABAP系統(tǒng)變量可從所有ABAP程序訪問。
這些字段實際上由運行時環(huán)境填充。
這些字段中的值指示系統(tǒng)在任何給定時間點的狀態(tài)。
您可以在SAP中的SYST表中找到系統(tǒng)變量的完整列表。
可以使用“SYST-"或“SY-"訪問SYST結(jié)構(gòu)的各個字段。
REPORT Z_Test123_01. WRITE:/'SY-ABCDE', SY-ABCDE, /'SY-DATUM', SY-DATUM, /'SY-DBSYS', SY-DBSYS, /'SY-HOST ', SY-HOST, /'SY-LANGU', SY-LANGU, /'SY-MANDT', SY-MANDT, /'SY-OPSYS', SY-OPSYS, /'SY-SAPRL', SY-SAPRL, /'SY-SYSID', SY-SYSID, /'SY-TCODE', SY-TCODE, /'SY-UNAME', SY-UNAME, /'SY-UZEIT', SY-UZEIT.
上面的代碼產(chǎn)生以下輸出 -
SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ SY-DATUM 12.09.2015 SY-DBSYS ORACLE SY-HOST sapserver SY-LANGU EN SY-MANDT 800 SY-OPSYS Windows NT SY-SAPRL 700 SY-SYSID DMO SY-TCODE SE38 SY-UNAME SAPUSER SY-UZEIT 14:25:48
文字是您在程序的源代碼中創(chuàng)建的未命名數(shù)據(jù)對象。 他們完全由他們的價值定義。 您不能更改文字的值。 常量是通過使用聲明性語句靜態(tài)創(chuàng)建的命名數(shù)據(jù)對象。 通過為程序的存儲區(qū)域中存儲的值分配一個常量來聲明該常量。 分配給常數(shù)的值在程序執(zhí)行期間不能更改。 這些固定值也可以被視為文字。 有兩種類型的文字 - 數(shù)字和字符。
數(shù)字文字是可以有前綴符號的數(shù)字序列。 在數(shù)字文字中,沒有十進制分隔符,也沒有帶尾數(shù)和指數(shù)的符號。
以下是一些數(shù)字文字的例子 -
183. -97. +326.
字符文字是用單引號括起來的ABAP程序的源代碼中的字母數(shù)字字符序列。 用引號括起來的字符文字具有預(yù)定義的ABAP類型C,并被描述為文本字段文字。 包含在“后引號"中的文字具有ABAP類型STRING,并且被描述為字符串文字。 字段長度由字符數(shù)定義。
注意 - 在文本字段文字中,將忽略尾隨空白,但在字符串文字中將會考慮它們。
以下是字符文字的一些示例。
REPORT YR_SEP_12. Write 'Tutorials Point'. Write / 'ABAP Tutorial'.
REPORT YR_SEP_12. Write `Tutorials Point `. Write / `ABAP Tutorial `.
在上述兩種情況下的輸出相同 -
Tutorials Point ABAP Tutorial
注意 - 當(dāng)我們嘗試更改常量的值時,可能會發(fā)生語法或運行時錯誤。 在類或接口的聲明部分中聲明的常量屬于該類或接口的靜態(tài)屬性。
我們可以在CONSTANTS語句的幫助下聲明命名的數(shù)據(jù)對象。
以下是語法 -
CONSTANTS <f> TYPE <type> VALUE <val>.
CONSTANTS語句類似于DATA語句。
< f> 指定常量的名稱。 TYPE< type> 表示常數(shù),其命名為< f&gt ;,其繼承與現(xiàn)有數(shù)據(jù)類型< type>相同的技術(shù)屬性。 VALUE< val> 為聲明的常量名< f>賦值一個初始值。
注意 - 我們應(yīng)該使用CONSTANTS語句中的VALUE子句。 子句“VALUE"用于在聲明期間為常量賦予初始值。
我們有3種類型的常數(shù),如基本,復(fù)雜和參考常數(shù)。 以下語句顯示如何使用CONSTANTS語句定義常量 -
REPORT YR_SEP_12. CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'. Write: / 'The value of PQR is:', PQR.
輸出為 -
The value of PQR is: 1.2356
這里它涉及基本數(shù)據(jù)類型并且被稱為基本常數(shù)。
下面是復(fù)常數(shù)的示例 -
BEGIN OF EMPLOYEE, Name(25) TYPE C VALUE 'Management Team', Organization(40) TYPE C VALUE 'Tutorials Point Ltd', Place(10) TYPE C VALUE 'India', END OF EMPLOYEE.
在上面的代碼片段中,EMPLOYEE是一個由Name,Organization和Place字段組成的復(fù)雜常量。
以下語句聲明一個常量引用 -
CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.
我們可以在比較中使用常量引用,或者我們可以將其傳遞給過程。
ABAP提供了一組豐富的運算符來操縱變量。 所有ABAP運營商分為四類 -
算術(shù)運算符在數(shù)學(xué)表達式中使用的方式與在代數(shù)中使用的方式相同。 以下列表描述了算術(shù)運算符。 假設(shè)整數(shù)變量A保持20并且變量B保持40。
S.No。 | 算術(shù)運算符 描述 |
---|---|
1 |
&amp; plus; (添加) 在運算符的兩側(cè)添加值。 示例:A&amp; plus; B將給予60。 |
2 |
- (減法) 從左手操作數(shù)中減去右手操作數(shù)。 示例:A - B將給出-20。 |
3 |
*(乘法) 將運算符兩側(cè)的值相乘。 示例:A * B將給出800。 |
4 |
/(部門) 用右手操作數(shù)除左手操作數(shù)。 示例:B / A將給出2。 |
5 |
MOD(Modulus) 用右手操作數(shù)除左手操作數(shù),并返回余數(shù)。 示例:B MOD A將給出0。 |
REPORT YS_SEP_08. DATA: A TYPE I VALUE 150, B TYPE I VALUE 50, Result TYPE I. Result = A / B. WRITE / Result.
上面的代碼產(chǎn)生以下輸出 -
3
讓我們討論不同操作數(shù)的各種類型的比較運算符。
S.No。 | 比較運算符&amp; 描述 |
---|---|
1 |
=(相等測試)。 替代形式是EQ。 檢查兩個操作數(shù)的值是否相等,如果是,則條件為真。 示例(A = B)不為真。 |
2 |
<> (不等式檢驗)。 替代形式是NE。 檢查兩個操作數(shù)的值是否相等。 如果值不相等,則條件為真。 示例(A<> B)為真。 |
3 |
> (大于測試)。 替代形式是GT。 檢查左操作數(shù)的值是否大于右操作數(shù)的值。 如果是,則條件變?yōu)閠rue。 示例(A> B)不是真的。 |
4 |
< (小于測試)。 替代形式是LT。 檢查左操作數(shù)的值是否小于右操作數(shù)的值。 如果是,則條件變?yōu)閠rue。 示例(A |
5 |
> =(大于或等于)替代形式為GE。 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值。 如果是,則條件變?yōu)閠rue。 示例(A> = B)不是真的。 |
6 |
< =(小于或等于測試)。 替代形式是LE。 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值。 如果是,則條件變?yōu)閠rue。 示例(A |
7 |
a1 BETWEEN a2 AND a3(間隔測試) 檢查a1是否在a2和a3之間(包括)。 如果是,則條件變?yōu)檎妗?/span> 示例(A BETWEEN B和C)為真。 |
8 |
IS INITIAL 如果變量的內(nèi)容沒有改變,并且它已被自動賦予其初始值,則條件為真。 示例(A IS INITIAL)不為真 |
9 |
不是初始 如果變量的內(nèi)容已更改,則條件為真。 示例(A IS NOT INITIAL)為真。 |
注意 - 如果變量的數(shù)據(jù)類型或長度不匹配,則執(zhí)行自動轉(zhuǎn)換。 在比較不同數(shù)據(jù)類型的兩個值時,對一個或兩個值執(zhí)行自動類型調(diào)整。 轉(zhuǎn)換類型由數(shù)據(jù)類型和數(shù)據(jù)類型的首選順序決定。
以下是喜好的順序 -
如果一個字段是類型I,則另一個字段轉(zhuǎn)換為類型I.
如果一個字段是P類型,則另一個字段轉(zhuǎn)換為類型P.
如果一個字段是類型D,則另一個字段轉(zhuǎn)換為類型D.但是C和N類型不轉(zhuǎn)換,它們直接比較。 類似于類型T的情況。
如果一個字段是類型N,另一個是類型C或X,則兩個字段都轉(zhuǎn)換為類型P.
如果一個字段是類型C,另一個是類型X,則X類型轉(zhuǎn)換為類型C.
REPORT YS_SEP_08. DATA: A TYPE I VALUE 115, B TYPE I VALUE 119. IF A LT B. WRITE: / 'A is less than B'. ENDIF
上面的代碼產(chǎn)生以下輸出 -
A is less than B
REPORT YS_SEP_08. DATA: A TYPE I. IF A IS INITIAL. WRITE: / 'A is assigned'. ENDIF.
上面的代碼產(chǎn)生以下輸出 -
A is assigned.
ABAP還提供了一系列可以用于構(gòu)建布爾代數(shù)表達式的逐位邏輯運算符。 位運算符可以使用括號等組合在復(fù)雜表達式中。
S.No。 | 按位運算符 描述 |
---|---|
1 |
BIT-NOT 一元運算符,將十六進制數(shù)中的所有位翻轉(zhuǎn)為相反的值。 例如,將此運算符應(yīng)用于具有位級值10101010(例如“AA")的十六進制數(shù)將給出01010101。 |
2 |
BIT-AND 此二進制運算符使用布爾AND運算符逐位比較每個字段。 |
3 |
BIT-XOR 二進制運算符,使用布爾XOR(異或)運算符逐位比較每個字段。 |
4 |
BIT-OR 二進制運算符,使用布爾OR運算符逐位比較每個字段。 |
例如,以下是真值表,其示出了當(dāng)對包含在字段A和字段B中的兩個比特值應(yīng)用布爾AND,OR或XOR運算符時生成的值。
字段A | 字段B | 和 | 要么 | XOR |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
以下是字符串運算符的列表 -
S.No。 | 字符串運算符&amp; 描述 |
---|---|
1 |
CO(僅包含) 檢查A是否僅由B中的字符組成。 |
2 |
CN(不包含) 檢查A是否包含不在B中的字符。 |
3 |
CA(包含任何) 檢查A是否至少包含一個字符B. |
4 |
NA(不含任何) 檢查A是否不包含任何字符B. |
5 |
CS(包含字符串) 檢查A是否包含字符串B. |
6 |
NS(不包含字符串) 檢查A是否不包含字符串B. |
7 |
CP(包含模式) 它檢查A是否包含B中的模式。 |
8 |
NP(不包含模式) 它檢查A是否不包含B中的模式。 |
REPORT YS_SEP_08. DATA: P(10) TYPE C VALUE 'APPLE', Q(10) TYPE C VALUE 'CHAIR'. IF P CA Q. WRITE: / 'P contains at least one character of Q'. ENDIF.
上面的代碼產(chǎn)生以下輸出 -
P contains at least one character of Q.
可能有一種情況,當(dāng)你需要執(zhí)行一段代碼幾次。 一般來說,語句是按順序執(zhí)行的:函數(shù)中的第一個語句首先執(zhí)行,然后是第二個語句,依此類推。
編程語言提供允許更復(fù)雜的執(zhí)行路徑的各種控制結(jié)構(gòu)。 循環(huán)語句允許我們多次執(zhí)行一個語句或一組語句,以下是大多數(shù)編程語言中的循環(huán)語句的一般形式。
ABAP編程語言提供以下類型的循環(huán)來處理循環(huán)需求。
S.No。 | 循環(huán)類型&amp; 描述 |
---|---|
1 |
WHILE loop
當(dāng)給定條件為真時,重復(fù)一個語句或一組語句。 它在執(zhí)行循環(huán)體之前測試條件。 |
2 |
Do loop
DO語句對于將特定任務(wù)重復(fù)特定次數(shù)很有用。 |
3 |
Nested loop
您可以在任何另一個WHILE或DO循環(huán)中使用一個或多個循環(huán)。 |
循環(huán)控制語句從其正常序列改變執(zhí)行。 ABAP包括允許循環(huán)提前結(jié)束的控制語句。 它支持以下控制語句。
S.No。 | 控制語句&amp; 描述 |
---|---|
1 |
CONTINUE
導(dǎo)致循環(huán)跳過其身體的剩余部分,并開始下一個循環(huán)傳遞。 |
2 |
CHECK
如果條件為假,則在CHECK之后的剩余語句被忽略,并且系統(tǒng)開始下一循環(huán)通過。 |
3 |
EXIT
完全終止循環(huán),并將執(zhí)行轉(zhuǎn)移到循環(huán)后立即執(zhí)行的語句。 |
決策結(jié)構(gòu)具有要由程序評估或測試的一個或多個條件,以及如果條件被確定為真則要執(zhí)行的一個或多個語句,以及可選地,如果條件 被確定為假。
以下是大多數(shù)編程語言中典型的決策結(jié)構(gòu)的一般形式 -
ABAP編程語言提供以下類型的決策語句。
S.No。 | 聲明&amp; 描述 |
---|---|
1 |
IF Statement
IF語句由邏輯表達式后跟一個或多個語句組成。 |
2 |
IF.. Else Statement
IF語句后面可以是一個可選的ELSE語句,當(dāng)表達式為false時執(zhí)行。 |
3 |
Nested IF Statement
您可以在另一個IF或ELSEIF語句中使用一個IF或ELSEIF語句。 |
4 |
CASE Control Statement
當(dāng)我們需要比較兩個或多個字段或變量時,使用CASE語句。 |
在ABAP編程中廣泛使用的字符串是一系列字符。
我們使用數(shù)據(jù)類型C變量保存字母數(shù)字字符,最少為1個字符,最多為65,535個字符。 默認情況下,這些向左對齊。
以下聲明和初始化創(chuàng)建一個由“Hello"字組成的字符串。 字符串的大小正好是單詞“Hello"中的字符數(shù)。
Data my_Char(5) VALUE 'Hello'.
以下程序是創(chuàng)建字符串的示例。
REPORT YT_SEP_15. DATA my_Char(5) VALUE 'Hello'. Write my_Char.
上面的代碼產(chǎn)生以下輸出 -
Hello
為了找到字符串的長度,我們可以使用 STRLEN語句。 STRLEN()函數(shù)返回字符串中包含的字符數(shù)。
REPORT YT_SEP_15. DATA: title_1(10) VALUE 'Tutorials', length_1 TYPE I. length_1 = STRLEN( title_1 ). Write: / 'The Length of the Title is:', length_1.
上面的代碼產(chǎn)生以下輸出 -
The Length of the Title is: 9
ABAP支持處理字符串的各種語句。
S.No。 | 聲明和; 目的 |
---|---|
1 |
CONCATENATE 兩個字符串連接形成第三個字符串。 |
2 |
CONDENSE 此語句刪除空格字符。 |
3 |
STRLEN 用于查找字段的長度。 |
4 |
REPLACE 用于以字符進行替換。 |
5 |
搜索 在字符串中運行搜索。 |
6 |
SHIFT 用于向左或向右移動字符串的內(nèi)容。 |
7 |
SPLIT 用于將字段的內(nèi)容拆分為兩個或多個字段。 |
下面的例子使用了上面提到的一些語句 -
REPORT YT_SEP_15. DATA: title_1(10) VALUE 'Tutorials', title_2(10) VALUE 'Point', spaced_title(30) VALUE 'Tutorials Point Limited', sep, dest1(30), dest2(30). CONCATENATE title_1 title_2 INTO dest1. Write: / 'Concatenation:', dest1. CONCATENATE title_1 title_2 INTO dest2 SEPARATED BY sep. Write: / 'Concatenation with Space:', dest2. CONDENSE spaced_title. Write: / 'Condense with Gaps:', spaced_title. CONDENSE spaced_title NO-GAPS. Write: / 'Condense with No Gaps:', spaced_title.
上面的代碼產(chǎn)生以下輸出 -
Concatenation: TutorialsPoint Concatenation with Space: Tutorials Point Condense with Gaps: Tutorials Point Limited Condense with No Gaps: TutorialsPointLimited
注意 -
在Concatenation的情況下,\'sep\'在字段之間插入一個空格。
CONDENSE語句刪除字段之間的空格,但只留下1個字符的空格。
\'NO-GAPS\'是CONDENSE語句的可選添加,刪除所有空格。
ABAP隱式引用了公歷日歷,在世界大部分地區(qū)有效。 我們可以將輸出轉(zhuǎn)換為特定國家/地區(qū)的日歷。 日期是指定到關(guān)于日歷的精確日,周或月的時間。 時間被指定為相對于一天的精確秒或分鐘。 ABAP總是以24小時格式節(jié)省時間。 輸出可以具有特定于國家的格式。 日期和時間通常被解釋為在當(dāng)前時區(qū)有效的本地日期。
ABAP提供了兩種內(nèi)置類型來處理日期和時間 -
以下是基本格式 -
DATA: date TYPE D, time TYPE T. DATA: year TYPE I, month TYPE I, day TYPE I, hour TYPE I, minute TYPE I, second TYPE I.
這兩種類型都是分別具有YYYYMMDD和HHMMSS格式的固定長度字符類型。
除了這些內(nèi)置類型,其他兩種類型 TIMESTAMP 和 TIMESTAMPL 在許多標準應(yīng)用程序表中用于存儲UTC格式的時間戳。 下表顯示了ABAP中可用的基本日期和時間類型。
S.No。 | 數(shù)據(jù)類型&amp; 描述 |
---|---|
1 |
D 內(nèi)置的固定長度日期類型,格式為YYYYMMDD。 例如,值20100913表示2010年9月13日的日期。 |
2 |
T 內(nèi)置固定長度時間類型,格式為HH MM SS。 例如,值102305表示時間10:23:05 AM。 |
3 |
TIMESTAMP (類型P - 長度8無小數(shù)) 此類型用于表示YYYYMMDDhhmmss表單中的短時間戳。 例如,值20100913102305表示2010年9月13日上午10:23:05的日期。 |
4 |
TIMESTAMPL (類型P - 長度11小數(shù)7) TIMESTAMPL表示YYYYMMDDhhmmss,mmmuuun表單中的長時間戳。 這里,附加數(shù)字“mmmuuun"表示秒的分數(shù)。 |
以下代碼片段檢索當(dāng)前系統(tǒng)日期和時間。
REPORT YR_SEP_15. DATA: date_1 TYPE D. date_1 = SY-DATUM. Write: / 'Present Date is:', date_1 DD/MM/YYYY. date_1 = date_1 + 06. Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.
上面的代碼產(chǎn)生以下輸出 -
Present Date is: 21.09.2015 Date after 6 Days is: 27.09.2015
變量date_1分配有當(dāng)前系統(tǒng)日期SY-DATUM的值。 接下來,我們將日期值增加6.對于ABAP中的日期計算,這意味著我們將日期對象的日期組件增加6天。 ABAP運行時環(huán)境足夠聰明,可以在每月結(jié)束時翻轉(zhuǎn)日期值。
時間計算與日期計算類似。 以下代碼使用基本時間算法將當(dāng)前系統(tǒng)時間增加75秒。
REPORT YR_SEP_15. DATA: time_1 TYPE T. time_1 = SY-UZEIT. Write /(60) time_1 USING EDIT MASK 'Now the Time is: __:__:__'. time_1 = time_1 + 75. Write /(60) time_1 USING EDIT MASK 'A Minute and a Quarter from Now, it is: __:__:__'.
上面的代碼產(chǎn)生以下輸出 -
Now the Time is 11:45:05 A Minute and a Quarter from Now, it is: 11:46:20
您可以使用 GET TIME STAMP 檢索當(dāng)前系統(tǒng)時間并將其存儲在時間戳變量中,如以下代碼所示。 GET TIME STAMP語句根據(jù)所使用的時間戳數(shù)據(jù)對象的類型以長指針或短指針格式存儲時間戳。 時間戳值使用UTC標準進行編碼。
REPORT YR_SEP_12. DATA: stamp_1 TYPE TIMESTAMP, stamp_2 TYPE TIMESTAMPL. GET TIME STAMP FIELD stamp_1. Write: / 'The short time stamp is:', stamp_1 TIME ZONE SY-ZONLO. GET TIME STAMP FIELD stamp_2. Write: / 'The long time stamp is:', stamp_2 TIME ZONE SY-ZONLO.
上面的代碼產(chǎn)生以下輸出 -
The short time stamp is: 18.09.2015 11:19:40 The long time stamp is: 18.09.2015 11:19:40,9370000
在上面的示例中,我們使用TIME ZONE添加WRITE語句顯示時間戳。 此添加根據(jù)指定的時區(qū)的規(guī)則格式化時間戳的輸出。 系統(tǒng)字段SY-ZONLO用于顯示在用戶首選項中配置的本地時區(qū)。
ABAP提供各種類型的格式化選項以格式化程序的輸出。 例如,您可以創(chuàng)建包含不同顏色或格式樣式的各種項目的列表。
WRITE語句是用于在屏幕上顯示數(shù)據(jù)的格式化語句。 WRITE語句有不同的格式選項。 WRITE語句的語法是 -
WRITE <format> <f> <options>.
在此語法中,< format> 表示輸出格式規(guī)范,其可以是指示從新行開始的輸出的顯示的正斜杠(/)。 除了正斜杠之外,格式規(guī)范還包括列號和列長度。 例如,WRITE / 04(6)語句顯示新行從第4列開始,列長度為6,而WRITE 20語句顯示了第20列的當(dāng)前行。參數(shù)< f> 表示數(shù)據(jù)變量或編號文本。
下表描述了用于格式化的各種子句 -
S.No。 | 條款及條件 描述 |
---|---|
1 |
LEFT-JUSTIFIED 指定輸出為左對齊。 |
2 |
CENTERED 表示輸出居中。 |
3 |
RIGHT-JUSTIFIED 指定輸出為右對齊。 |
4 |
UNDER< g> 輸出直接在字段< g>下啟動。 |
5 |
NO-GAP 指定字段< f>之后的空白 被拒絕。 |
6 |
使用編輯掩碼 表示格式模板< m>的規(guī)范。 使用無編輯掩碼:這指定禁用在ABAP字典中指定的格式模板。 |
7 |
NO-ZERO 如果字段只包含零,則它們將被空格替換。 |
以下是數(shù)字類型字段的格式設(shè)置選項 -
S.No。 | 條款及條件 描述 |
---|---|
1 |
NO-SIGN 指定屏幕上不顯示前導(dǎo)符號。 |
2 |
EXPONENT< e> 指定在類型F(浮點字段)中,指數(shù)在< e>中定義。 |
3 |
ROUND< r> 類型P字段(壓縮數(shù)值數(shù)據(jù)類型)首先乘以10 **( - r),然后四舍五入為整數(shù)值。 |
4 |
CURRENCY< c> 表示格式化是根據(jù)貨幣< c> 值存儲在TCURX數(shù)據(jù)庫表中。 |
5 |
UNIT< u> 指定小數(shù)位數(shù)根據(jù)< u> 單位,如類型P的T006數(shù)據(jù)庫表中指定。 |
6 |
DECIMALS< d> 指定數(shù)字的數(shù)目< d> 必須顯示在小數(shù)點后面。 |
例如,下表顯示了日期字段的不同格式設(shè)置選項 -
格式化選項 | 例子 |
---|---|
DD/MM/YY | 13/01/15 |
MM/DD/YY | 01/13/15 |
DD/MM/YYYY | 13/01/2015 |
MM/DD/YYYY | 01/13/2015 |
DDMMYY | 130115 |
MMDDYY | 011315 |
YYMMDD | 150113 |
這里,DD代表兩個數(shù)字中的日期,MM代表兩個數(shù)字中的月份,YY代表兩個數(shù)字中的年份,YYYY代表一年中的四個數(shù)字。
讓我們來看看一個實現(xiàn)上面一些格式化選項的ABAP代碼的例子 -
REPORT ZTest123_01. DATA: n(9) TYPE C VALUE 'Tutorials', m(5) TYPE C VALUE 'Point'. WRITE: n, m. WRITE: / n, / m UNDER n. WRITE: / n NO-GAP, m. DATA time TYPE T VALUE '112538'. WRITE: / time, /(8) time Using EDIT MASK '__:__:__'.
上面的代碼產(chǎn)生以下輸出 -
Tutorials Point Tutorials Point TutorialsPoint 112538 11:25:38
異常是在程序執(zhí)行期間出現(xiàn)的問題。 當(dāng)異常發(fā)生時,程序的正常流程中斷,程序應(yīng)用程序異常終止,這是不推薦的,因此這些異常將被處理。
異常提供了一種將控制從程序的一個部分轉(zhuǎn)移到另一個部分的方法。 ABAP異常處理建立在三個關(guān)鍵字 - RAISE,TRY,CATCH和CLEANUP。 假設(shè)塊將引發(fā)異常,則方法使用TRY和CATCH關(guān)鍵字的組合捕獲異常。 TRY - CATCH塊放置在可能生成異常的代碼周圍。 以下是使用TRY - CATCH的語法 -
TRY. Try Block <Code that raises an exception> CATCH Catch Block <exception handler M> . . . . . . . . . CATCH Catch Block <exception handler R> CLEANUP. Cleanup block <to restore consistent state> ENDTRY.
RAISE - 提出異常,表示發(fā)生了一些異常情況。 通常,異常處理程序會嘗試修復(fù)錯誤或找到替代解決方案。
TRY - TRY塊包含要處理其異常的應(yīng)用程序編碼。 此語句塊按順序處理。 它可以包含進一步的控制結(jié)構(gòu)和程序調(diào)用或其他ABAP程序。 它后面是一個或多個catch塊。
CATCH - 程序在要處理問題的程序中的地方使用異常處理程序捕獲異常。 CATCH關(guān)鍵字表示捕獲異常。
CLEANUP - 每當(dāng)在TRY塊中發(fā)生異常,而TRY塊未被同一TRY - ENDTRY結(jié)構(gòu)的處理程序捕獲時,將執(zhí)行CLEANUP塊的語句。 在CLEANUP子句中,系統(tǒng)可以將對象恢復(fù)到一致狀態(tài)或釋放外部資源。 也就是說,可以對TRY塊的上下文執(zhí)行清除工作。
可以在方法中的任何點,函數(shù)模塊,子例程等提出異常。 有兩種方式可以引發(fā)異常:
ABAP運行時系統(tǒng)引發(fā)的異常。
例如,Y = 1 / 0.這將導(dǎo)致類型CX_SY_ZERODIVIDE的運行時錯誤。
程序員提出的異常。
同時提升和創(chuàng)建異常對象。 使用第一個方案中已存在的異常對象來引發(fā)異常。 語法是:RAISE EXCEPTION exep。
處理程序用于捕獲異常。
讓我們來看看一段代碼片段 -
DATA: result TYPE P LENGTH 8 DECIMALS 2, exref TYPE REF TO CX_ROOT, msgtxt TYPE STRING. PARAMETERS: Num1 TYPE I, Num2 TYPE I. TRY. result = Num1 / Num2. CATCH CX_SY_ZERODIVIDE INTO exref. msgtxt = exref→GET_TEXT( ). CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. msgtxt = exref→GET_TEXT( ).
在上面的代碼片段中,我們試圖將Num1除以Num2,得到一個float類型變量的結(jié)果。
可以生成兩種類型的異常。
數(shù)字轉(zhuǎn)換錯誤。
除以零異常。 處理程序捕獲CX_SY_CONVERSION_NO_NUMBER異常以及CX_SY_ZERODIVIDE異常。 這里異常類的GET_TEXT()方法用于獲取異常的描述。
這里是異常的五個屬性和方法 -
S.No。 | 屬性&amp; 描述 |
---|---|
1 |
Textid 用于定義異常的不同文本,并且也影響方法get_text的結(jié)果。 |
2 |
上一頁 此屬性可以存儲原始異常,允許您構(gòu)建異常鏈。 |
3 |
get_text 這將根據(jù)異常的系統(tǒng)語言將文本表示作為字符串返回。 |
4 |
get_longtext 這會將異常的文本表示的長變體作為字符串返回。 |
5 |
get_source_position 給出引發(fā)異常的程序名和行號。 |
REPORT ZExceptionsDemo. PARAMETERS Num_1 TYPE I. DATA res_1 TYPE P DECIMALS 2. DATA orf_1 TYPE REF TO CX_ROOT. DATA txt_1 TYPE STRING. start-of-selection. Write: / 'Square Root and Division with:', Num_1. write: /. TRY. IF ABS( Num_1 ) > 150. RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. ENDIF. TRY. res_1 = SQRT( Num_1 ). Write: / 'Result of square root:', res_1. res_1 = 1 / Num_1. Write: / 'Result of division:', res_1. CATCH CX_SY_ZERODIVIDE INTO orf_1. txt_1 = orf_1→GET_TEXT( ). CLEANUP. CLEAR res_1. ENDTRY. CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. txt_1 = orf_1→GET_TEXT( ). CATCH CX_ROOT INTO orf_1. txt_1 = orf_1→GET_TEXT( ). ENDTRY. IF NOT txt_1 IS INITIAL. Write / txt_1. ENDIF. Write: / 'Final Result is:', res_1.
在此示例中,如果數(shù)字大于150,則引發(fā)異常CX_DEMO_ABS_TOO_LARGE。 上面的代碼為數(shù)字160生成以下輸出。
Square Root and Division with: 160 The absolute value of number is too high Final Result is: 0.00
正如你所知,SQL可以分為兩個部分 -
DML部分包括查詢和更新命令,如SELECT,INSERT,UPDATE,DELETE等,ABAP程序處理SQL的DML部分。 DDL部分由諸如CREATE TABLE,CREATE INDEX,DROP TABLE,ALTER TABLE等命令組成,ABAP字典處理SQL的DDL部分。
ABAP字典可以被視為駐留在SAP數(shù)據(jù)庫中的元數(shù)據(jù)(即關(guān)于數(shù)據(jù)的數(shù)據(jù))以及由數(shù)據(jù)庫維護的元數(shù)據(jù)。 詞典用于創(chuàng)建和管理數(shù)據(jù)定義,以及創(chuàng)建表,數(shù)據(jù)元素,域,視圖和類型。
ABAP詞典中的基本類型如下 -
數(shù)據(jù)元素通過定義數(shù)據(jù)類型,長度和可能的小數(shù)位數(shù)來描述基本類型。
結(jié)構(gòu)和可以具有任何類型的組件。
表類型描述了內(nèi)部表的結(jié)構(gòu)。
可以在ABAP程序中引用Dictionary環(huán)境中的各種對象。 詞典被稱為全局區(qū)域。 詞典中的對象對所有ABAP程序都是全局的,ABAP程序中的數(shù)據(jù)可以通過引用這些Dictionary全局對象來聲明。
字典支持用戶定義類型的定義,這些類型在ABAP程序中使用。 它們還定義數(shù)據(jù)庫對象的結(jié)構(gòu),如表,視圖和索引。 當(dāng)對象被激活時,這些對象將在底層數(shù)據(jù)庫的字典定義中自動創(chuàng)建。 詞典還提供編輯工具,如搜索幫助和鎖定工具,如鎖定對象。
ABAP字典實現(xiàn)以下 -
任何復(fù)雜的用戶定義類型都可以從詞典中的3種基本類型構(gòu)建。 客戶數(shù)據(jù)存儲在結(jié)構(gòu)“客戶"中,組件名稱,地址和電話如下圖所示。 名稱也是一個具有組件,名字和姓氏的結(jié)構(gòu)。 這兩個組件都是基本的,因為它們的類型由數(shù)據(jù)元素定義。
組件的類型地址由組件定義,其組件也是結(jié)構(gòu),而電話組件由表類型定義,因為客戶可以有多個電話號碼。 類型用于ABAP程序,也用于定義功能模塊的接口參數(shù)類型。
用于在ABAP字典中定義數(shù)據(jù)的三個基本對象是域,數(shù)據(jù)元素和表。 域用于表字段的技術(shù)定義,例如字段類型和長度,數(shù)據(jù)元素用于語義定義(簡短描述)。 數(shù)據(jù)元素描述了特定業(yè)務(wù)環(huán)境中的域的含義。 它主要包含字段幫助和屏幕中的字段標簽。
域被分配給數(shù)據(jù)元素,數(shù)據(jù)元素又被分配給表字段或結(jié)構(gòu)字段。 例如,將MATNR域(CHAR材料號)分配給諸如MATNR_N,MATNN和MATNR_D的數(shù)據(jù)元素,并且將這些分配給許多表域和結(jié)構(gòu)域。
在創(chuàng)建新域之前,請檢查任何現(xiàn)有域是否具有表字段中所需的相同技術(shù)規(guī)范。 如果是這樣,我們應(yīng)該使用現(xiàn)有的域。 讓我們討論創(chuàng)建域的過程。
步驟1 - 轉(zhuǎn)到事務(wù)SE11。
步驟2 - 在ABAP字典的初始屏幕中選擇域的單選按鈕,然后輸入域名稱,如以下屏幕截圖所示。 單擊CREATE按鈕。 您可以在客戶名稱空間下創(chuàng)建域,對象的名稱始終以“Z"或“Y"開頭。
步驟3 - 在域的維護屏幕的短文本字段中輸入說明。 在這種情況下,它是“客戶域"。 注意 - 在輸入此屬性之前,不能輸入任何其他屬性。
步驟4 - 在“定義"選項卡的“格式"框中輸入數(shù)據(jù)類型,字符數(shù)和小數(shù)位數(shù)。 按下輸出長度上的鍵,它建議并顯示輸出長度。 如果覆蓋建議的輸出長度,則可能會在激活域時看到警告。 你可以填寫Convers。 例程,符號和小寫字段(如果需要)。 但這些都是可選屬性。
步驟5 - 選擇值范圍標簽。 如果域限制為僅具有固定值,請輸入固定值或間隔。 如果系統(tǒng)必須在為引用此域的字段定義外鍵時將此表建議為檢查表,那么定義值表。 但所有這些都是可選屬性。
步驟6 - 儲存變更。 將顯示“創(chuàng)建對象目錄條目"彈出窗口,并要求提供包。 您可以輸入您在其中工作的包名稱。 如果您沒有任何包,那么您可以在對象導(dǎo)航器中創(chuàng)建它,或者您可以使用本地對象按鈕保存您的域。
步驟7 - 啟用您的網(wǎng)域。 單擊激活圖標(火柴圖標)或按CTRL + F3激活域。 將出現(xiàn)一個彈出窗口,其中列出了2個當(dāng)前處于非活動狀態(tài)的對象,如以下快照所示 -
步驟8 - 此時,將激活名為ZSEP_18的頂部條目“DOMA"。 由于突出顯示,單擊綠色勾號按鈕。 此窗口消失,狀態(tài)欄將顯示消息“對象已激活"。
如果在激活域時出現(xiàn)錯誤消息或警告,則會自動顯示激活日志。 激活日志顯示有關(guān)激活流的信息。 您也可以使用實用程序(M)→激活日志調(diào)用激活日志。
數(shù)據(jù)元素描述ABAP數(shù)據(jù)字典中的各個字段。 它們是復(fù)雜類型的最小不可分割單元,它們用于定義表字段的類型,表的結(jié)構(gòu)組件或行類型。 關(guān)于表字段的含義的信息以及關(guān)于編輯相應(yīng)屏幕字段的信息可以被分配給數(shù)據(jù)元素。 此信息自動可用于引用數(shù)據(jù)元素的所有屏幕字段。 數(shù)據(jù)元素描述了基本類型或引用類型。
在創(chuàng)建新的數(shù)據(jù)元素之前,您需要檢查任何現(xiàn)有的數(shù)據(jù)元素是否具有表字段中所需的相同語義規(guī)范。 如果是,您可以使用現(xiàn)有的數(shù)據(jù)元素。 您可以使用預(yù)定義的類型,域或引用類型分配數(shù)據(jù)元素。
以下是創(chuàng)建數(shù)據(jù)元素的過程 -
步驟1 - 轉(zhuǎn)到事務(wù)SE11。
步驟2 - 在ABAP字典的初始屏幕中選擇數(shù)據(jù)類型的單選按鈕,然后輸入數(shù)據(jù)元素的名稱,如下所示。
步驟3 - 點擊CREATE按鈕。 您可以在客戶名稱空間下創(chuàng)建數(shù)據(jù)元素,對象的名稱始終以“Z"或“Y"開頭。
步驟4 - 檢查顯示有三個單選按鈕的CREATE TYPE彈出窗口上的Data元素單選按鈕。
步驟5 - 點擊綠色復(fù)選標記圖標。 您將被導(dǎo)向到數(shù)據(jù)元素的維護屏幕。
步驟6 - 在數(shù)據(jù)元素維護屏幕的短文本字段中輸入說明。 在這種情況下,它是“客戶數(shù)據(jù)元素"。 注意 - 在輸入此屬性之前,不能輸入任何其他屬性。
步驟7 - 為數(shù)據(jù)元素分配類型。 您可以通過檢查引用類型來檢查基本類型或引用數(shù)據(jù)元素來創(chuàng)建基本數(shù)據(jù)元素。 您可以將數(shù)據(jù)元素分配給域或基本類型中的預(yù)定義類型,并使用引用類型的名稱或引用類型中的預(yù)定義類型的引用。
步驟8 - 在字段標簽選項卡中輸入短文本,中等文本,長文本和標題的字段。 您可以按Enter鍵,并為這些標簽自動生成長度。
步驟9 - 保存更改。 將顯示“創(chuàng)建對象目錄條目"彈出窗口,并要求提供包。 您可以輸入您在其中工作的包名稱。 如果您沒有任何包,那么您可以在對象導(dǎo)航器中創(chuàng)建它,或者您可以使用本地對象按鈕保存您的數(shù)據(jù)元素。
步驟10 - 激活您的數(shù)據(jù)元素。 單擊激活圖標(火柴圖標)或按CTRL + F3激活數(shù)據(jù)元素。 將出現(xiàn)一個彈出窗口,其中列出了2個當(dāng)前處于非活動狀態(tài)的對象,如以下屏幕截圖所示。
步驟11 - 此時,將激活名為Z_CUST的標記為“DTEL"的頂部條目。 由于突出顯示,單擊綠色勾號按鈕。 此窗口消失,狀態(tài)欄將顯示消息“對象已激活"。
如果在激活數(shù)據(jù)元素時發(fā)生錯誤消息或警告,則會自動顯示激活日志。 激活日志顯示有關(guān)激活流的信息。 您也可以使用實用程序(M)→激活日志調(diào)用激活日志。
可以獨立于ABAP字典中的數(shù)據(jù)庫來定義表。 當(dāng)在ABAP詞典中激活表時,也在數(shù)據(jù)庫中創(chuàng)建其字段的類似副本。 在ABAP字典中定義的表自動轉(zhuǎn)換為與數(shù)據(jù)庫兼容的格式,因為表的定義取決于SAP系統(tǒng)使用的數(shù)據(jù)庫。
表可以包含一個或多個字段,每個字段都使用其數(shù)據(jù)類型和長度進行定義。 存儲在表中的大量數(shù)據(jù)分布在表中定義的幾個字段中。
表由許多字段組成,每個字段包含許多元素。 下表列出了表字段的不同元素 -
S.No。 | 元素&amp; 描述 |
---|---|
1 |
字段名稱 這是給可以包含最多16個字符的字段賦予的名稱。 字段名稱可以由數(shù)字,字母和下劃線組成。 它必須以字母開頭。 |
2 |
鍵標記 確定字段是否屬于關(guān)鍵字字段。 |
3 |
字段類型 為字段分配數(shù)據(jù)類型。 |
4 |
字段長度 可在字段中輸入的字符數(shù)。 |
5 |
小數(shù)位數(shù) 定義小數(shù)點后允許的位數(shù)。 此元素僅用于數(shù)值數(shù)據(jù)類型。 |
6 |
短文本 描述相應(yīng)字段的含義。 |
步驟1 - 轉(zhuǎn)到事務(wù)SE11,選擇“數(shù)據(jù)庫表"單選按鈕,然后輸入要創(chuàng)建的表的名稱。 在我們的例子中,我們輸入了名稱ZCUSTOMERS1。 單擊創(chuàng)建按鈕。 將顯示字典:維護表屏幕。 此處默認選擇“交貨和維護"選項卡。
步驟2 - 在簡短說明字段中輸入說明性短文。
步驟3 - 點擊交貨類別字段旁邊的搜索幫助圖標。 選擇“A [應(yīng)用程序表(主數(shù)據(jù)和事務(wù)數(shù)據(jù))]"選項。
步驟4 - 從“數(shù)據(jù)瀏覽器/表視圖維護"下拉菜單中選擇“允許顯示/維護"選項。 將顯示字典:維護表屏幕。
步驟5 - 選擇字段選項卡。 將顯示包含與“字段"選項相關(guān)的選項的屏幕。
步驟6 - 在字段列中輸入表字段的名稱。 字段名稱可以包含字母,數(shù)字和下劃線,但它必須始終以字母開頭,且長度不能超過16個字符。
要創(chuàng)建的字段還必須具有數(shù)據(jù)元素,因為它們從定義的數(shù)據(jù)元素獲取屬性,如數(shù)據(jù)類型,長度,小數(shù)位數(shù)和短文本。
步驟7 - 如果您希望該字段是表鍵的一部分,請選擇鍵列。 讓我們創(chuàng)建諸如CLIENT,CUSTOMER,NAME,TITLE和DOB等字段。
步驟8 - 第一個字段是重要的字段,它標識與記錄相關(guān)聯(lián)的客戶端。 輸入\'Client\'作為字段,\'MANDT\'作為數(shù)據(jù)元素。 系統(tǒng)自動填寫數(shù)據(jù)類型,長度,小數(shù)和簡短描述。 通過選中“鍵"框,將“客戶端"字段設(shè)置為關(guān)鍵字段。
步驟9 - 下一個字段為“客戶"。 選中該復(fù)選框使其成為關(guān)鍵字段,并輸入新的數(shù)據(jù)元素\'ZCUSTNUM\'。 單擊保存按鈕。
步驟10 - 由于數(shù)據(jù)元素“ZCUSTNUM"尚不存在,因此必須創(chuàng)建。 雙擊新的數(shù)據(jù)元素,將出現(xiàn)“創(chuàng)建數(shù)據(jù)元素"窗口。 對此回答“是",并顯示“維護數(shù)據(jù)元素"窗口。
步驟11 - 在簡短說明區(qū)域中輸入“客戶編號"。 應(yīng)為新的Data元素定義名為“Domain"的基本數(shù)據(jù)類型。 所以輸入\'ZCUSTD1\',雙擊它并同意保存所做的更改。 選擇“是"創(chuàng)建域,并在“簡短描述"框中鍵入域的描述。
“定義"選項卡將自動打開。 第一個字段是“數(shù)據(jù)類型"。
步驟12 - 點擊框內(nèi),從下拉菜單中選擇“NUMC"類型。 在“編號"中輸入數(shù)字8。 字符(最多8個字符),并在“小數(shù)位數(shù)"區(qū)域中輸入0。 必須選擇輸出長度為8,然后按Enter鍵。 “NUMC"字段的描述必須重新出現(xiàn),確認這是一個有效的條目。
步驟13 - 點擊保存按鈕并激活對象。
步驟14 - 按F3返回“維護/更改數(shù)據(jù)元素"屏幕。 創(chuàng)建四個字段標簽,如下面的快照所示。 之后,保存并激活元素。
步驟15 - 按返回按鈕返回表維護屏幕。 客戶列具有正確的數(shù)據(jù)類型,長度,小數(shù)和簡短描述。 這表示成功創(chuàng)建了一個Data元素以及所使用的域。
同樣,我們需要創(chuàng)建三個附加字段,如NAME,TITLE和DOB。
步驟16 - 從工具欄中選擇“技術(shù)設(shè)置"。 為“數(shù)據(jù)類"選擇APPL0,為“大小"類別字段選擇第一個大小類別0。 在緩沖選項的情況下,必須選擇“不允許緩沖"。
步驟17 - 點擊保存。 回到表格并激活它。 出現(xiàn)以下屏幕。
表\'ZCUSTOMERS1\'被激活。
結(jié)構(gòu)是由存儲器中一個接一個存儲的任何數(shù)據(jù)類型的組件組成的數(shù)據(jù)對象。
結(jié)構(gòu)對于繪制屏幕字段以及操作具有由離散數(shù)量的字段定義的一致格式的數(shù)據(jù)是有用的。
結(jié)構(gòu)在運行時可能只有一個記錄,但是一個表可以有很多記錄。
步驟1 - 轉(zhuǎn)到事務(wù)SE11。
步驟2 - 點擊屏幕上的“數(shù)據(jù)類型"選項。 輸入名稱“ZSTR_CUSTOMER1",然后點擊創(chuàng)建按鈕。
步驟3 - 在下一個屏幕中選擇“結(jié)構(gòu)"選項,然后按Enter鍵。 您可以看到\'維護/更改結(jié)構(gòu)\'向?qū)А?/span>
步驟4 - 輸入簡短說明,如以下快照中所示。
步驟5 - 輸入組件(字段名稱)和組件類型(數(shù)據(jù)元素)。
注意:此處組件名稱以Z開頭,按照SAP建議。 讓我們使用我們已經(jīng)在數(shù)據(jù)庫表中創(chuàng)建的數(shù)據(jù)元素。
步驟6 - 提供所有組件和組件類型后,需要保存,檢查和激活。
將顯示以下屏幕 -
步驟7 - 由于此“ZSTR_CUSTOMER1"突出顯示,請點擊綠色勾號按鈕。 此窗口消失,狀態(tài)欄將顯示消息“活動"。
現(xiàn)在激活結(jié)構(gòu),如以下快照中所示 -
視圖的行為就像數(shù)據(jù)庫表。 但它不會占用存儲空間。 視圖的行為類似于虛擬表 - 一個沒有任何物理存在的表。 通過組合包含關(guān)于應(yīng)用對象的信息的一個或多個表的數(shù)據(jù)來創(chuàng)建視圖。 使用視圖,可以表示表中包含的數(shù)據(jù)的子集,也可以將多個表連接到單個虛擬表中。
與應(yīng)用程序?qū)ο笙嚓P(guān)的數(shù)據(jù)通過使用數(shù)據(jù)庫視圖分布在多個表中。 它們使用內(nèi)部連接條件來連接不同表的數(shù)據(jù)。 維護視圖用于顯示和修改存儲在應(yīng)用程序?qū)ο笾械臄?shù)據(jù)。 每個維護視圖都具有與其關(guān)聯(lián)的維護狀態(tài)。
我們使用投影視圖來屏蔽不需要的字段,并只顯示表中的相關(guān)字段。 必須在單個透明表上定義投影視圖。 投影視圖只包含一個表。 我們不能為投影視圖定義選擇條件。
步驟1 - 在ABAP字典的初始屏幕上選擇查看單選按鈕。 輸入要創(chuàng)建的視圖的名稱,然后單擊創(chuàng)建按鈕。 我們輸入了視圖的名稱為ZVIEW_TEST。
步驟2 - 選擇投影視圖單選按鈕,同時選擇視圖類型,然后點擊復(fù)制按鈕。 將顯示“字典:更改視圖"屏幕。
步驟3 - 在簡短描述字段中輸入簡短描述,并在基準表字段中使用的表名稱,如下面的快照所示。
步驟4 - 點擊“表格字段"按鈕,在投影視圖中包含CUSTOMERS表格的字段。
步驟5 - 顯示表ZCUSTOMERS1屏幕中的字段選擇。 選擇要包括在投影視圖中的字段,如以下快照中所示。
步驟6 - 點擊復(fù)制按鈕后,投影視圖的所有選定字段將顯示在“詞典:更改視圖"屏幕上。
步驟7 - 選擇維護狀態(tài)選項卡以定義訪問方法。 從“數(shù)據(jù)瀏覽器/表視圖維護"的下拉菜單中選擇只讀單選按鈕和“顯示/維護允許的限制"選項。
步驟8 - 保存并激活。 在“字典:更改視圖"屏幕中,選擇實用程序(M)> 顯示ZVIEW_TEST選擇屏幕的內(nèi)容。
步驟9 - 點擊執(zhí)行圖標。 投影視圖的輸出如下圖所示。
表CUSTOMERS 1由5個字段組成。 這里顯示的字段為3(客戶,客戶編號和名稱),有4個條目。 客戶編號從100001到100004,具有適當(dāng)?shù)拿Q。
搜索幫助,ABAP字典的另一個存儲庫對象,用于以列表的形式顯示字段的所有可能值。 此列表也稱為命中列表。 您可以選擇要從此命中列表的字段中輸入的值,而不是手動輸入值,這是冗長乏味和容易出錯的。
步驟1 - 轉(zhuǎn)到事務(wù)SE11。 選擇搜索幫助的單選按鈕。 輸入要創(chuàng)建的搜索幫助的名稱。 讓我們輸入名稱ZSRCH1。 單擊創(chuàng)建按鈕。
步驟2 - 系統(tǒng)將提示您創(chuàng)建搜索幫助類型。 選擇基本搜索幫助,它是默認值。 將顯示如下屏幕截圖所示的創(chuàng)建基本搜索幫助的屏幕。
第3步 - 在選擇方法中,我們需要指明我們的數(shù)據(jù)源是表還是視圖。 在我們的情況下,它恰好是一張表。 表是ZCUSTOMERS1。 它是從選擇列表中選擇的。
步驟4 - 輸入選擇方法后,下一個字段為對話框類型。 這將控制限制性對話框的外觀。 有一個包含三個選項的下拉列表。 讓我們選擇“立即顯示值"選項。
步驟5 - 下一步是參數(shù)區(qū)域。 對于每個搜索幫助參數(shù)或字段,必須根據(jù)要求輸入這些列字段。
搜索幫助參數(shù) - 這是來自數(shù)據(jù)源的字段。 表中的字段列在選擇列表中。 將輸入?yún)⑴c搜索幫助的字段,每行中有一個字段。 讓我們包括兩個字段CUSTOMER和NAME。 在其余列中指示這兩個字段如何參與。
導(dǎo)入 - 此字段是一個復(fù)選框,用于指示搜索幫助參數(shù)是否是導(dǎo)入?yún)?shù)。 導(dǎo)出或?qū)胧菂⒖妓阉鲙椭?/span>
導(dǎo)出 - 此字段是一個復(fù)選框,用于指示搜索幫助參數(shù)是否為導(dǎo)出參數(shù)。 導(dǎo)出將字段值從選擇列表傳輸?shù)狡聊蛔侄巍?/span>
LPos - 其值控制選擇列表中搜索幫助參數(shù)或字段的物理位置。 如果輸入值1,則字段將顯示在選擇列表中的第一個位置,以此類推。
SPos - 它控制限制性對話框中的搜索幫助參數(shù)或字段的物理位置。 如果輸入值1,該字段將顯示在限制對話框的第一個位置,依此類推。
數(shù)據(jù)元素 - 默認情況下,每個搜索幫助參數(shù)或字段都分配有在數(shù)據(jù)源(表或視圖)中分配給它的數(shù)據(jù)元素。 此數(shù)據(jù)元素名稱顯示在顯示模式中。
步驟6 - 執(zhí)行一致性檢查并激活搜索幫助。 按F8執(zhí)行。 將出現(xiàn)“測試搜索幫助ZSRCH1"屏幕,如以下屏幕截圖所示。
步驟7 - 讓我們在CUSTOMER的“Ready for inp"屏幕字段中輸入數(shù)字100004。 按Enter鍵。
將顯示客戶編號100004和名稱“STEPHEN"。
鎖定對象是由ABAP字典提供的功能,用于通過多個程序同步對相同數(shù)據(jù)的訪問。 在特定程序的幫助下訪問數(shù)據(jù)記錄。 鎖定對象在SAP中使用,以避免在數(shù)據(jù)庫中插入或更改數(shù)據(jù)時出現(xiàn)不一致。 要鎖定其數(shù)據(jù)記錄的表必須在鎖定對象中與其關(guān)鍵字段一起定義。
以下是使用鎖定機制完成的兩個主要功能 -
程序可以與其它程序關(guān)于它正在讀取或改變的數(shù)據(jù)記錄進行通信。
程序可以防止自己讀取剛剛被另一個程序改變的數(shù)據(jù)。
鎖定請求首先由程序生成。 然后,此請求轉(zhuǎn)到Enqueue服務(wù)器,并在鎖表中創(chuàng)建鎖。 Enqueue服務(wù)器設(shè)置鎖定,并且程序最終準備好訪問數(shù)據(jù)。
步驟1 - 轉(zhuǎn)到事務(wù)SE11。 將打開以下屏幕。
步驟2 - 點擊“鎖定對象"單選按鈕。 輸入以E開頭的鎖定對象的名稱,然后單擊創(chuàng)建按鈕。 這里我們使用EZLOCK12。
步驟3 - 輸入簡短說明字段,然后單擊表選項卡。
步驟4 - 在名稱字段中輸入表名稱,并選擇鎖定模式為寫鎖定。
步驟5 - 點擊鎖定參數(shù)選項卡,將出現(xiàn)以下屏幕。
步驟6 - 儲存并啟用。 自動生成2個功能模塊。 要檢查功能模塊,我們可以使用轉(zhuǎn)到→鎖定模塊。
步驟7 - 點擊鎖定模塊,將打開以下屏幕。
已成功創(chuàng)建鎖定對象。
鎖對象中包含的表的鍵字段稱為鎖參數(shù),它們用作函數(shù)模塊中的輸入?yún)?shù)。 這些參數(shù)用于設(shè)置和刪除由鎖定對象定義生成的鎖定。
這是一個良好的做法,保持您的程序是自包含和盡可能容易閱讀。 只需嘗試將大型和復(fù)雜的任務(wù)分成更小和更簡單的任務(wù),將每個任務(wù)放置在其單獨的模塊中,開發(fā)人員可以集中精力,而不會分心。
在SAP ABAP環(huán)境中,模塊化涉及將程序組織成模塊化單元,也稱為邏輯塊。 它減少了冗余并提高了程序可讀性,即使是在創(chuàng)建它以及隨后在維護周期中。 模塊化還使得相同代碼的可重用性。 ABAP已經(jīng)使得開發(fā)人員需要模塊化,即相對更多地組織程序,而不是具有相對更內(nèi)置的模塊化特征的基于OOPS的語言。 一旦小的,模塊化的代碼段完成,調(diào)試等等,它隨后不必被返回,并且開發(fā)人員可以繼續(xù)前進并專注于其他問題。
ABAP程序由稱為模塊化處理塊的處理塊組成。 他們是 -
從程序外部和從ABAP運行時環(huán)境(即,事件塊和對話模塊)調(diào)用的處理塊。
處理從ABAP程序調(diào)用的塊。
除了使用處理塊的模塊化之外,源代碼模塊用于通過宏和包括程序?qū)υ创a進行模塊化。
源代碼級別的模塊化 -
通過從ABAP程序調(diào)用的處理塊進行模塊化 -
模塊化源代碼意味著在模塊中放置一個ABAP語句序列。 模塊化源代碼可以根據(jù)用戶的需求在程序中調(diào)用。 源代碼模塊增強了ABAP程序的可讀性和可理解性。 創(chuàng)建單個源代碼模塊還防止了人們不斷重復(fù)寫入相同的語句,這反過來使得代碼對于第一次通過它的人來說更容易理解。
子程序是一個可重用的代碼段。 它是程序中的模塊化單元,其中函數(shù)以源代碼的形式封裝。 您將程序的一部分分頁到子程序,以更好地概述主程序,并使用相應(yīng)的語句序列多次,如下圖所示。
我們有具有3個不同源代碼塊的程序X。 每個塊具有相同的ABAP語句。 基本上,它們是相同的代碼塊。 為了使這個代碼更容易維護,我們可以將代碼封裝到一個子程序中。 我們可以在我們的程序中多次調(diào)用這個子程序。 可以使用Form和EndForm語句定義子例程。
以下是子程序定義的一般語法。
FORM <subroutine_name>. <statements> ENDFORM.
我們可以通過使用PERFORM語句調(diào)用子例程。 控制跳轉(zhuǎn)到子例程< subroutine_name>中的第一可執(zhí)行語句。 當(dāng)遇到ENDFORM時,控制跳回到PERFORM語句之后的語句。
步驟1 - 轉(zhuǎn)到事務(wù)SE80。 打開現(xiàn)有程序,然后右鍵單擊程序。 在這種情況下,它是\'ZSUBTEST\'。
步驟2 - 選擇創(chuàng)建,然后選擇子例程。 在字段中寫入子程序名稱,然后單擊繼續(xù)按鈕。 子例程名稱為“Sub_Display",如以下屏幕截圖所示。
步驟3 - 在FORM和ENDFORM語句塊中編寫代碼。 已成功創(chuàng)建子程序。
我們需要包括PERFORM語句來調(diào)用子程序。 讓我們來看看代碼 -
REPORT ZSUBTEST. PERFORM Sub_Display. * Form Sub_Display * --> p1 text * <-- p2 text FORM Sub_Display. Write: 'This is Subroutine'. Write: / 'Subroutine created successfully'. ENDFORM. " Sub_Display
步驟4 - 保存,激活并執(zhí)行程序。 上面的代碼產(chǎn)生以下輸出 -
Subroutine Test: This is Subroutine Subroutine created successfully
因此,使用子程序使您的程序更加面向功能。 它將程序的任務(wù)分成子功能,使每個子程序負責(zé)一個子功能。 您的程序變得更容易維護,因為對函數(shù)的更改通常只需在子例程中實現(xiàn)。
如果我們想在程序中多次重復(fù)使用同一組語句,我們需要將它們包含在宏中。 例如,宏可用于長計算或用于編寫復(fù)雜的WRITE語句。 我們只能在定義它的程序中使用宏。 宏定義應(yīng)在程序中使用宏之前發(fā)生。
宏是基于占位符設(shè)計的。 占位符的工作方式類似于C語言中的指針。 您可以在DEFINE ... END-OF-DEFINITION語句中定義一個宏。
以下是宏定義的基本語法:
DEFINE <macro_name>. <statements> END-OF-DEFINITION. ...... <macro_name> [<param1> <param2>....].
在調(diào)用它之前必須首先定義一個宏。 < param1> ...。 替換包含在宏定義中的ABAP語句中的占位符&amp; 1 ...。
宏定義中占位符的最大數(shù)量為9。 也就是說,當(dāng)執(zhí)行程序時,SAP系統(tǒng)通過適當(dāng)?shù)恼Z句替換宏,并且占位符&amp; 1,&amp; 2,...&amp; 9被參數(shù)param1,param2,... param9替換。 我們可以在另一個宏中調(diào)用宏,但不能調(diào)用同一個宏。
轉(zhuǎn)到事務(wù)SE38。 創(chuàng)建一個新程序ZMACRO_TEST以及短文本字段中的描述,以及類型和狀態(tài)等適當(dāng)屬性,如以下屏幕截圖所示 -
下面是代碼 -
REPORT ZMACRO_TEST. DEFINE mac_test. WRITE: 'This is Macro &1'. END-OF-DEFINITION. PARAMETERS: s1 type C as checkbox. PARAMETERS: s2 type C as checkbox. PARAMETERS: s3 type C as checkbox default 'X'. START-OF-SELECTION. IF s1 = 'X'. mac_test 1. ENDIF. IF s2 = 'X'. mac_test 2. ENDIF. IF s3 = 'X'. mac_test 3. ENDIF.
我們有3個復(fù)選框。 在執(zhí)行程序時,讓我們選擇S2復(fù)選框。
上面的代碼產(chǎn)生以下輸出 -
A Macro Program This is Macro 2
如果選中所有復(fù)選框,代碼將生成以下輸出 -
A Macro Program This is Macro 1 This is Macro 2 This is Macro 3
功能模塊構(gòu)成SAP系統(tǒng)的主要部分,因為多年來SAP使用功能模塊模塊化代碼,允許代碼自身,開發(fā)人員以及客戶的代碼重用。
功能模塊是包含一組具有導(dǎo)入和導(dǎo)出參數(shù)的可重用語句的子程序。 與包含程序不同,功能模塊可以獨立執(zhí)行。 SAP系統(tǒng)包含幾個可從任何ABAP程序調(diào)用的預(yù)定義功能模塊。 該功能組用作一種邏輯上屬于一起的多個功能模塊的容器。 例如,人力資源工資系統(tǒng)的功能模塊將被放在一起成為一個功能組。
要了解如何創(chuàng)建功能模塊,必須探索函數(shù)構(gòu)建器。 您可以找到事務(wù)代碼為SE37的函數(shù)構(gòu)建器。 只需用通配符鍵入功能模塊名稱的一部分,以演示可以搜索功能模塊的方式。 鍵入* amount *,然后按F4鍵。
搜索結(jié)果將顯示在新窗口中。 功能模塊顯示在具有藍色背景的行中,其功能組以粉紅色的行顯示。 您可以使用對象導(dǎo)航器屏幕(事務(wù)SE80)進一步查看功能組ISOC。 您可以看到功能模塊列表以及功能組中保存的其他對象。 讓我們考慮函數(shù)模塊SPELL_AMOUNT。 此功能模塊將數(shù)字轉(zhuǎn)換為字。
步驟1 - 轉(zhuǎn)到事務(wù)SE38并創(chuàng)建一個名為Z_SPELLAMOUNT的新程序。
步驟2 - 輸入一些代碼,以便可以設(shè)置一個參數(shù),其中可以輸入值并將其傳遞到功能模塊。 文本元素text-001在這里顯示為“輸入值"。
步驟3 - 要為此編寫代碼,請使用CTRL + F6。 之后,將出現(xiàn)一個窗口,其中“CALL FUNCTION"是列表中的第一個選項。 在文本框中輸入“spell_amount",然后點擊繼續(xù)按鈕。
步驟4 - 自動生成一些代碼。 但是我們需要增強IF語句以包含一個代碼,以向屏幕寫入一條消息,說“函數(shù)模塊返回一個值:sy-subrc",并添加ELSE語句,以便在函數(shù) 模塊成功,這里,必須設(shè)置一個新的變量來保存從函數(shù)模塊返回的值,讓我們稱之為\'result\'。
下面是代碼 -
REPORT Z_SPELLAMOUNT. data result like SPELL. selection-screen begin of line. selection-screen comment 1(15) text-001. parameter num_1 Type I. selection-screen end of line. CALL FUNCTION 'SPELL_AMOUNT' EXPORTING AMOUNT = num_1 IMPORTING IN_WORDS = result. IF SY-SUBRC <> 0. Write: 'Value returned is:', SY-SUBRC. else. Write: 'Amount in words is:', result-word. ENDIF.
步驟5 - 函數(shù)模塊返回的變量稱為IN_WORDS。 在程序中設(shè)置相應(yīng)的變量名為\'result\'。 通過使用LIKE語句來引用稱為SPELL的結(jié)構(gòu)來定義IN_WORDS。
步驟6 - 保存,激活并執(zhí)行程序。 輸入如以下屏幕截圖所示的值,然后按F8。
上面的代碼產(chǎn)生以下輸出 -
Spelling the Amount Amount in words is: FIVE THOUSAND SIX HUNDRED EIGHTY
包含程序是用于模塊化源代碼的全局存儲庫對象。 它們允許您在不同的程序中使用相同的源代碼。 包含程序還允許您以有序的方式管理復(fù)雜的程序。 為了在另一個程序中使用include程序,我們使用以下語法 -
INCLUDE <program_name>.
INCLUDE語句具有與復(fù)制包含程序< program_name>的源代碼相同的效果。 進入另一個程序。 由于包括程序不能獨立運行,它必須內(nèi)置到其他程序中。 您也可以嵌套包含程序。
下面是幾個限制,同時編寫包含程序的代碼 -
以下是創(chuàng)建和使用Include程序的步驟 -
步驟1 - 創(chuàng)建要包含在ABAP編輯器中的程序(Z_TOBEINCLUDED)。 要包括在ABAP編輯器中的代碼是 -
PROGRAM Z_TOBEINCLUDED. Write: / 'This program is started by:', SY-UNAME, / 'The Date is:', SY-DATUM, / 'Time is', SY-UZEIT.
步驟2 - 將程序的類型設(shè)置為INCLUDE程序,如以下屏幕截圖所示。
步驟3 - 點擊“保存"按鈕,將程序保存在名為ZINCL_PCKG的包中。
步驟4 - 創(chuàng)建另一個程序,其中必須使用程序Z_TOBEINCLUDED。 這里我們創(chuàng)建了另一個名為Z_INCLUDINGTEST的程序,并將該程序的類型指定為可執(zhí)行程序。
第5步 - Z_INCLUDINGTEST程序的編碼包括Z_TOBEINCLUDED程序,在INCLUDE語句的幫助下,如下面的代碼所示。
REPORT Z_INCLUDINGTEST. INCLUDE Z_TOBEINCLUDED.
步驟6 - 保存,激活并執(zhí)行程序。
上面的代碼產(chǎn)生以下輸出 -
This program is started by: SAPUSER The Date is: 06.10.2015 Time is 13:25:11
打開SQL指示允許直接訪問當(dāng)前AS ABAP的中央數(shù)據(jù)庫中的數(shù)據(jù)的ABAP語句的子集。 打開SQL語句映射所有數(shù)據(jù)庫系統(tǒng)支持的ABAP中的SQL的數(shù)據(jù)操作語言功能。
Open SQL的語句在數(shù)據(jù)庫接口的Open SQL接口中轉(zhuǎn)換為特定于數(shù)據(jù)庫的SQL。 然后將它們傳送到數(shù)據(jù)庫系統(tǒng)并執(zhí)行。 打開的SQL語句可用于訪問在ABAP字典中聲明的數(shù)據(jù)庫表。 缺省情況下訪問AS ABAP的中央數(shù)據(jù)庫,并且可以通過輔助數(shù)據(jù)庫連接訪問其他數(shù)據(jù)庫。
每當(dāng)在ABAP程序中使用這些語句中的任何一個時,重要的是檢查所執(zhí)行的動作是否已成功。 如果嘗試將記錄插入到數(shù)據(jù)庫表中,并且沒有正確插入,則知道這一點非常重要,以便可以在程序中采取適當(dāng)?shù)牟僮鳌?/span> 這可以使用已經(jīng)使用的系統(tǒng)字段來完成,即SY-SUBRC。 當(dāng)成功執(zhí)行語句時,SY-SUBRC字段將包含值0,因此可以檢查該值,如果出現(xiàn)該程序,可以繼續(xù)程序。
DATA語句用于聲明一個工作區(qū)。 讓我們給這個名字“wa_customers1"。 而不是為此聲明一個數(shù)據(jù)類型,可以聲明組成表的幾個字段。 最簡單的方法是使用LIKE語句。
wa_customers1工作區(qū)在這里被聲明為像ZCUSTOMERS1表,采取相同的結(jié)構(gòu)而不成為表本身。 此工作區(qū)只能存儲一條記錄。 一旦它被聲明,INSERT語句可以用于將工作區(qū)和它保存的記錄插入到表中。 這里的代碼將讀作\'INSERT ZCUSTOMERS1 FROM wa_customers1\'。
工作區(qū)域必須填充一些數(shù)據(jù)。 使用ZCUSTOMERS1表中的字段名稱。 這可以通過向前導(dǎo)航,雙擊代碼中的表名或通過打開新會話并使用事務(wù)SE11來完成。 然后可以將表的字段復(fù)制并粘貼到ABAP編輯器中。
以下是代碼段 -
DATA wa_customers1 LIKE ZCUSTOMERS1. wa_customers1-customer = '100006'. wa_customers1-name = 'DAVE'. wa_customers1-title = 'MR'. wa_customers1-dob = '19931017'. INSERT ZCUSTOMERS1 FROM wa_customers1.
然后可以使用CHECK語句如下。 這意味著如果記錄被正確插入,系統(tǒng)會說明這一點。 如果不是,則將顯示不等于零的SY-SUBRC代碼。 以下是代碼段 -
IF SY-SUBRC = 0. WRITE 'Record Inserted Successfully'. ELSE. WRITE: 'The return code is ', SY-SUBRC. ENDIF.
檢查程序,保存,激活代碼,然后測試它。 輸出窗口應(yīng)顯示為“已成功插入記錄"。
CLEAR語句允許清除字段或變量,以便在其位置插入新數(shù)據(jù),從而允許重新使用。 CLEAR語句通常用于程序中,它允許現(xiàn)有字段多次使用。
在前面的代碼片段中,工作區(qū)結(jié)構(gòu)已填充數(shù)據(jù)以創(chuàng)建要插入到ZCUSTOMERS1表中的新記錄,然后執(zhí)行驗證檢查。 如果我們要插入一個新記錄,必須使用CLEAR語句,以便它可以再次用新數(shù)據(jù)填充。
如果要同時更新表中的一個或多個現(xiàn)有記錄,請使用UPDATE語句。 與INSERT語句類似,聲明一個工作區(qū),用新數(shù)據(jù)填充,然后在執(zhí)行程序時將其放入記錄中。 以前使用INSERT語句創(chuàng)建的記錄將在此處更新。 只需編輯存儲在NAME和TITLE字段中的文本即可。 然后在一個新行上,使用與INSERT語句相同的結(jié)構(gòu),這次使用UPDATE語句如下面的代碼片段所示 -
DATA wa_customers1 LIKE ZCUSTOMERS1. wa_customers1-customer = '100006'. wa_customers1-name = 'RICHARD'. wa_customers1-title = 'MR'. wa_customers1-dob = '19931017'. UPDATE ZCUSTOMERS1 FROM wa_customers1.
隨著UPDATE語句被執(zhí)行,您可以在ABAP字典中查看數(shù)據(jù)瀏覽器,以查看該記錄已成功更新。
MODIFY語句可以被視為INSERT和UPDATE語句的組合。 它可用于插入新記錄或修改現(xiàn)有記錄。 在從輸入到工作區(qū)域的數(shù)據(jù)中修改記錄時,它遵循與前兩個語句相似的語法。
執(zhí)行此語句時,將對照表中的鍵字段進行檢查。 如果具有這些鍵字段值的記錄已存在,則將更新該記錄。 如果沒有,則將創(chuàng)建新記錄。
以下是用于創(chuàng)建新記錄的代碼段 -
CLEAR wa_customers1. DATA wa_customers1 LIKE ZCUSTOMERS1. wa_customers1-customer = '100007'. wa_customers1-name = 'RALPH'. wa_customers1-title = 'MR'. wa_customers1-dob = '19910921'. MODIFY ZCUSTOMERS1 FROM wa_customers1.
在本示例中,使用CLEAR語句,以便可以將新條目放入工作區(qū),然后添加客戶(編號)100007。 由于這是一個新的唯一鍵字段值,因此將插入一個新記錄,并執(zhí)行另一個驗證檢查。
執(zhí)行此操作并在數(shù)據(jù)瀏覽器中查看數(shù)據(jù)時,將為客戶編號100007(RALPH)創(chuàng)建一個新記錄。
上面的代碼產(chǎn)生以下輸出(表內(nèi)容) -
術(shù)語“本地SQL"是指可以靜態(tài)傳輸?shù)綌?shù)據(jù)庫接口的本機SQL接口的所有語句。 本地SQL語句不屬于ABAP的語言范圍,不遵循ABAP語法。 ABAP僅包含用于隔離其中可以列出Native SQL語句的程序段的語句。
在本機SQL中,主要可以使用特定于數(shù)據(jù)庫的SQL語句。 這些將從本地SQL接口不變地傳輸?shù)綌?shù)據(jù)庫系統(tǒng)并執(zhí)行。 可以使用相關(guān)數(shù)據(jù)庫的完整SQL語言范圍,并且所尋址的數(shù)據(jù)庫表不必在ABAP字典中聲明。 還有一小組SAP特定的本地SQL語句,由本地SQL接口以特定方式處理。
要使用本地SQL語句,必須在其前面加上EXEC SQL語句,并以ENDEXEC語句結(jié)束。
以下是語法 -
EXEC SQL PERFORMING <form>. <Native SQL statement> ENDEXEC.
這些語句定義ABAP程序中可以列出一個或多個Native SQL語句的區(qū)域。 輸入的語句將傳遞到Native SQL界面,然后按如下所示進行處理:
對于所尋址的數(shù)據(jù)庫系統(tǒng)的程序接口有效的所有SQL語句都可以在EXEC和ENDEXEC之間列出,特別是DDL(數(shù)據(jù)定義語言)語句。
這些SQL語句從Native SQL接口傳遞到數(shù)據(jù)庫系統(tǒng)基本不變。 語法規(guī)則由數(shù)據(jù)庫系統(tǒng)指定,特別是數(shù)據(jù)庫對象的區(qū)分大小寫規(guī)則。
如果語法允許單個語句之間的分隔符,則可以在EXEC和ENDEXEC之間包括許多本地SQL語句。
可以在EXEC和ENDEXEC之間指定SAP特定的本地SQL語言元素。 這些語句不會直接從Native SQL接口傳遞到數(shù)據(jù)庫,但會適當(dāng)?shù)剡M行轉(zhuǎn)換。
SPFLI是用于存儲航班時刻表信息的標準SAP表。 這在R / 3 SAP系統(tǒng)中可用,具體取決于版本和發(fā)布級別。 在將表名稱SPFLI輸入到相關(guān)SAP事務(wù)(如SE11或SE80)中時,可以查看此信息。 您還可以使用這兩個事務(wù)查看此數(shù)據(jù)庫表中包含的數(shù)據(jù)。
REPORT ZDEMONATIVE_SQL. DATA: BEGIN OF wa, connid TYPE SPFLI-connid, cityfrom TYPE SPFLI-cityfrom, cityto TYPE SPFLI-cityto, END OF wa. DATA c1 TYPE SPFLI-carrid VALUE 'LH'. EXEC SQL PERFORMING loop_output. SELECT connid, cityfrom, cityto INTO :wa FROM SPFLI WHERE carrid = :c1 ENDEXEC. FORM loop_output. WRITE: / wa-connid, wa-cityfrom, wa-cityto. ENDFORM.
上面的代碼產(chǎn)生以下輸出 -
0400 FRANKFURT NEW YORK 2402 FRANKFURT BERLIN 0402 FRANKFURT NEW YORK
內(nèi)部表實際上是一個臨時表,它包含正在執(zhí)行的ABAP程序的記錄。 內(nèi)部表僅在SAP程序的運行時期間存在。 它們用于通過使用ABAP語言處理大量數(shù)據(jù)。 當(dāng)您需要從數(shù)據(jù)庫表中檢索數(shù)據(jù)時,我們需要在ABAP程序中聲明一個內(nèi)部表。
內(nèi)部表中的數(shù)據(jù)存儲在行和列中。 每一行稱為行,每一列稱為字段。 在內(nèi)部表中,所有記錄具有相同的結(jié)構(gòu)和鍵。 使用索引或鍵訪問內(nèi)部表的各個記錄。 由于內(nèi)部表存在直到正在執(zhí)行相關(guān)聯(lián)的程序,因此當(dāng)程序的執(zhí)行終止時,內(nèi)部表的記錄被丟棄。 因此,內(nèi)部表可以用作臨時存儲區(qū)或臨時緩沖區(qū),其中可以根據(jù)需要修改數(shù)據(jù)。 這些表只在運行時而不是在聲明時占用內(nèi)存。
內(nèi)部表僅在程序運行時存在,因此在編寫代碼時,內(nèi)部表必須以程序可以使用的方式進行結(jié)構(gòu)化。 你會發(fā)現(xiàn)內(nèi)部表的操作方式與結(jié)構(gòu)相同。 主要區(qū)別是結(jié)構(gòu)只有一行,而內(nèi)部表可以有所需的行。
內(nèi)部表可以由多個字段組成,對應(yīng)于表的列,正如在ABAP字典中一樣,使用多個字段創(chuàng)建表。 關(guān)鍵字段也可以與內(nèi)部表一起使用,在創(chuàng)建這些內(nèi)部表時,它們提供稍微更大的靈活性。 使用內(nèi)部表,可以指定非唯一鍵,允許存儲任意數(shù)量的非唯一記錄,如果需要,可以存儲重復(fù)記錄。
內(nèi)部表的大小或其包含的行數(shù)不是固定的。 內(nèi)部表的大小根據(jù)與內(nèi)部表相關(guān)聯(lián)的程序的要求而改變。 但是建議保持內(nèi)部表盡可能小。 這是為了避免系統(tǒng)運行緩慢,因為它努力處理大量的數(shù)據(jù)。
內(nèi)部表用于許多目的 -
它們可用于保存以后可在程序中使用的計算結(jié)果。
內(nèi)部表還可以保存記錄和數(shù)據(jù),以便可以快速訪問,而不必從數(shù)據(jù)庫表訪問此數(shù)據(jù)。
他們是非常多才多藝。 它們可以使用任何數(shù)量的其他定義的結(jié)構(gòu)來定義。
假設(shè)用戶想要從一個或多個大表中創(chuàng)建各種客戶的聯(lián)系號碼的列表。 用戶首先創(chuàng)建一個內(nèi)部表,從客戶表中選擇相關(guān)數(shù)據(jù),然后將數(shù)據(jù)放在內(nèi)部表中。 其他用戶可以直接訪問和使用此內(nèi)部表來檢索所需的信息,而不是編寫數(shù)據(jù)庫查詢以在程序的運行時執(zhí)行每個操作。
DATA語句用于聲明一個內(nèi)部表。 程序必須告知表的開始和結(jié)束位置。 所以使用BEGIN OF語句,然后聲明表名。 之后,使用OCCURS添加,后跟一個數(shù)字,這里為0. OCCURS告訴SAP正在創(chuàng)建一個內(nèi)部表,0表示它最初不包含任何記錄。 它將隨著它填充數(shù)據(jù)而擴展。
以下是語法 -
DATA: BEGIN OF <internal_tab> Occurs 0,
讓我們在一個新行上創(chuàng)建字段。 例如,創(chuàng)建聲明為LIKE ZCUSTOMERS1-name的\'name\'。 創(chuàng)建另一個名為“dob"的字段,LIKE ZCUSTOMERS1-dob。 最初給內(nèi)部表中的字段名稱與其他地方創(chuàng)建的其他字段相同的名稱很有用。 最后,使用“END OF< internal_tab&gt ;."聲明內(nèi)部表的結(jié)尾,如下面的代碼所示 -
DATA: BEGIN OF itab01 Occurs 0, name LIKE ZCUSTOMERS1-name, dob LIKE ZCUSTOMERS1-dob, END OF itab01.
這里\'itab01\'是在SAP中創(chuàng)建臨時表時常用的縮寫。 OCCURS子句用于通過聲明表的字段來定義內(nèi)部表的主體。 當(dāng)使用OCCURS子句時,如果需要,您可以指定數(shù)字常量\'n\'以確定其他默認內(nèi)存。 OCCUR 0子句使用的內(nèi)存的默認大小為8 KB。 現(xiàn)在創(chuàng)建內(nèi)部表的結(jié)構(gòu),并且可以寫入代碼以用記錄填充它。
可以使用或不使用標題行創(chuàng)建內(nèi)部表。 要創(chuàng)建帶有標題行的內(nèi)部表,請在內(nèi)部表定義中的OCCURS子句之前使用OCCURS子句之前的BEGIN OF子句或WITH HEADER LINE子句。 要創(chuàng)建沒有標題行的內(nèi)部表,請使用不帶BEGIN OF子句的OCCURS子句。
您還可以使用TYPES語句創(chuàng)建內(nèi)部表作為本地數(shù)據(jù)類型(僅在當(dāng)前程序的上下文中使用的數(shù)據(jù)類型)。 此語句使用TYPE或LIKE子句來引用現(xiàn)有表。
創(chuàng)建內(nèi)部表作為本地數(shù)據(jù)類型的語法是 -
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF <line_type_itab> WITH <key> INITIAL SIZE <size_number>.
這里,< internal_tab_type> 指定內(nèi)部表的表類型< internal_tab> 和< line_type_itab> 指定內(nèi)部表的行的類型。 在TYPES語句中,可以使用TYPE子句將內(nèi)部表的行類型指定為數(shù)據(jù)類型,并使用LIKE子句將行類型指定為數(shù)據(jù)對象。 為內(nèi)部表指定鍵是可選的,如果用戶未指定鍵,SAP系統(tǒng)將使用任意鍵定義表類型。
INITIAL SIZE< size_number> 通過向其分配初始量的內(nèi)存來創(chuàng)建內(nèi)部表對象。 在上述語法中,INITIAL SIZE子句為size_number表行保留一個內(nèi)存空間。 每當(dāng)聲明內(nèi)部表對象時,表的大小不屬于表的數(shù)據(jù)類型。
注意 - 首次填充內(nèi)部表時消耗的內(nèi)存大大減少。
步驟1 - 執(zhí)行SE38交易代碼,開啟ABAP編輯器。 顯示ABAP編輯器的初始屏幕。
步驟2 - 在初始屏幕中,輸入程序的名稱,選擇源代碼單選按鈕,然后單擊創(chuàng)建按鈕以創(chuàng)建新程序。
步驟3 - 在“ABAP:程序?qū)傩?對話框中,在標題字段中輸入程序的簡短描述,從屬性中的類型下拉菜單中選擇\'可執(zhí)行程序\'選項 組框。 單擊保存按鈕。
步驟4 - 在ABAP編輯器中編寫以下代碼。
REPORT ZINTERNAL_DEMO. TYPES: BEGIN OF CustomerLine, Cust_ID TYPE C, Cust_Name(20) TYPE C, END OF CustomerLine. TYPES mytable TYPE SORTED TABLE OF CustomerLine WITH UNIQUE KEY Cust_ID. WRITE:/'The mytable is an Internal Table'.
步驟5 - 保存,激活并照常執(zhí)行程序。
在本示例中,mytable是一個內(nèi)部表,并且在Cust_ID字段上定義了唯一鍵。
上面的代碼產(chǎn)生以下輸出 -
The mytable is an Internal Table.
在內(nèi)部表中,填充包括選擇,插入和追加等功能。 本章重點介紹INSERT和APPEND語句。
INSERT語句用于將單個行或一組行插入內(nèi)部表。
以下是將一行添加到內(nèi)部表的語法:
INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.
在此語法中,INSERT語句在internal_tab內(nèi)部表中插入一行。 可以通過在internal_tab參數(shù)之前使用work_area_itab INTO表達式插入新行。 當(dāng)使用work_area_itab INTO表達式時,新行從work_area_itab工作區(qū)獲取,并插入到internal_tab表中。 但是,當(dāng)不使用work_area_itab INTO表達式插入行時,該行從internal_tab表的標題行中獲取。
當(dāng)通過使用INDEX子句將新行插入內(nèi)部表中時,插入行之后的行的索引號增加1.如果內(nèi)部表包含< index_num> - 1行,新行添加在表的末尾。 當(dāng)SAP系統(tǒng)成功地將行添加到內(nèi)部表時,SY-SUBRC變量設(shè)置為0。
以下是使用insert語句的示例程序。
REPORT ZCUSLIST1. DATA: BEGIN OF itable1 OCCURS 4, F1 LIKE SY-INDEX, END OF itable1. DO 4 TIMES. itable1-F1 = sy-index. APPEND itable1. ENDDO. itable1-F1 = -96. INSERT itable1 INDEX 2. LOOP AT itable1. Write / itable1-F1. ENDLOOP. LOOP AT itable1 Where F1 ≥ 3. itable1-F1 = -78. INSERT itable1. ENDLOOP. Skip. LOOP AT itable1. Write / itable1-F1. ENDLOOP.
上面的代碼產(chǎn)生以下輸出 -
1 96- 2 3 4 1 96- 2 78- 3 78- 4
在上面的例子中,DO循環(huán)將包含數(shù)字1到4的4行附加到它。 標題行組件itable1-F1已分配值-96。 Insert語句將標題行作為新行插入到第3行之前的主體中。現(xiàn)有行3在插入后變?yōu)榈?行。 LOOP AT語句從內(nèi)部表中檢索F1值大于或等于3的那些行。在每一行之前,Insert語句從它的標題行插入一個新行。 在插入之前,F(xiàn)1組件已經(jīng)改變?yōu)榘?78。
執(zhí)行每個insert語句后,系統(tǒng)將重新編制所插入的行下面的所有行。 當(dāng)在大型內(nèi)部表的頂部附近插入行時,會引入開銷。 如果需要將一個行插入到一個大型內(nèi)部表中,請準備另一個包含要插入的行的表,并改為使用插入行。
當(dāng)在itable1的循環(huán)內(nèi)部在itable1中插入一個新行時,它不會立即影響內(nèi)部表。 它實際上在下一個循環(huán)傳遞中生效。 當(dāng)在當(dāng)前行之后插入一行時,該表在ENDLOOP處重新索引。 系統(tǒng)遞增,下一個循環(huán)處理syxix指向的行。 例如,如果您在第二個循環(huán)遍歷中,并且在第3行之前插入記錄。當(dāng)執(zhí)行endloop時,新行將變?yōu)榈?行,舊行3將成為第4行,依此類推。 Sy-tabix增加1,下一個循環(huán)遍歷處理新插入的記錄。
APPEND語句用于向現(xiàn)有內(nèi)部表添加單個行或行。 此語句從工作區(qū)復(fù)制單個行,并將其插入內(nèi)部表中的最后一個現(xiàn)有行之后。 工作區(qū)可以是標題行或與內(nèi)部表的行具有相同結(jié)構(gòu)的任何其他字段字符串。 以下是APPEND語句的語法,用于在內(nèi)部表中附加單個行 -
APPEND <record_for_itab> TO <internal_tab>.
在此語法中,< record_for_itab> 表達式可以由< work_area_itab> 工作區(qū),可以轉(zhuǎn)換為行類型或INITIAL LINE子句。 如果用戶使用< work_area_itab> 工作區(qū)域時,SAP系統(tǒng)向< internal_tab> 內(nèi)部表,并用工作區(qū)的內(nèi)容填充它。 INITIAL LINE子句附加一個空行,其中包含表結(jié)構(gòu)的每個字段的初始值。 在每個APPEND語句之后,SY-TABIX變量包含附加行的索引號。
使用非唯一鍵將行附加到標準和排序表中,無論表中是否存在具有相同鍵的行。 換句話說,可能發(fā)生重復(fù)條目。 但是,如果用戶嘗試使用唯一鍵向排序表中添加重復(fù)條目,或者用戶通過向其添加行來違反排序表的排序順序,則會發(fā)生運行時錯誤。
REPORT ZCUSLIST1. DATA: BEGIN OF linv Occurs 0, Name(20) TYPE C, ID_Number TYPE I, END OF linv. DATA table1 LIKE TABLE OF linv. linv-Name = 'Melissa'. linv-ID_Number = 105467. APPEND linv TO table1. LOOP AT table1 INTO linv. Write: / linv-name, linv-ID_Number. ENDLOOP.
上面的代碼產(chǎn)生以下輸出 -
Melissa 105467
當(dāng)我們從帶有標題行的內(nèi)部表中讀取記錄時,該記錄將從表本身移動到標題行。 這是我們的程序工作的標題行。 這同樣適用于創(chuàng)建新記錄。 它是您使用的標題行,從中將新記錄發(fā)送到表體本身。
要復(fù)制記錄,我們可以使用SELECT語句從表中選擇所有記錄,然后使用MOVE語句將記錄從原始表移動到新的內(nèi)部表中到名稱對應(yīng)的字段。
以下是MOVE語句的語法:
MOVE <table_field> TO <internal_tab_field>.
REPORT ZCUSLIST1. TABLES: ZCUSTOMERS1. DATA: BEGIN OF itab01 Occurs 0, name LIKE ZCUSTOMERS1-name, dob LIKE ZCUSTOMERS1-dob, END OF itab01. Select * FROM ZCUSTOMERS1. MOVE ZCUSTOMERS1-name TO itab01-name. MOVE ZCUSTOMERS1-dob TO itab01-dob. ENDSELECT. Write: / itab01-name, itab01-dob.
上面的代碼產(chǎn)生以下輸出 -
MARGARET 02.11.1994
選擇循環(huán)每次填充一個字段,使用MOVE語句將數(shù)據(jù)從一個表的字段移動到另一個表的字段。 在上面的示例中,使用MOVE語句將ZCUSTOMERS1表的內(nèi)容移動到內(nèi)部表中的相應(yīng)字段。 你可以只用一行代碼來完成這個動作。 您可以使用MOVECORRESPONDING語句。
以下是MOVE-CORRESPONDING語句的語法 -
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
它告訴系統(tǒng)將數(shù)據(jù)從CUSTOMERS的字段移動到itab01中的相應(yīng)字段。
REPORT ZCUSTOMERLIST. TABLES: ZCUSTOMERS1. DATA: Begin of itab01 occurs 0, customer LIKE ZCUSTOMERS1-customer, name LIKE ZCUSTOMERS1-name, title LIKE ZCUSTOMERS1-title, dob LIKE ZCUSTOMERS1-dob, END OF itab01. SELECT * from ZCUSTOMERS1. MOVE-Corresponding ZCUSTOMERS1 TO itab01. APPEND itab01. ENDSELECT. LOOP AT itab01. Write: / itab01-name, itab01-dob. ENDLOOP.
上面的代碼產(chǎn)生以下輸出 -
MARK 21.05.1981 JAMES 14.08.1977 AURIELE 19.06.1990 STEPHEN 22.07.1985 MARGARET 02.11.1994
這是由于兩者都具有匹配的字段名稱的事實。 使用此語句時,需要確保兩個字段都具有匹配的數(shù)據(jù)類型和長度。 它已經(jīng)在這里用LIKE語句以前完成。
我們可以使用READ TABLE語句的以下語法讀取表的行:
READ TABLE <internal_table> FROM <work_area_itab>.
在此語法中,< work_area_itab> 表達式表示與< internal_table>的線類型兼容的工作區(qū)域。 表。 我們可以通過使用WITH KEY子句在READ語句中指定搜索鍵,而不是表鍵,如下面的語法所示 -
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
這里,內(nèi)部表的整行用作搜索鍵。 將表的整行的內(nèi)容與< internal_tab_field>的內(nèi)容進行比較。 領(lǐng)域。 如果< internal_tab_field> 字段與表的行類型不兼容,則這些值將根據(jù)表的行類型進行轉(zhuǎn)換。 搜索鍵允許在內(nèi)部表中查找沒有結(jié)構(gòu)化行類型的條目,即行是單個字段還是內(nèi)部表類型。
READ語句的以下語法用于通過使用COMPARING子句指定工作區(qū)或字段符號 -
READ TABLE <internal_table> <key> INTO <work_area_itab> [COMPARING <F1> <F2>...<Fn>].
當(dāng)使用COMPARING子句時,指定的表字段< F1>,< F2> ...< Fn& 在運輸之前與工作區(qū)域的相應(yīng)區(qū)域進行比較。 如果指定了ALL FIELDS子句,SAP系統(tǒng)將比較所有組件。 當(dāng)SAP系統(tǒng)根據(jù)密鑰找到條目時,SY-SUBRC變量的值設(shè)置為0.此外,如果比較的內(nèi)容為SY-SUBRC變量的值,則將SY-SUBRC變量的值設(shè)置為2或4 字段不同或SAP系統(tǒng)找不到條目。 但是,無論查找結(jié)果如何,SAP系統(tǒng)都會將條目復(fù)制到目標工作區(qū)中。
REPORT ZREAD_DEMO. */Creating an internal table DATA: BEGIN OF Record1, ColP TYPE I, ColQ TYPE I, END OF Record1. DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. DO 6 Times. Record1-ColP = SY-INDEX. Record1-ColQ = SY-INDEX + 5. INSERT Record1 INTO TABLE mytable. ENDDO. Record1-ColP = 4. Record1-ColQ = 12. READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. WRITE: 'SY-SUBRC =', SY-SUBRC. SKIP. WRITE: / Record1-ColP, Record1-ColQ.
上面的代碼產(chǎn)生以下輸出 -
SY-SUBRC = 2 4 9
在上面的示例中,mytable是散列表類型的內(nèi)部表,其中Record1作為工作區(qū),ColP作為唯一鍵。 最初,mytable填充了六行,其中ColP字段包含SY-INDEX變量的值,ColQ字段包含(SY-INDEX + 5)值。
Record1工作區(qū)分別填充4和12作為ColP和ColQ字段的值。 在使用COMPARING子句將ColP鍵字段的值與Record1工作區(qū)中的值進行比較之后,READ語句讀取表的行,然后復(fù)制工作區(qū)中讀取行的內(nèi)容。 SY-SUBRC變量的值顯示為2,因為當(dāng)ColP字段中的值為4時,ColQ中的值不是12,而是9。
DELETE語句用于從內(nèi)部表中刪除一個或多個記錄。 通過指定表鍵或條件或通過查找重復(fù)條目來刪除內(nèi)部表的記錄。 如果內(nèi)部表具有非唯一鍵并且包含重復(fù)條目,則將刪除表中的第一個條目。
以下是使用DELETE語句從內(nèi)部表中刪除記錄或行的語法 -
DELETE TABLE <internal_table> FROM <work_area_itab>.
在上述語法中,< work_area_itab> 表達式是一個工作區(qū),它應(yīng)該與< internal_table>的類型兼容。 內(nèi)部表。 基于可以從工作區(qū)組件獲取的默認密鑰來執(zhí)行刪除操作。
您還可以通過使用以下語法在DELETE TABLE語句中顯式指定表鍵:
DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.
在該語法中,< F1>,< F2> ...< Fn> 是內(nèi)部表格的字段,并且< K1>,< K2> ...< Kn> 是表的關(guān)鍵字段。 DELETE語句用于刪除< internal_table>的記錄或行。 基于表達式< K1> =< F1>,< K2> =< F2> ...< Kn> =< Fn&gt ;.
注意 - 如果< F1>,< F2> ...< Fn& 字段與< K1>,< K2> ...& 鍵字段,則SAP系統(tǒng)自動將它們轉(zhuǎn)換為兼容格式。
REPORT ZDELETE_DEMO. DATA: BEGIN OF Line1, ColP TYPE I, ColQ TYPE I, END OF Line1. DATA mytable LIKE HASHED TABLE OF Line1 WITH UNIQUE KEY ColP. DO 8 TIMES. Line1-ColP = SY-INDEX. Line1-ColQ = SY-INDEX + 4. INSERT Line1 INTO TABLE mytable. ENDDO. Line1-ColP = 1. DELETE TABLE mytable: FROM Line1, WITH TABLE KEY ColP = 3. LOOP AT mytable INTO Line1. WRITE: / Line1-ColP, Line1-ColQ. ENDLOOP.
上面的代碼產(chǎn)生以下輸出 -
2 6 4 8 5 9 6 10 7 11 8 12
在這個例子中,mytable有兩個字段,ColP和ColQ。 最初,mytable填充有八行,其中ColP包含值1,2,3,4,5,6,7和8.ColQ包含值5,6,7,8,9,10,11和12。 12,因為ColP值每次都增加4。
DELETE語句用于從mytable中刪除colP鍵字段的值為1或3的行。刪除后,mytable的ColP字段包含值2,4,5,6,7和8,如圖所示 在輸出。 ColQ字段包含值6,8,9,10,11和12。
對象定向簡化了軟件設(shè)計,使其更易于理解,維護和重用。 面向?qū)ο缶幊?/b>(OOP)表示在編寫軟件時的不同思維方式。 OOP的美麗在于它的簡單性。 OOP的表達能力使得更容易按時交付高質(zhì)量的軟件組件。
由于解決方案是根據(jù)現(xiàn)實世界的對象設(shè)計的,因此程序員和業(yè)務(wù)分析師就使用通用域語言的設(shè)計交換想法和信息變得更加容易。 這些溝通的改進有助于揭示隱藏的要求,識別風(fēng)險,提高正在開發(fā)的軟件的質(zhì)量。 面向?qū)ο蟮姆椒杏诒硎粳F(xiàn)實世界的抽象或具體事物的對象。 這些對象由它們的內(nèi)部結(jié)構(gòu)和它們的屬性(數(shù)據(jù))表示的字符和屬性來定義。 這些對象的行為由方法(即功能)描述。
讓我們比較過程和面向?qū)ο蟮木幊?-
特征 | 程序?qū)蚍?/span> | 面向?qū)ο蠓椒?/span> |
---|---|---|
Emphasis | 重點是任務(wù)。 | 重點是做那些任務(wù)的事情。 |
Modularization | 程序可以分為稱為函數(shù)的更小的程序。 | 程序被組織成類和對象,并且功能被嵌入到類的方法中。 |
數(shù)據(jù)安全 | 大多數(shù)函數(shù)共享全局數(shù)據(jù)。 | 數(shù)據(jù)可以被隱藏,并且不能被外部源訪問。 |
Extensibility | 修改和擴展現(xiàn)有功能更加耗時。 | 新的數(shù)據(jù)和功能可以根據(jù)需要輕松添加。 |
ABAP最初被開發(fā)為一種過程語言(類似于早期的過程式編程語言,如COBOL)。 但是ABAP現(xiàn)在已經(jīng)適應(yīng)了面向?qū)ο蠓独脑砼c引入ABAP對象。 ABAP中面向?qū)ο蟮母拍?如類,對象,繼承和多態(tài))與其他現(xiàn)代面向?qū)ο笳Z言(如Java或C ++)基本相同。
隨著對象定向開始形成,每個類都承擔(dān)特定的角色分配。 這種分工有助于簡化整體編程模型,允許每個類專門解決特定的問題。 這樣的類具有高的內(nèi)聚性,并且每個類的操作以一些直觀的方式密切相關(guān)。
面向?qū)ο蟮闹饕攸c是 -
對象是一種特殊類型的變量,具有不同的特征和行為。 對象的特性或?qū)傩杂糜诿枋鰧ο蟮臓顟B(tài),并且行為或方法表示對象執(zhí)行的動作。
對象是類的模式或?qū)嵗?/span> 它表示真實世界的實體,例如人或編程實體,如變量和常量。 例如,帳戶和學(xué)生是真實世界實體的例子。 但是計算機的硬件和軟件組件是編程實體的示例。
一個對象有以下三個主要特點 -
對象的狀態(tài)可以被描述為一組屬性及其值。 例如,銀行帳戶具有一組屬性,例如帳號,名稱,帳戶類型,余額和所有這些屬性的值。 對象的行為是指在一段時間內(nèi)在其屬性中發(fā)生的更改。
每個對象具有唯一的標識,可以用于將其與其他對象區(qū)分開。 兩個對象可以表現(xiàn)出相同的行為,并且它們可以具有或不具有相同的狀態(tài),但是它們從不具有相同的身份。 兩個人可能具有相同的姓名,年齡和性別,但他們不相同。 類似地,對象的身份在其整個生命周期中永遠不會改變。
對象可以通過發(fā)送消息來相互交互。 對象包含用于操作數(shù)據(jù)的數(shù)據(jù)和代碼。 對象也可以在類的幫助下用作用戶定義的數(shù)據(jù)類型。 對象也稱為類型類的變量。 定義類后,可以創(chuàng)建屬于該類的任意數(shù)量的對象。 每個對象都與創(chuàng)建它的類型類的數(shù)據(jù)相關(guān)聯(lián)。
對象創(chuàng)建通常包括以下步驟 -
引用類創(chuàng)建引用變量。 其語法是 -
DATA: <object_name> TYPE REF TO <class_name>.
從引用變量創(chuàng)建對象。 其語法是 -
CREATE Object: <object_name>.
REPORT ZDEMO_OBJECT. CLASS Class1 Definition. Public Section. DATA: text1(45) VALUE 'ABAP Objects.'. METHODS: Display1. ENDCLASS. CLASS Class1 Implementation. METHOD Display1. Write:/ 'This is the Display method.'. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: Class1 TYPE REF TO Class1. CREATE Object: Class1. Write:/ Class1->text1. CALL METHOD: Class1->Display1.
上面的代碼產(chǎn)生以下輸出 -
ABAP Objects. This is the Display method.
類用于指定對象的形式,它將數(shù)據(jù)表示和將該數(shù)據(jù)操作為一個整齊包的方法組合。 類中的數(shù)據(jù)和函數(shù)稱為類的成員。
定義類時,可以為數(shù)據(jù)類型定義藍圖。 這實際上不定義任何數(shù)據(jù),但它定義了類名稱的意義,類的對象將包括什么,以及可以對這樣的對象執(zhí)行什么操作。 也就是說,它定義對象的抽象特性,例如屬性,字段和屬性。
以下語法顯示如何定義類 -
CLASS <class_name> DEFINITION. .......... .......... ENDCLASS.
類定義從關(guān)鍵字CLASS開始,后面跟著類名DEFINITION和類主體。 類的定義可以包含類的各種組件,如屬性,方法和事件。 當(dāng)我們在類聲明中聲明一個方法時,方法實現(xiàn)必須包含在類實現(xiàn)中。 以下語法顯示如何實現(xiàn)類 -
CLASS <class_name> IMPLEMENTATION. ........... .......... ENDCLASS.
注意 - 類的實現(xiàn)包含其所有方法的實現(xiàn)。 在ABAP對象中,類的結(jié)構(gòu)包含諸如屬性,方法,事件,類型和常量等組件。
屬性是可以具有任何數(shù)據(jù)類型(如C,I,F(xiàn)和N)的類的數(shù)據(jù)字段。它們在類聲明中聲明。 這些屬性可以分為兩類:實例和靜態(tài)屬性。 實例屬性定義對象的實例特定狀態(tài)。 不同對象的狀態(tài)不同。 使用DATA語句聲明實例屬性。
靜態(tài)屬性定義由類的所有實例共享的類的公共狀態(tài)。 也就是說,如果您更改類的一個對象中的靜態(tài)屬性,該更改對該類的所有其他對象也是可見的。 使用CLASS-DATA語句聲明靜態(tài)屬性。
方法是表示類中的對象的行為的函數(shù)或過程。 類的方法可以訪問類的任何屬性。 方法的定義也可以包含參數(shù),以便在調(diào)用方法時可以向這些參數(shù)提供值。 方法的定義在類聲明中聲明,并在類的實現(xiàn)部分實現(xiàn)。 METHOD和ENDMETHOD語句用于定義方法的實現(xiàn)部分。 以下語法顯示如何實現(xiàn)一種方法 -
METHOD <m_name>. .......... .......... ENDMETHOD.
在該語法中,< m_name> 表示方法的名稱。 注意 - 您可以使用CALL METHOD語句調(diào)用方法。
類組件可以在控制如何訪問這些組件的公共,私有或受保護的可見性部分中定義。 私有可見性部分用于拒絕從類外部訪問組件。 這樣的組件只能從類內(nèi)部訪問,例如方法。
在公共可見性部分中定義的組件可以從任何上下文訪問。 默認情況下,類的所有成員都是私有的。 實際上,我們在私有節(jié)中定義數(shù)據(jù),在公共節(jié)中定義相關(guān)方法,以便可以從類外面調(diào)用它們,如下面的程序所示。
在類中的Public部分中聲明的屬性和方法可以由該類和程序的任何其他類,子類訪問。
當(dāng)屬性和方法在類的Protected部分中聲明時,那些類和子類(派生類)只能訪問它們。
當(dāng)在類的Private部分中聲明屬性和方法時,這些屬性和方法只能由該類訪問,而不能由任何其他類訪問。
Report ZAccess1. CLASS class1 Definition. PUBLIC Section. Data: text1 Type char25 Value 'Public Data'. Methods meth1. PROTECTED Section. Data: text2 Type char25 Value 'Protected Data'. PRIVATE Section. Data: text3 Type char25 Value 'Private Data'. ENDCLASS. CLASS class1 Implementation. Method meth1. Write: / 'Public Method:', / text1, / text2, / text3. Skip. EndMethod. ENDCLASS. Start-Of-Selection. Data: Objectx Type Ref To class1. Create Object: Objectx. CALL Method: Objectx→meth1. Write: / Objectx→text1.
上面的代碼產(chǎn)生以下輸出 -
Public Method: Public Data Protected Data Private Data Public Data
靜態(tài)屬性用語句CLASS-DATA聲明。 所有對象或?qū)嵗伎梢允褂妙惖撵o態(tài)屬性。 靜態(tài)屬性直接在類名的幫助下訪問,像class_name?name_1=\'Some Text\'。
下面是一個程序,我們要打印一個文本行4到8次。 我們定義一個類class1,在公共部分我們聲明CLASS-DATA(靜態(tài)屬性)和一個方法。 在實現(xiàn)類和方法之后,我們直接訪問Start-Of-Selection事件中的static屬性。 然后我們只創(chuàng)建類的實例并調(diào)用該方法。
Report ZStatic1. CLASS class1 Definition. PUBLIC Section. CLASS-DATA: name1 Type char45, data1 Type I. Methods: meth1. ENDCLASS. CLASS class1 Implementation. Method meth1. Do 4 Times. data1 = 1 + data1. Write: / data1, name1. EndDo. Skip. EndMethod. ENDCLASS. Start-Of-Selection. class1?name1 = 'ABAP Object Oriented Programming'. class1?data1 = 0. Data: Object1 Type Ref To class1, Object2 Type Ref To class1. Create Object: Object1, Object2. CALL Method: Object1→meth1, Object2→meth1.
上面的代碼產(chǎn)生以下輸出 -
構(gòu)造函數(shù)是在創(chuàng)建對象或訪問類的組件時自動調(diào)用的特殊方法。 每當(dāng)一個對象被創(chuàng)建時,構(gòu)造器被觸發(fā),但是我們需要調(diào)用一個方法來觸發(fā)一般方法。 在下面的例子中,我們聲明了兩個公共方法method1和constructor。 這兩種方法都有不同的操作。 在創(chuàng)建類的對象時,構(gòu)造函數(shù)方法觸發(fā)其操作。
Report ZConstructor1. CLASS class1 Definition. PUBLIC Section. Methods: method1, constructor. ENDCLASS. CLASS class1 Implementation. Method method1. Write: / 'This is Method1'. EndMethod. Method constructor. Write: / 'Constructor Triggered'. EndMethod. ENDCLASS. Start-Of-Selection. Data Object1 Type Ref To class1. Create Object Object1.
上面的代碼產(chǎn)生以下輸出 -
Constructor Triggered
當(dāng)你在類的public節(jié)中聲明任何類型的變量時,你可以在任何其他實現(xiàn)中使用它。 變量可以在public section中用初始值聲明。 我們可以在一個具有不同值的方法中再次聲明該變量。 當(dāng)我們在方法中寫入變量時,系統(tǒng)將打印更改的值。 要反映變量的先前值,我們必須使用“ME"運算符。
在這個程序中,我們聲明了一個公共變量text1,并用一個值初始化。 我們已經(jīng)再次聲明相同的變量,但是用不同的值實例化。 在該方法中,我們使用“ME"運算符寫該變量以獲取先前啟動的值。 我們通過直接聲明獲得更改的值。
Report ZMEOperator1. CLASS class1 Definition. PUBLIC Section. Data text1 Type char25 Value 'This is CLASS Attribute'. Methods method1. ENDCLASS. CLASS class1 Implementation. Method method1. Data text1 Type char25 Value 'This is METHOD Attribute'. Write: / ME→text1, / text1. ENDMethod. ENDCLASS. Start-Of-Selection. Data objectx Type Ref To class1. Create Object objectx. CALL Method objectx→method1.
上面的代碼產(chǎn)生以下輸出 -
This is CLASS Attribute This is METHOD Attribute
面向?qū)ο缶幊讨凶钪匾母拍钪皇抢^承。 繼承允許我們根據(jù)另一個類定義一個類,這使得創(chuàng)建和維護應(yīng)用程序變得更容易。 這也提供了重用代碼功能和快速實現(xiàn)時間的機會。
當(dāng)創(chuàng)建類時,程序員可以指定新類應(yīng)該繼承現(xiàn)有類的成員,而不是寫入完全新的數(shù)據(jù)成員和方法。 此現(xiàn)有類稱為基類或超類,新類稱為派生類或子類 。
一個類的對象可以獲取另一個類的屬性。
派生類繼承超類的數(shù)據(jù)和方法。 但是,他們可以覆蓋方法,并添加新的方法。
繼承的主要優(yōu)點是可重用性。
除了類定義語句之外,還使用“INHERITING FROM"指定繼承關(guān)系。
以下是語法 -
CLASS <subclass> DEFINITION INHERITING FROM <superclass>.
Report ZINHERITAN_1. CLASS Parent Definition. PUBLIC Section. Data: w_public(25) Value 'This is public data'. Methods: ParentM. ENDCLASS. CLASS Child Definition Inheriting From Parent. PUBLIC Section. Methods: ChildM. ENDCLASS. CLASS Parent Implementation. Method ParentM. Write /: w_public. EndMethod. ENDCLASS. CLASS Child Implementation. Method ChildM. Skip. Write /: 'Method in child class', w_public. EndMethod. ENDCLASS. Start-of-selection. Data: Parent Type Ref To Parent, Child Type Ref To Child. Create Object: Parent, Child. Call Method: Parent→ParentM, child→ChildM.
上面的代碼產(chǎn)生以下輸出 -
This is public data Method in child class This is public data
派生類可以訪問其基類的所有非私有成員。 因此,應(yīng)該不能被子類的成員函數(shù)訪問的超類成員應(yīng)該在超類中被聲明為私有的。 我們可以根據(jù)誰可以通過以下方式訪問它們來總結(jié)不同的訪問類型 -
訪問 | 上市 | 保護 | 私人的 |
---|---|---|---|
同班 | Yes | Yes | Yes |
派生類 | Yes | Yes | No |
外面 | Yes | No | No |
當(dāng)從一個超類派生一個類時,它可以通過公共,保護或私有繼承繼承。 繼承的類型由訪問說明符指定,如上所述。 我們幾乎不使用保護或私有繼承,但公共繼承是常用的。 在使用不同類型的繼承時應(yīng)用以下規(guī)則。
公共繼承 - 從公共超類派生類時,超類的公共成員將成為子類的公共成員,超類的受保護成員將成為子類的受保護成員。 超類的私有成員永遠不能直接從子類訪問,但可以通過調(diào)用public和受保護的超類的成員來訪問。
受保護的繼承 - 從受保護的超類派生時,超類的公共和受保護成員將成為子類的受保護成員。
私有繼承 - 從私有超類派生時,超類的公共和受保護成員將成為子類的私有成員。
超類的方法可以在子類中重新實現(xiàn)。 重新定義方法的幾個規(guī)則 -
繼承方法的重定義語句必須與原始方法的定義在同一節(jié)中。
如果重新定義一個方法,則不需要在子類中再次輸入其接口,而只需要輸入方法的名稱。
在重定義的方法中,可以使用超級引用訪問直接超類的組件。
偽引用超級只能在重定義的方法中使用。
Report Zinheri_Redefine. CLASS super_class Definition. Public Section. Methods: Addition1 importing g_a TYPE I g_b TYPE I exporting g_c TYPE I. ENDCLASS. CLASS super_class Implementation. Method Addition1. g_c = g_a + g_b. EndMethod. ENDCLASS. CLASS sub_class Definition Inheriting From super_class. Public Section. METHODS: Addition1 Redefinition. ENDCLASS. CLASS sub_class Implementation. Method Addition1. g_c = g_a + g_b + 10. EndMethod. ENDCLASS. Start-Of-Selection. Parameters: P_a Type I, P_b TYPE I. Data: H_Addition1 TYPE I. Data: H_Sub TYPE I. Data: Ref1 TYPE Ref TO sub_class. Create Object Ref1. Call Method Ref1→Addition1 exporting g_a = P_a g_b = P_b Importing g_c = H_Addition1. Write:/ H_Addition1.
執(zhí)行F8后,如果我們輸入值9和10,上面的代碼產(chǎn)生以下輸出 -
Redefinition Demo 29
術(shù)語多態(tài)性字面意思是“多種形式"。 從面向?qū)ο蟮慕嵌葋砜?,多態(tài)性與繼承一起工作,使得繼承樹中的各種類型可以互換使用。 也就是說,當(dāng)存在類的層次結(jié)構(gòu)并且它們通過繼承相關(guān)時,發(fā)生多態(tài)性。 ABAP多態(tài)意味著對方法的調(diào)用將導(dǎo)致根據(jù)調(diào)用該方法的對象的類型執(zhí)行不同的方法。
以下程序包含一個抽象類\'class_prgm\',2個子類(class_procedural和class_OO)和一個測試驅(qū)動程序類\'class_type_approach\'。 在這個實現(xiàn)中,類方法“開始"允許我們顯示編程的類型及其方法。 如果仔細觀察方法“start"的簽名,您將觀察到它接收到類型為class_prgm的導(dǎo)入?yún)?shù)。 但是,在Start-Of-Selection事件中,此方法在運行時已調(diào)用類型為class_procedural和class_OO的對象。
Report ZPolymorphism1. CLASS class_prgm Definition Abstract. PUBLIC Section. Methods: prgm_type Abstract, approach1 Abstract. ENDCLASS. CLASS class_procedural Definition Inheriting From class_prgm. PUBLIC Section. Methods: prgm_type Redefinition, approach1 Redefinition. ENDCLASS. CLASS class_procedural Implementation. Method prgm_type. Write: 'Procedural programming'. EndMethod. Method approach1. Write: 'top-down approach'. EndMethod. ENDCLASS. CLASS class_OO Definition Inheriting From class_prgm. PUBLIC Section. Methods: prgm_type Redefinition, approach1 Redefinition. ENDCLASS. CLASS class_OO Implementation. Method prgm_type. Write: 'Object oriented programming'. EndMethod. Method approach1. Write: 'bottom-up approach'. EndMethod. ENDCLASS. CLASS class_type_approach Definition. PUBLIC Section. CLASS-METHODS: start Importing class1_prgm Type Ref To class_prgm. ENDCLASS. CLASS class_type_approach IMPLEMENTATION. Method start. CALL Method class1_prgm→prgm_type. Write: 'follows'. CALL Method class1_prgm→approach1. EndMethod. ENDCLASS. Start-Of-Selection. Data: class_1 Type Ref To class_procedural, class_2 Type Ref To class_OO. Create Object class_1. Create Object class_2. CALL Method class_type_approach?start Exporting class1_prgm = class_1. New-Line. CALL Method class_type_approach?start Exporting class1_prgm = class_2.
上面的代碼產(chǎn)生以下輸出 -
Procedural programming follows top-down approach Object oriented programming follows bottom-up approach
ABAP運行時環(huán)境在導(dǎo)入?yún)?shù)class1_prgm的分配期間執(zhí)行隱式精簡轉(zhuǎn)換。 此功能有助于“啟動"方法的一般實現(xiàn)。 與對象引用變量相關(guān)聯(lián)的動態(tài)類型信息允許ABAP運行時環(huán)境動態(tài)地將方法調(diào)用與由對象引用變量指向的對象中定義的實現(xiàn)綁定。 例如,\'class_type_approach\'類中的\'start\'方法的導(dǎo)入?yún)?shù)\'class1_prgm\'指的是一個永遠不能被實例化的抽象類型。
每當(dāng)使用具體子類實現(xiàn)(如class_procedural或class_OO)調(diào)用該方法時,class1_prgm引用參數(shù)的動態(tài)類型將綁定到這些具體類型之一。 因此,對方法\'prgm_type\'和\'approach1\'的調(diào)用是指class_procedural或class_OO子類中提供的實現(xiàn),而不是class\'class_prgm\'中提供的未定義的抽象實現(xiàn)。
封裝是一種面向?qū)ο缶幊?OOP)概念,將數(shù)據(jù)和函數(shù)綁定在一起,操作數(shù)據(jù),并保持兩者免受外部干擾和誤用。 數(shù)據(jù)封裝導(dǎo)致了數(shù)據(jù)隱藏的重要OOP概念。 封裝是捆綁數(shù)據(jù)和使用它們的函數(shù)的機制,數(shù)據(jù)抽象是一種僅暴露接口并向用戶隱藏實現(xiàn)細節(jié)的機制。
ABAP通過創(chuàng)建稱為類的用戶定義類型支持封裝和數(shù)據(jù)隱藏的屬性。 如前所述,類可以包含私有,受保護和公共成員。 默認情況下,類中定義的所有項目都是私有的。
封裝實際上意味著一個屬性和方法可以在不同的類中修改。 因此,數(shù)據(jù)和方法可以具有不同的形式和邏輯,可以隱藏以分離類。
讓我們考慮通過接口封裝。 當(dāng)我們需要在不同的類中創(chuàng)建具有不同功能的一個方法時,使用接口。 這里方法的名稱不需要改變。 相同的方法必須在不同的類實現(xiàn)中實現(xiàn)。
以下程序包含一個接口inter_1。 我們已經(jīng)聲明了屬性和方法method1。 我們還定義了兩個類,如Class1和Class2。 因此,我們必須在兩個類實現(xiàn)中實現(xiàn)方法“method1"。 我們在不同的類中實現(xiàn)了不同的方法\'method1\'。 在start-ofselection中,我們?yōu)閮蓚€類創(chuàng)建了兩個對象Object1和Object2。 然后,我們通過不同的對象調(diào)用該方法來獲得在單獨的類中聲明的函數(shù)。
Report ZEncap1. Interface inter_1. Data text1 Type char35. Methods method1. EndInterface. CLASS Class1 Definition. PUBLIC Section. Interfaces inter_1. ENDCLASS. CLASS Class2 Definition. PUBLIC Section. Interfaces inter_1. ENDCLASS. CLASS Class1 Implementation. Method inter_1~method1. inter_1~text1 = 'Class 1 Interface method'. Write / inter_1~text1. EndMethod. ENDCLASS. CLASS Class2 Implementation. Method inter_1~method1. inter_1~text1 = 'Class 2 Interface method'. Write / inter_1~text1. EndMethod. ENDCLASS. Start-Of-Selection. Data: Object1 Type Ref To Class1, Object2 Type Ref To Class2. Create Object: Object1, Object2. CALL Method: Object1→inter_1~method1, Object2→inter_1~method1.
上面的代碼產(chǎn)生以下輸出 -
Class 1 Interface method Class 2 Interface method
封裝的類對外界沒有很多依賴。 此外,他們與外部客戶端的交互通過穩(wěn)定的公共接口進行控制。 也就是說,封裝類及其客戶端松散耦合。 在大多數(shù)情況下,具有定義良好的接口的類可以插入到另一個上下文中。 當(dāng)設(shè)計正確時,封裝類成為可重用的軟件資產(chǎn)。
我們大多數(shù)人通過痛苦的經(jīng)驗學(xué)習(xí),使類成員默認為私有,除非我們真的需要暴露它們。 這只是很好的封裝。 這種智慧最常用于數(shù)據(jù)成員,并且同樣適用于所有成員。
類似于ABAP中的類,接口充當(dāng)對象的數(shù)據(jù)類型。 接口的組件與類的組件相同。 與類的聲明不同,接口的聲明不包括可見性部分。 這是因為在接口聲明中定義的組件總是集成在類的public visibility部分。
當(dāng)兩個類似的類具有相同名稱的方法但功能彼此不同時,使用接口。 接口可能看起來類似于類,但是接口中定義的函數(shù)在類中實現(xiàn)以擴展該類的范圍。 接口以及繼承特性為多態(tài)性提供了基礎(chǔ)。 這是因為在接口中定義的方法在不同類中的行為可能不同。
以下是創(chuàng)建接口的一般格式 -
INTERFACE <intf_name>. DATA..... CLASS-DATA..... METHODS..... CLASS-METHODS..... ENDINTERFACE.
在此語法中,< intf_name> 表示接口的名稱。 DATA和CLASSDATA語句可以分別用于定義接口的實例和靜態(tài)屬性。 METHODS和CLASS-METHODS語句可以分別用于定義接口的實例和靜態(tài)方法。 由于接口的定義不包括實現(xiàn)類,因此沒有必要在接口的聲明中添加DEFINITION子句。
注意 - 接口的所有方法都是抽象的。 它們是完全聲明的,包括它們的參數(shù)接口,但是沒有在接口中實現(xiàn)。 所有想要使用接口的類都必須實現(xiàn)接口的所有方法。 否則,該類將成為抽象類。
我們在類的實現(xiàn)部分使用以下語法 -
INTERFACE <intf_name>.
在此語法中,< intf_name> 表示接口的名稱。 請注意,此語法必須在類的public部分中使用。
以下語法用于實現(xiàn)類中實現(xiàn)接口的方法 -
METHOD <intf_name~method_m>. <statements>. ENDMETHOD.
在該語法中,< intf_name?method_m> 表示< intf_name>的方法的完全聲明的名稱。 接口。
Report ZINTERFACE1. INTERFACE my_interface1. Methods msg. ENDINTERFACE. CLASS num_counter Definition. PUBLIC Section. INTERFACES my_interface1. Methods add_number. PRIVATE Section. Data num Type I. ENDCLASS. CLASS num_counter Implementation. Method my_interface1~msg. Write: / 'The number is', num. EndMethod. Method add_number. ADD 7 TO num. EndMethod. ENDCLASS. CLASS drive1 Definition. PUBLIC Section. INTERFACES my_interface1. Methods speed1. PRIVATE Section. Data wheel1 Type I. ENDCLASS. CLASS drive1 Implementation. Method my_interface1~msg. Write: / 'Total number of wheels is', wheel1. EndMethod. Method speed1. Add 4 To wheel1. EndMethod. ENDCLASS. Start-Of-Selection. Data object1 Type Ref To num_counter. Create Object object1. CALL Method object1→add_number. CALL Method object1→my_interface1~msg. Data object2 Type Ref To drive1. Create Object object2. CALL Method object2→speed1. CALL Method object2→my_interface1~msg.
上面的代碼產(chǎn)生以下輸出 -
The number is 7 Total number of wheels is 4
在上面的示例中,my_interface1是包含\'msg\'方法的接口的名稱。 接下來,定義和實現(xiàn)兩個類,num_counter和drive1。 這兩個類實現(xiàn)了\'msg\'方法,以及定義它們各自實例的行為的特定方法,例如add_number和speed1方法。
注意 - add_number和speed1方法特定于各個類。
事件是在類中定義的一組結(jié)果,用于觸發(fā)其他類中的事件處理程序。 當(dāng)事件被觸發(fā)時,我們可以調(diào)用任何數(shù)量的事件處理程序方法。 觸發(fā)器及其處理程序方法之間的鏈接實際上是在運行時動態(tài)決定的。
在正常的方法調(diào)用中,調(diào)用程序確定對象或類的哪個方法需要被調(diào)用。 由于固定處理程序方法未針對每個事件注冊,因此在事件處理的情況下,處理程序方法確定需要觸發(fā)的事件。
類的事件可以通過使用RAISE EVENT語句觸發(fā)同一類的事件處理程序方法。 對于事件,可以通過使用FOR EVENT子句在相同或不同的類中定義事件處理程序方法,如以下語法中所示 -
FOR EVENT <event_name> OF <class_name>.
類似于類的方法,事件可以有參數(shù)接口,但它只有輸出參數(shù)。 輸出參數(shù)通過RAISE EVENT語句傳遞到事件處理程序方法,RAISE EVENT語句接收它們作為輸入?yún)?shù)。 事件通過使用SET HANDLER語句在程序中動態(tài)鏈接到其處理程序方法。
當(dāng)觸發(fā)事件時,應(yīng)該在所有處理類中執(zhí)行適當(dāng)?shù)氖录幚沓绦蚍椒ā?/span>
REPORT ZEVENT1. CLASS CL_main DEFINITION. PUBLIC SECTION. DATA: num1 TYPE I. METHODS: PRO IMPORTING num2 TYPE I. EVENTS: CUTOFF. ENDCLASS. CLASS CL_eventhandler DEFINITION. PUBLIC SECTION. METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. ENDCLASS. START-OF-SELECTION. DATA: main1 TYPE REF TO CL_main. DATA: eventhandler1 TYPE REF TO CL_eventhandler. CREATE OBJECT main1. CREATE OBJECT eventhandler1. SET HANDLER eventhandler1→handling_CUTOFF FOR main1. main1→PRO( 4 ). CLASS CL_main IMPLEMENTATION. METHOD PRO. num1 = num2. IF num2 ≥ 2. RAISE EVENT CUTOFF. ENDIF. ENDMETHOD. ENDCLASS. CLASS CL_eventhandler IMPLEMENTATION. METHOD handling_CUTOFF. WRITE: 'Handling the CutOff'. WRITE: / 'Event has been processed'. ENDMETHOD. ENDCLASS.
上面的代碼產(chǎn)生以下輸出 -
Handling the CutOff Event has been processed
報告是以組織結(jié)構(gòu)呈現(xiàn)數(shù)據(jù)。 許多數(shù)據(jù)庫管理系統(tǒng)包括一個報告寫入器,使您能夠設(shè)計和生成報告。 SAP應(yīng)用程序支持報告創(chuàng)建。
使用循環(huán)內(nèi)的WRITE語句中的輸出數(shù)據(jù)創(chuàng)建經(jīng)典報告。 它們不包含任何子報告。 SAP還提供了一些標準報告,例如用于在客戶端之間復(fù)制表的RSCLTCOP和用于顯示實例參數(shù)的RSPARAM。
這些報告只包含一個屏幕作為輸出。 我們可以使用各種事件,如INITIALIZATON&amp; TOP-OF-PAGE來創(chuàng)建經(jīng)典報告,每個事件在創(chuàng)建經(jīng)典報告時都有自己的重要性。 這些事件中的每一個都與特定的用戶操作相關(guān)聯(lián),并且只有在用戶執(zhí)行該操作時才會觸發(fā)。
以下是描述事件和描述的表 -
S.No。 | 事件&amp; 描述 |
---|---|
1 |
INITIALIZATON 在顯示選擇畫面之前觸發(fā)。 |
2 |
在SELECTION-SCREEN 在選擇屏幕上處理用戶輸入后觸發(fā)。 此事件在執(zhí)行程序之前驗證用戶輸入。 在處理用戶輸入之后,選擇屏幕保持在活動模式。 |
3 |
開始選擇 僅在選擇屏幕的處理結(jié)束后觸發(fā); 即當(dāng)用戶點擊選擇屏幕上的執(zhí)行圖標時。 |
4 |
END-OF-SELECTION 在執(zhí)行START-OF-SELECTION事件中的最后一條語句之后觸發(fā)。 |
5 |
首頁 由第一條WRITE語句觸發(fā)以在新頁面上顯示數(shù)據(jù)。 |
6 |
結(jié)束頁 觸發(fā)以在報表的頁面末尾顯示文本。 請注意,此事件是創(chuàng)建報告時的最后一個事件,應(yīng)與REPORT語句的LINE-COUNT子句結(jié)合使用。 |
讓我們創(chuàng)建一個經(jīng)典報告。 我們將通過在ABAP編輯器中使用一系列語句來顯示存儲在標準數(shù)據(jù)庫MARA(包含一般材料數(shù)據(jù))中的信息。
REPORT ZREPORT2 LINE-SIZE 75 LINE-COUNT 30(3) NO STANDARD PAGE HEADING. Tables: MARA. TYPES: Begin of itab, MATNR TYPE MARA-MATNR, MBRSH TYPE MARA-MBRSH, MEINS TYPE MARA-MEINS, MTART TYPE MARA-MTART, End of itab. DATA: wa_ma TYPE itab, it_ma TYPE STANDARD TABLE OF itab. SELECT-OPTIONS: MATS FOR MARA-MATNR OBLIGATORY. INITIALIZATION. MATS-LOW = '1'. MATS-HIGH = '500'. APPEND MATS. AT SELECTION-SCREEN. . IF MATS-LOW = ' '. MESSAGE I000(ZKMESSAGE). ELSEIF MATS-HIGH = ' '. MESSAGE I001(ZKMESSAGE). ENDIF. TOP-OF-PAGE. WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA FROM THE TABLE MARA' COLOR 7. ULINE. WRITE:/ 'MATERIAL' COLOR 1, 24 'INDUSTRY' COLOR 2, 38 'UNITS' COLOR 3, 53 'MATERIAL TYPE' COLOR 4. ULINE. END-OF-PAGE. START-OF-SELECTION. SELECT MATNR MBRSH MEINS MTART FROM MARA INTO TABLE it_ma WHERE MATNR IN MATS. LOOP AT it_ma into wa_ma. WRITE:/ wa_ma-MATNR, 25 wa_ma-MBRSH, 40 wa_ma-MEINS, 55 wa_ma-MTART. ENDLOOP. END-OF-SELECTION. ULINE. WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7. ULINE. SKIP.
上述代碼產(chǎn)生以下輸出,包含標準表中的一般材料數(shù)據(jù)MARA -
對話框編程處理多個對象的開發(fā)。 所有這些對象被分層鏈接到主程序,并且它們按順序執(zhí)行。 對話程序開發(fā)利用ABAP工作臺中的工具。 這些是在標準SAP應(yīng)用程序開發(fā)中使用的相同工具。
這里是對話程序的主要組件 -
對話框程序應(yīng)該由對象瀏覽器(事務(wù):SE80)開發(fā),以便所有對象都被鏈接到主程序,而不必顯式地指向每個對象。 高級導(dǎo)航技術(shù)增強了從一個對象移動到另一個對象的過程。
屏幕由屏幕屬性,屏幕布局,字段和流邏輯組成。 模塊池由模塊化語法組成,放在里面包含對話程序的程序。 這些模塊可以由流邏輯調(diào)用,由對話處理器處理。
步驟1 - 在事務(wù)SE80中,從下拉列表中選擇“程序",并為自定義SAP程序輸入Z名稱為“ZSCREENEX"。
步驟2 - 按Enter鍵,選擇“使用TOP INCL",然后點擊“是"按鈕。
步驟3 - 輸入您的熱門包含名稱為“ZSCRTOP",然后點擊綠色刻度線。
步驟4 - 在屬性屏幕中,只需輸入標題,然后點擊保存按鈕。
步驟1 - 要向程序添加屏幕,請右鍵單擊程序名稱,然后選擇選項創(chuàng)建→屏幕。
步驟2 - 輸入屏幕號碼為“0211",然后點擊綠色刻度線。
步驟3 - 在下一個屏幕中,輸入簡短標題,設(shè)置為正常屏幕類型,然后單擊頂部應(yīng)用程序工具欄上的保存按鈕。
步驟1 - 點擊應(yīng)用程序工具欄中的布局按鈕,出現(xiàn)Screen Painter窗口。
步驟2 - 添加文本字段并輸入一些文本,例如“Hello World"。
步驟3 - 保存并激活屏幕。
步驟1 - 要為您的程序創(chuàng)建事務(wù)代碼,只需右鍵單擊程序名稱,然后選擇選項創(chuàng)建→事務(wù)并輸入事務(wù)代碼為“ZTRANEX"。
步驟2 - 輸入剛創(chuàng)建的交易文本,程序和屏幕(ZSCREENEX&amp; 0211),然后在“GUI支持"部分勾選“SAPGUI for Windows"復(fù)選框。
保存并激活一切。 您可以執(zhí)行程序。 程序執(zhí)行時,您輸入的文本將顯示在屏幕上,如以下屏幕截圖所示。
SAP Smart Forms工具可用于打印和發(fā)送文檔。 此工具在開發(fā)用于Internet的表單,PDF文件,電子郵件和文檔中非常有用。 該工具提供了一個接口來構(gòu)建和維護表單的布局和邏輯。 SAP還為業(yè)務(wù)流程(如客戶關(guān)系管理(CRM),銷售和分銷(SD),財務(wù)會計(FI)和人力資源(HR))提供一系列表格。
該工具允許您使用簡單的圖形工具而不是使用任何編程工具來修改表單。 這意味著沒有編程知識的用戶可以毫不費力地為這些表單配置業(yè)務(wù)流程的數(shù)據(jù)。
在智能表單中,從靜態(tài)和動態(tài)表中檢索數(shù)據(jù)。 表標題和小計由觸發(fā)事件指定,然后數(shù)據(jù)在最終輸出之前排序。 智能表單允許您包含可以作為表單的一部分或作為背景顯示的圖形。 如果需要,還可以在進行表單打印輸出時抑制背景圖形。
SAP系統(tǒng)中可用的標準智能表單的一些示例如下 -
SF_EXAMPLE_01表示具有用于客戶的航班預(yù)訂的表輸出的發(fā)票。
SF_EXAMPLE_02表示類似于SF_EXAMPLE_01的發(fā)票,但帶有小計。
SF_EXAMPLE_03指定類似于SF_EXAMPLE_02的發(fā)票,但可以在應(yīng)用程序中選擇多個客戶的發(fā)票。
讓我們使用SAP Smart Forms工具創(chuàng)建表單。 您還將學(xué)習(xí)如何在智能表單中添加節(jié)點并在本教程中測試表單。 這里我們開始創(chuàng)建SF_EXAMPLE_01表單的副本。 SF_EXAMPLE_01表單是SAP系統(tǒng)中可用的標準智能表單。
步驟1 - Smart Form Builder是用于構(gòu)建智能表單的主要界面。 它在SAP Smart Forms的初始屏幕上可用。 我們需要在“命令"字段中鍵入“SMARTFORMS"事務(wù)代碼,以打開SAP Smart Forms的初始屏幕。 在此屏幕中,在表單字段中輸入表單名稱SF_EXAMPLE_01。
步驟2 - 選擇智能表單→復(fù)制或單擊復(fù)制圖標以打開復(fù)制表單或文本對話框。
步驟3 - 在“目標對象"字段中,輸入新表單的名稱。 名稱必須以Y或Z字母開頭。 在這種情況下,表單的名稱為“ZSMM1"。
步驟4 - 單擊繼續(xù)圖標或在復(fù)制窗體或文本對話框中按ENTER鍵,以便創(chuàng)建ZSMM1表單作為預(yù)定義表單SF_EXAMPLE_01的副本。
步驟5 - 點擊保存圖標。 表單的名稱顯示在SAP Smart Forms初始屏幕上的表單字段中。
步驟6 - 點擊SAP Smart Forms初始屏幕上的創(chuàng)建按鈕。 ZSMM1表單顯示在表單構(gòu)建器中。
步驟7 - 使用MAIN窗口創(chuàng)建第一個草稿頁。 新窗體的所有組件都基于SF_EXAMPLE_01預(yù)定義的形式。 您可以單擊導(dǎo)航菜單中的某個節(jié)點來查看其內(nèi)容。
步驟1 - 在SAP表單構(gòu)建器屏幕的更改模式下打開表單,右鍵單擊第一頁節(jié)點中的主窗口選項,然后從上下文菜單中選擇創(chuàng)建→文本。
步驟2 - 將文本字段中的文本修改為“My_Text",將“含義"字段中的文本修改為“Text_Demo"。 在窗體構(gòu)造器中心框架的文本編輯框中輸入文本“Hello TutorialPoint .....",如以下快照所示 -
步驟3 - 點擊保存按鈕保存節(jié)點。
步驟4 - 通過分別單擊激活和測試圖標激活和測試節(jié)點。 顯示Function Builder的初始屏幕。
步驟5 - 通過單擊激活和執(zhí)行圖標激活和測試功能模塊。 功能模塊的參數(shù)顯示在Function Builder的初始屏幕中。
步驟6 - 通過單擊執(zhí)行圖標執(zhí)行功能模塊。 將出現(xiàn)打印對話框。
步驟7 - 將輸出設(shè)備指定為“LP01",然后單擊打印預(yù)覽按鈕。
以上步驟將產(chǎn)生以下輸出 -
SAP系統(tǒng)的SAPscript工具可用于構(gòu)建和管理業(yè)務(wù)表單,例如發(fā)票和采購訂單。 SAPscript工具提供了許多模板,可以在很大程度上簡化業(yè)務(wù)表單的設(shè)計。
SAP系統(tǒng)附帶與SAP標準客戶端(通常作為客戶端000)一起交付的標準SAPscript表單。 以下是隨客戶端000提交的標準SAPscript表單的幾個示例 -
S.No。 | 表格名稱&amp; 描述 |
---|---|
1 |
RVORDER01 銷售訂單確認表 |
2 |
RVDELNOTE 打包清單 |
3 |
RVINVOICE01 發(fā)票 |
4 |
MEDRUCK 采購訂單 |
5 |
F110_PRENUM_CHCK Prenumbered檢查 |
SAPscript表單的結(jié)構(gòu)由兩個主要組件組成 -
內(nèi)容 - 可以是文字(業(yè)務(wù)數(shù)據(jù))或圖形(公司徽標)。
布局 - 這是由一組窗口定義的,其中顯示表單內(nèi)容。
Form Painter工具提供SAPscript表單的圖形布局以及操作表單的各種功能。 在下面的示例中,我們將從標準SAPscript表單RVINVOICE01復(fù)制其布局結(jié)構(gòu)之后創(chuàng)建發(fā)票表單,并通過訪問表單繪制工具顯示其布局。
步驟1 - 打開表單繪制器。 您可以通過導(dǎo)航SAP菜單或使用SE71事務(wù)代碼來請求屏幕。
步驟2 - 在表單畫家請求屏幕中,分別在表單和語言字段中輸入SAPscript表單的名稱和語言。 讓我們在這些字段中分別輸入\'RVINVOICE01\'和\'EN\'。
步驟3 - 在子對象組框中選擇頁面布局單選按鈕。
步驟4 - 選擇實用程序→從客戶端復(fù)制以創(chuàng)建RVINVOICE01表單的副本。 將顯示“復(fù)制客戶端之間的表單"屏幕。
步驟5 - 在“在客戶端之間復(fù)制表單"屏幕中,在表單名稱字段中輸入表單的原始名稱“RVINVOICE01",源中的源客戶端的編號“000" 客戶端字段,目標表單的名稱為“ZINV_01"。 確保其他設(shè)置保持不變。
步驟6 - 接下來,點擊“在客戶端之間復(fù)制表單"屏幕中的執(zhí)行圖標。 將顯示“創(chuàng)建對象目錄條目"對話框。 單擊保存圖標。
ZINV_01表單從RVINVOICE01表單中復(fù)制并顯示在“復(fù)制客戶端之間的表單"屏幕中,如下面的快照所示 -
步驟7 - 點擊后退圖標兩次,返回到表單畫筆:請求屏幕,其中包含復(fù)制的表格ZINV_01的名稱。
步驟8 - 單擊顯示按鈕后,將出現(xiàn)“窗體ZINV_01:第FIRST頁布局"窗口和“窗體:更改頁面布局:ZINV_01"屏幕,如以下屏幕截圖所示。
步驟9 - “窗體ZINV_01:頁面FIRST布局"窗口顯示窗體的初始布局。 窗體的布局包含五個窗口:HEADER,ADDRESS,INFO,INFO1和MAIN。 這些窗口的描述可以在PC編輯器中訪問。
例如,只需選擇MAIN窗口并單擊“窗體:更改頁面布局:ZINV_01"屏幕中的文本圖標,即可查看所有邊距值,如以下屏幕截圖所示 -
客戶出口可以被視為SAP標準程序的鉤子。 我們不需要訪問密鑰來編寫代碼,并且不需要修改SAP標準程序。 這些退出沒有任何功能,它們是空的。 可以添加業(yè)務(wù)邏輯以滿足各種客戶端要求。 但是,客戶退出不適用于所有程序。
以下是針對標準交易查找客戶退出的步驟。 讓我們確定在MM01(材料主創(chuàng)建)中可用的客戶退出。
步驟1 - 轉(zhuǎn)到事務(wù)MM01,并通過進入菜單欄→系統(tǒng)→狀態(tài)來識別MM01的程序名稱,如上面的截圖所示。
步驟2 - 從彈出式螢?zāi)蝗〉贸淌矫Q。 程序名稱為“SAPLMGMM"。
步驟3 - 轉(zhuǎn)到事務(wù)SE38,輸入程序名稱,然后單擊顯示。
步驟4 - 導(dǎo)航到轉(zhuǎn)到→屬性,找到此程序名稱的包。
包名稱為\'MGA\'。
步驟5 - 轉(zhuǎn)到通常用于標識客戶退出的事務(wù)代碼SMOD。 導(dǎo)航到實用程序→查找(或),您可以直接按Ctrl + amp; F上的事務(wù)代碼SMOD。
步驟6 - 進入“查找退出"屏幕后,輸入我們之前獲得的程序包名稱,然后按F8(執(zhí)行)按鈕。
以上步驟將生成以下輸出以及材料主數(shù)據(jù)創(chuàng)建中可用的退出列表。
如果標準SAP提取器不提供期望的數(shù)據(jù)或所需的功能,例如在授權(quán)或時間檢查中,則在提取中使用用戶出口。 用戶出口通常用于銷售和分銷(SD)模塊。 SAP在銷售,運輸,運輸和計費領(lǐng)域提供了許多退出。 用戶出口旨在在標準SAP無法滿足所有要求時進行一些更改。
要能夠訪問每個銷售區(qū)域中可用的退出,請使用此路徑轉(zhuǎn)到IMG:IMG→銷售和分銷→系統(tǒng)修改→用戶退出。 將詳細解釋SD區(qū)域中每個出口的文檔。
例如,如果要在銷售憑證處理(合同,報價或銷售訂單)中查找用戶退出,請按照上述路徑繼續(xù)展開銷售中的用戶退出→用戶退出。 單擊圖標文檔以查看銷售憑證處理中提供的所有用戶退出。
S.No。 | 用戶退出&amp; 描述 |
---|---|
1 |
USEREXIT_FIELD_MODIFICATION 用于修改屏幕屬性。 |
2 |
USEREXIT_SAVE_DOCUMENT 有助于在用戶點擊保存時執(zhí)行操作。 |
3 |
USEREXIT_SAVE_DOCUMENT_PREPARE 非常有用的是檢查輸入字段,在字段中輸入任何值或向用戶顯示彈出式窗口并確認文檔。 |
4 |
USEREXIT_MOVE_FIELD_TO_VBAK 將用戶標題更改移動到標題工作區(qū)時使用。 |
5 |
USEREXIT_MOVE_FIELD_TO_VBAP 將用戶項目更改移動到SAP項目工作區(qū)時使用。 |
用戶出口的功能與客戶退出功能相同,但它們僅適用于SD模塊。 退出實現(xiàn)為對函數(shù)模塊的調(diào)用。 用戶退出是對SAP標準程序的修改。
REPORT ZUSEREXIT1. TABLES: TSTC, TSTCT, TADIR, TRDIR, TFDIR, ENLFDIR, MODSAPT, MODACT. DATA: JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE, field1(30), 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, 2 '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, 2 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) 'User Exit doesn’t exist'. 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.
處理時,輸入事務(wù)代碼“ME01",然后按F8(執(zhí)行)按鈕。 上面的代碼產(chǎn)生以下輸出 -
在一些情況下,需要在軟件應(yīng)用中預(yù)定義特殊功能以增強各種應(yīng)用的功能。 有許多Microsoft Excel加載項來提高MS Excel的功能。 類似地,SAP通過提供稱為BADI的業(yè)務(wù)加載項來實現(xiàn)一些預(yù)定義的功能。
BADI是一種增強技術(shù),有助于SAP程序員,用戶或特定行業(yè)向SAP系統(tǒng)中的現(xiàn)有程序添加一些附加代碼。 我們可以使用標準或定制的邏輯來改進SAP系統(tǒng)。 BADI必須首先被定義,然后實現(xiàn)以增強SAP應(yīng)用程序。 在定義BADI時,將創(chuàng)建一個接口。 BADI由該接口實現(xiàn),接口又由一個或多個適配器類實現(xiàn)。
BADI技術(shù)與其他增強技術(shù)在兩個方面不同 -
您還可以創(chuàng)建過濾器BADI,這意味著BADI是基于過濾的數(shù)據(jù)定義的,這是增強技術(shù)不可能實現(xiàn)的。 在SAP版本7.0中重新定義了BADI的概念,具有以下目標 -
通過在ABAP語言中添加兩個新元素(即“GET BADI"和“CALL BADI")來增強SAP系統(tǒng)中的標準應(yīng)用程序。
提供更多靈活性功能,如上下文和過濾器,用于增強SAP系統(tǒng)中的標準應(yīng)用程序。
創(chuàng)建BADI時,它包含一個界面和其他附加組件,例如用于菜單增強和屏幕增強的功能代碼。 BADI創(chuàng)建允許客戶在標準SAP應(yīng)用程序中包含自己的增強功能。 增強,接口和生成的類位于適當(dāng)?shù)膽?yīng)用程序開發(fā)命名空間中。
因此,BADI可以被認為是一種增強技術(shù),它使用ABAP對象在SAP組件中創(chuàng)建“預(yù)定義點"。 然后,這些預(yù)定義點由單個行業(yè)解決方案,國家/地區(qū)變體,合作伙伴和客戶實施,以滿足其特定要求。 SAP實際上引入了版本4.6A的BADI增強技術(shù),該技術(shù)在版本7.0中再次實現(xiàn)。
用于ABAP的Web Dynpro(WD)是SAP AG開發(fā)的SAP標準用戶界面技術(shù)。 它可用于在使用SAP開發(fā)工具和概念的SAP ABAP環(huán)境中開發(fā)基于Web的應(yīng)用程序。 它提供了一個前端Web用戶界面,用于直接連接到后端SAP R / 3系統(tǒng),以訪問用于報告的數(shù)據(jù)和功能。
用于ABAP的Web Dynpro由運行時環(huán)境和具有集成在ABAP工作臺(事務(wù):SE80)中的特定開發(fā)工具的圖形開發(fā)環(huán)境組成。
下圖顯示了Web Dynpro的整體架構(gòu) -
以下是幾點要記住的Web Dynpro -
Web Dynpro是用于用戶界面的SAP NetWeaver編程模型。
所有Web Dynpro應(yīng)用程序都按照模型視圖控制器(MVC)編程模型進行構(gòu)造。
模型定義了到主系統(tǒng)的接口,Web Dynpro應(yīng)用程序可以訪問系統(tǒng)數(shù)據(jù)。
視圖負責(zé)在Web瀏覽器中顯示數(shù)據(jù)。
控制器位于視圖和模型之間。 控制器格式化要在視圖中顯示的模型數(shù)據(jù)。 它處理用戶創(chuàng)建的用戶條目并將其返回到模型。
Web Dynpro為應(yīng)用程序開發(fā)人員提供以下優(yōu)勢 -
使用圖形工具顯著減少了實施工作。
通過使用組件重用和更好的可維護性。
使用Web Dynpro工具可以輕松更改布局和導(dǎo)航。
支持用戶界面輔助功能。
完全集成在ABAP開發(fā)環(huán)境中。
組件是Web Dynpro應(yīng)用程序項目的全局單位。 創(chuàng)建Web Dynpro組件是開發(fā)新的Web Dynpro應(yīng)用程序的初始步驟。 創(chuàng)建組件后,它將作為Web Dynpro對象列表中的節(jié)點。 您可以在組件中創(chuàng)建任意數(shù)量的組件視圖,并將其組裝到任意數(shù)量的相應(yīng)Web Dynpro窗口中。
每個Web Dynpro組件中至少包含一個Web Dynpro窗口。 Web Dynpro窗口嵌入在前端Web應(yīng)用程序中顯示的所有視圖。 該窗口在ABAP工作臺的窗口編輯器中處理。
注意
組件視圖顯示應(yīng)用程序的所有管理詳細信息,包括描述,創(chuàng)建它的人員的名稱,創(chuàng)建日期和分配的開發(fā)包。
Web Dynpro應(yīng)用程序是ABAP工作臺對象列表中的獨立對象。 窗口和應(yīng)用程序之間的交互是由給定窗口的接口視圖創(chuàng)建的。
更多建議: