选择屏幕的定义
定義選擇屏幕
==========================================================================================
從sap內(nèi)存中使用缺省值
Parameters語句的memory-id選項(xiàng)允許從全局sap內(nèi)存使用缺省值
PARAMETERS<p> ...... MEMORY ID<pid>......
使用該選項(xiàng) 時(shí),以名稱<pid> 存儲(chǔ)在全局 用戶相關(guān)的 SAP 內(nèi)存中的值 將作為<p> 的缺省值出現(xiàn)在選擇屏幕上。<pid>最長3個(gè)字符 并且不能用引號(hào)封閉。
可以使用全局sap內(nèi)存在程序間傳遞保留在事務(wù)限制以外的值,用戶在整個(gè)終端進(jìn)程期間都可以利用該內(nèi)存,并且所有并行進(jìn)程使用相同的內(nèi)存。因此SAP 內(nèi)存包含的 內(nèi)容要比局 限于事務(wù)的 ABAP/4 內(nèi)存更廣泛。
下列報(bào)表以 “HK”為 名稱在全局 SAP 內(nèi)存中存儲(chǔ)值:
REPORT SAPMZTS1.
SET PARAMETER ID 'HK' FIELD 'TestParameter'.
該值在下列 報(bào)表中作為 參數(shù) TEST 的缺省值使 用:
PROGRAM SAPMZTS2.
PARAMETERS TEST(16) MEMORY ID HK.
?
給參數(shù)分配 匹配代碼對(duì) 象
要給參數(shù)分 配匹配代碼 對(duì)象,請(qǐng)使 用 PARAMETERS 語句的MATCHCODE OBJECT 選項(xiàng)
語法:
PARAMETERS<p> ...... MATCHCODE OBJECT<obj> ......
匹配代碼對(duì) 象<obj> 的名稱必須 是 4 字符的變量名,并且不能用引號(hào)封閉。
如果使用該 選項(xiàng),則可 能的條目按 鈕將在參數(shù)<p> 的輸入字段 之后出現(xiàn)。 用戶按下該按鈕時(shí),其 結(jié)果是為執(zhí)行輸入字段的匹配代碼 選擇。
匹配代碼對(duì) 象<obj> 的名稱必須 是 4 字符的變量名,并且不能用引號(hào)封閉。
這段應(yīng)該可以理解吧。
--------------------
如果使用該 選項(xiàng),則可 能的條目按 鈕將在參數(shù)<p> 的輸入字段 之后出現(xiàn)。 用戶按下該按鈕時(shí),其 結(jié)果是為執(zhí)行輸入字段的匹配代碼 選擇。
就是說,如果使用了 MATCHCODEOBJECT,則參數(shù)后面就會(huì)出那個(gè)小圓疙瘩按鈕,按了它,就出<obj>指定的搜索窗口。
PARAMETERS CONN(10) MATCHCODE OBJECTSPFL.
?
給修改組分配參數(shù)
要將參數(shù)分配給修改組可以使用parameters modif id選項(xiàng)
PARAMETERS<p> ...... MODIF ID<key> ......
修改組 <key>的名稱必須 是不帶引號(hào) 的 3 字符變量名。
MODIF ID 選項(xiàng)總是把<key> 分配到內(nèi)表 SCREEN 的 SCREEN-GROUP1列。
在 AT SELECTION-SCREEN OUTPUT事件,分配給修改組的參數(shù)可以用 LOOP AT SCREEN/MODIFY SCREEN 語句按整個(gè) 組進(jìn)行處理 。
PARAMETERS: TEST1(10) MODIF ID SC1,
???????????TEST2(10) MODIF ID SC2,
???????????TEST3(10) MODIF ID SC1,
???????????TEST4(10) MODIF ID SC2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
??? IFSCREEN-GROUP1 = 'SC1'.
???????SCREEN-INTENSIFIED = '1'.
???????MODIFY SCREEN.
???????CONTINUE.
??? ENDIF.
??? IFSCREEN-GROUP1 = 'SC2'.
???????SCREEN-INTENSIFIED = '0'.
???????MODIFY SCREEN.
??? ENDIF.
ENDLOOP.
在 PARAMETERS 語句中,參 數(shù) TEST1 和 TEST3被分配給組 SC1,而 TEST2 和 TEST4 被分配給組 SC2。在 AT SELECTION-SCREEN OUTPUT事件中,按 照 GROUP1 字段的內(nèi)容,內(nèi)表 SCREEN 的字段 INTENSIFIED 被設(shè)置為 1 或0。在選擇屏幕中,TEST1 和 TEST3 所在行被設(shè) 置為高亮度 ,而 TEST2 和 TEST4則不是,一般為紅色顯示!
?
使用選擇標(biāo)準(zhǔn)
選擇標(biāo)準(zhǔn) 存儲(chǔ)在特殊 內(nèi)表中,以 方便設(shè)置數(shù) 據(jù)庫訪問條 件。每個(gè)選擇標(biāo)準(zhǔn)通常分配到數(shù)據(jù) 庫表的特定 列。可以用 SELECT-OPTIONS 語句定義選 擇標(biāo)準(zhǔn)。
如果在報(bào)表 程序中用 SELECT-OPTIONS 語句定義了選擇標(biāo)準(zhǔn),系統(tǒng)將在報(bào) 表選擇屏幕 中自動(dòng)創(chuàng)建輸入字段。 這樣,用戶 可以為訪問 相關(guān)的數(shù)據(jù) 庫表輸入條 件。
如果想編 程實(shí)現(xiàn)復(fù)合 選擇,保存 在指定內(nèi)表 中的 PARAMETERS選擇標(biāo)準(zhǔn)是 很有用的, 因?yàn)樗鼈兪鼓挥迷陂L 的 WHERE 條件中進(jìn)行 編碼。
使用 SELECT-OPTIONS 語句定義選 擇標(biāo)準(zhǔn)。在定義期間,通常把選擇 標(biāo)準(zhǔn)連接到 必須在程序中說明的數(shù) 據(jù)庫表的特 定列上。但 是,您也可 以把選擇標(biāo) 準(zhǔn)連接到報(bào) 表的內(nèi)部字段。多數(shù)情況下每個(gè)選 擇標(biāo)準(zhǔn)能連 接到一個(gè)數(shù) 據(jù)庫表,而 數(shù)據(jù)庫表可 以連接到幾個(gè)選擇標(biāo)準(zhǔn)
如果您使用 SELECT-OPTIONS 語句,報(bào)表 用戶可以在選擇屏幕中輸入選擇標(biāo) 準(zhǔn)。
保存選擇標(biāo) 準(zhǔn)的內(nèi)表稱 為選擇表。
?
選擇表
系統(tǒng)為每個(gè) SELECT-OPTIONS 語句創(chuàng)建選 擇表。選擇表的目的是按標(biāo)準(zhǔn)化的 方式保存復(fù) 合選擇限制。它們可按 多種方式使 用。它們的 主要目的是 使用 Open SQL 語句的 WHERE子句, 把選擇標(biāo) 準(zhǔn)直接傳輸 到數(shù)據(jù)庫表 。選擇表是一 個(gè)帶表頭行的內(nèi)表。它 的行結(jié)構(gòu)是 字段字符串 ,由四個(gè)組 件構(gòu)成,即SIGN、 OPTION、 LOW 和 HIGH。 每個(gè)選擇表行表示數(shù)據(jù) 選擇的條件 .
?
??? SIGN
SIGN 的數(shù)據(jù)類型 是 C,長度為 1。SIGN 是標(biāo)志,表 示保存在OPTION 中的運(yùn)算符是否需要翻 轉(zhuǎn)。允許值 是 I 和 E。
-?? I表示“包含 ”(包含標(biāo) 準(zhǔn)-運(yùn)算符 不翻轉(zhuǎn))
-?? E表示“排除 ”(排除標(biāo) 準(zhǔn)-運(yùn)算符 翻轉(zhuǎn))
? ?OPTION
OPTION 的數(shù)據(jù)類型 是 C,長度為 2。OPTION包含選擇運(yùn)算符。如果 SIGN 包含 E,運(yùn)算符 的作用就象 它的前面有 NOT一樣。下 列運(yùn)算符是 可用的:
-??如果 HIGH 是空的,您 可以使用 EQ 、 NE 、 GT 、 LE 、 LT 、 CP 和 NP。這些 運(yùn)算符在編程邏輯表達(dá)式中描述。運(yùn) 算符 CP 和 NP 沒有它們?cè)?通常邏輯表 達(dá)式中所具 有的范圍。 只有當(dāng)在輸入字段中使 用了通配符 (“* ”或“ + ”)時(shí)它們 才是有效的。沒有定義 退出符號(hào)。
-??如果 HIGH 已被填充, 則可以使用 BT(位于 )和 NB(不位于)。這些 運(yùn)算符的功 能與 BETWEEN 和 NOTBETWEEN 一樣
? ?LOW
LOW 的數(shù)據(jù)類型 與數(shù)據(jù)庫表 的列類型相 同,該表與選擇標(biāo)準(zhǔn)相連接。
-??如果 HIGH 為空,LOW 的內(nèi)容定義 單值選擇。 它與 OPTION 中的運(yùn)算符 相結(jié)合,為 數(shù)據(jù)庫選擇 指定了條件 。
? ?HIGH
HIGH 的數(shù)據(jù)類型 與數(shù)據(jù)庫表 的列類型相 同,該表與選擇標(biāo)準(zhǔn)相連接。HIGH 中的內(nèi)容為 間隔選擇指 定了上界。 與 OPTION 中的運(yùn)算符 相結(jié)合,該 間隔為數(shù)據(jù)庫選擇指定了條件。
如果選擇表 包含多行, 系統(tǒng)將按下 列規(guī)則執(zhí)行 數(shù)據(jù)選擇:
1.? 組成 在 SIGN 字段值為I(包含) 的行上定義 的集合聯(lián)合 。
2.? 去掉 在 SIGN 字段值為E(排除) 的行上定義 的集合聯(lián)合 。
3.? 選擇 結(jié)果集合。
如果選擇表 只具有 SIGN 字段等于 E 的行,系統(tǒng)將選擇這些行所指定的集合之外的 所有數(shù)據(jù)。
?
自定義選擇 標(biāo)準(zhǔn)與邏輯 數(shù)據(jù)庫
如果邏輯數(shù) 據(jù)庫與報(bào)表 程序相連接 ,并且定義 了與連接數(shù)據(jù)庫的數(shù)據(jù)庫表相連接 的選擇標(biāo)準(zhǔn) ,那么必須 區(qū)別兩種情 況:
? ?如果您為 數(shù)據(jù)庫表列 定義了選擇 標(biāo)準(zhǔn),該數(shù) 據(jù)庫不提供 動(dòng)態(tài)選擇,您的自 定義選擇標(biāo) 準(zhǔn)不會(huì)影響 邏輯數(shù)據(jù)庫讀入的數(shù)據(jù)總數(shù)。只有在讀入后, 您才可以在 GET 事件
中在報(bào)表程序中進(jìn)行檢查
??????如果您為 具有動(dòng)態(tài)選 擇的數(shù)據(jù)庫 表的列定義了選擇標(biāo)準(zhǔn) ,系統(tǒng)將把 用戶在選擇 屏幕的輸入 字段中輸入 的值傳遞給邏輯數(shù)據(jù)庫。在那里, 它們被用作 動(dòng)態(tài)選擇。 這種選擇比 不具有動(dòng)態(tài) 選擇的數(shù)據(jù) 庫表效率更高。
通過用 SELECT-OPTIONS 語句為預(yù)知 動(dòng)態(tài)選擇的數(shù)據(jù)庫表的行定義選擇 標(biāo)準(zhǔn),可以 使系統(tǒng)直接在選擇屏幕 上顯示動(dòng)態(tài) 選擇。要讓 它出現(xiàn),用 戶就不能單 擊“用戶選 擇”。其結(jié)果就象用戶在屏幕上為 動(dòng)態(tài)選擇輸 入選擇限制 一樣。
?
?
定義選擇標(biāo)準(zhǔn)
可以用select-options語句定義選擇標(biāo)準(zhǔn),而且又有幾個(gè)變體
語法:SELECT-OPTIONS<seltab> FOR<f>.
該語句創(chuàng)建 選擇表<seltab>, 該表與數(shù)據(jù) 庫表的列<f> 或內(nèi)部字段<f> 相連接。該 數(shù)據(jù)庫表必須在程序中 用 TABLES語句聲明。
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FORSPFLI-CARRID.
LOOP AT AIRLINE.
??WRITE: / 'SIGN:',??AIRLINE-SIGN,
???????????'OPTION:', AIRLINE-OPTION,
???????????'LOW:',???AIRLINE-LOW,
???????????'HIGH:',??AIRLINE-HIGH.
ENDLOOP.
說明選擇表是如何用選擇屏幕中的用戶輸入填充的
給選擇標(biāo)準(zhǔn)分配缺省值
SELECT-OPTIONS<seltab> FOR<f> DEFAULT<g> [TO<h>] ....
系統(tǒng)在時(shí)間事件initialization之前把缺省值傳給選擇標(biāo)準(zhǔn),
只設(shè)置low字段使用…default<g>
如果設(shè)置low和high字段 增加to
…DEFAULT<g> TO<h>.
把選擇表限制在一行
要把用戶對(duì)選擇表的訪問限制在第 一行,請(qǐng)使 用 SELECT-OPTIONS語句的 NO-EXTENSION.
如果指定該選項(xiàng),則選擇屏幕上不出現(xiàn)右箭頭,并且用戶不能訪問復(fù)雜選擇窗口,
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO-EXTENSION.
?
要將選擇屏 幕上選擇標(biāo) 準(zhǔn)的外觀限 制為單值選 擇,請(qǐng)使用SELECT-OPTIONS 語句的 NO INTERVALS
SELECT-OPTIONS<seltab> FOR<f> ..... NO INTERVALS .....
如果指定該 選項(xiàng),則“ 到”字段不 出現(xiàn)在選擇 屏幕上。選擇屏幕上的輸入將限制 為單值選擇
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO INTERVALS.
?
用戶只能直 接輸入單值 選擇,但是 ,用戶通過 單擊屏幕右邊的箭頭可以輸入進(jìn)一 步選擇。
如果增加 NO-EXTENSION 選項(xiàng),如下 所示:
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO INTERVALS
???????????????????????????????????????NO-EXTENSION.
避免將選擇標(biāo)準(zhǔn)傳遞到邏輯性數(shù)據(jù)庫
?
如果邏輯數(shù)據(jù)庫被連接到報(bào)表程序,就能把選擇標(biāo)準(zhǔn)連接到作為邏輯數(shù)據(jù)庫一部分的數(shù)據(jù)庫表.如果數(shù)據(jù)庫表允許動(dòng)態(tài)選擇,則系統(tǒng)將相應(yīng)的選擇標(biāo)準(zhǔn)傳遞到邏輯數(shù)據(jù)庫
當(dāng)將選擇標(biāo)準(zhǔn)用于其它目的而不是限制數(shù)據(jù)庫訪問時(shí),使用SELECT-OPTIONS 語句的 NO DATABASE SELECTION選項(xiàng),
邏輯數(shù)據(jù)庫 F1S 被連接到下 列報(bào)表程序 。數(shù)據(jù)庫表 SPFLI 的列CONNID 具有動(dòng)態(tài)選 擇
SELECT-OPTIONS<seltab> FOR<f> ..... NO DATABASE SELECTION.....
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS CONN FOR SPFLI-CONNID NODATABASE SELECTION.
GET SPFLI.
?? IFSPFLI-CONNID IN CONN.
????WRITE: SPFLI-CARRID, SPFLI-CONNID, 'meets criterion'.
??ELSE.
????WRITE: SPFLI-CARRID, SPFLI-CONNID,
????????????????????????'does not meet criterion'.
??ENDIF.
選擇屏幕的 第一部分在 邏輯數(shù)據(jù)庫 中定義。最 后一行 (CONN)在報(bào)表程序 中定義。
?
選擇標(biāo)準(zhǔn)的其它選項(xiàng)
?
有很多選項(xiàng) 可以和 SELECT-OPTIONS 語句一起使 用
? ?要在選擇 屏幕上禁止 顯示選擇標(biāo) 準(zhǔn),請(qǐng)使用
???SELECT-OPTIONS <seltab> FOR<f> ... NO-DISPLAY ..............
? ?要使選擇 標(biāo)準(zhǔn)能夠接 受大寫和小 寫字母,請(qǐng) 使用
???SELECT-OPTIONS <seltab> FOR<f> ... LOWER CASE ..............
? ?要進(jìn)行選 擇屏幕上的 “到”字段 所必需的選 擇,請(qǐng)使用
???SELECT-OPTIONS <seltab> FOR<f> ... OBLIGATORY ..............
? ?要為“到 ”字段從 SAP 內(nèi)存中使用 缺省值,請(qǐng) 使用
???SELECT-OPTIONS <seltab> FOR<f> ... MEMORY ID<pid>..........
? ?要將選擇 標(biāo)準(zhǔn)的字段 分配給修改 組,請(qǐng)使用
???SELECT-OPTIONS <seltab> FOR<f> ... MODIF ID<key>...........
? ?要將匹配 碼對(duì)象分配 給選擇標(biāo)準(zhǔn) 的“從”和 “到”字段 ,請(qǐng)使用
???SELECT-OPTIONS <seltab> FOR<f> ... MATCHCODE OBJECT<obj>...
?
?
使用報(bào)表的選擇屏幕
?
可以使用選 擇表中輸入 的選擇標(biāo)準(zhǔn) ,以便在報(bào) 表程序中完成三個(gè)不同的任務(wù):
在 WHERE 子句中使用 選擇表
? 要限制開放式SQL語句selectupdate和delete的數(shù)據(jù)庫訪問,使用where子句
要在where條件中使用選擇表,
......... WHERE<f> IN<seltab>.
<f>是數(shù)據(jù)庫字段的不帶前綴的名稱,而<seltab>是與該字段相連接的選擇表,如果你用開放式sql語句,使用where條件,則系統(tǒng)只訪問指定數(shù)據(jù)庫的某些行,
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FORSPFLI-CARRID.
SELECT * FROM SPFLI WHERE CARRID INAIRLINE.
??WRITE SPFLI-CARRID.
ENDSELECT.
?
在邏輯表達(dá)式中使用選擇表
?
要控制程序的內(nèi)部流程,必須用邏輯表達(dá)式編寫條件,可以用選擇表檔
標(biāo)準(zhǔn),
語法
... <f>IN <seltab> ....
示例:
在select循環(huán)中,所有的行都從數(shù)據(jù)庫表spfli中讀取,使用if語句,程序流程會(huì)被子分支成兩個(gè)流程塊,
REPORT SAPMZTST.
TABLES SPFLI.
SELECT-OPTIONS: S_CARRID FORSPFLI-CARRID,
???????????????S_CITYFR FOR SPFLI-CITYFROM,
???????????????S_CITYTO FOR SPFLI-CITYTO,
???????????????S_CONNID FOR SPFLI-CONNID.
SELECT * FROM SPFLI.
??CHECK: S_CARRID,
?????????S_CITYFR,
?????????S_CITYTO,
?????????S_CONNID.
??WRITE: / SPFLI-CARRID, SPFLI-CONNID,
?????????SPFLI-CITYFROM, SPFLI-CITYTO.
ENDSELECT.
?
在 SELECT 循環(huán)中,系 統(tǒng)從數(shù)據(jù)庫 表 SPFLI中讀取所有的行。在這些行中,系 統(tǒng)只把滿足 選擇表中的 條件的行寫 到輸出屏幕 。否則,CHECK 語句之后, 系統(tǒng)將離開循環(huán)傳遞。CHECK 語句使用了 邏輯表達(dá)式 的短格式。 長格式是:
CHECK: SPFLI-CARRID IN S_CARRID,
??????SPFLI-CITYFR IN S_CITYFR,
??????SPFLI-CITYTO IN S_CITYTO,
??????SPFLI-CONNID IN S_CONNID.
在 GET 事件中與 CHECK 語句一起使 用選擇表
可以使用 CHECK語句離開,循環(huán),子程序,處理塊,該變體只能在讀出一條語句之后使用,
要檢查該行 的內(nèi)容是否 滿足所有與 該數(shù)據(jù)庫相 連接的選擇表中存儲(chǔ)的選擇標(biāo)準(zhǔn), 請(qǐng)使用 CHECK 語句
語法
CHECK SELECT-OPTIONS.
使用該語句 ,可以通過 所有選擇表 檢查實(shí)際數(shù) 據(jù)庫表(由 GET給出地址)的內(nèi)容,數(shù) 據(jù)庫表通過使用不同的 SELECT-OPTIONS 語句連接到 選擇表。CHECK 語句的該變體
邏輯數(shù)據(jù)庫 F1S 與下列報(bào)表 相連接:
REPORT SAPMZTST.
TABLES: SPFLI,SFLIGHT.
SELECT-OPTIONS:MAX??? FORSFLIGHT-SEATSMAX,
???????????????OCC??? FORSFLIGHT-SEATSOCC.
GET SFLIGHT.
??WRITE: / SPFLI-CARRID, SPFLI-CONNID.
??CHECK SELECT-OPTIONS.
??WRITE: SFLIGHT-SEATSMAX, SFLIGHT-SEATSOCC.
總結(jié)
- 上一篇: 如何把选择屏幕放到标准屏幕上
- 下一篇: SD从零开始16 促销计划(Agreem