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