寫程序定義選擇界面參數時,離不開parameters和select-options,今天我們就來聊一聊使用select-options時的一些限定情況。
現有case如下,一個計划錄入的程序,在顯示計划選項下,需指定一天或者一段時間來展示對應的計划數據,也就是說只允許輸入單值或者區間

我們第一印象是不是想在定義select-options時增加NO-EXTENSION來減少上圖的多輸入選項?

那這樣就能滿足只能輸入單值或者區間了嗎?然並卵,並不是這樣的,當我們在low值里雙擊時,即可指定跟多輸入按鈕一樣的選項

從上圖我們可以看出,既有選擇選項(SIGN為I),也有選擇中排除選項(SIGN為E),總結起來,大概就是下圖中這些選項(本例日期類型,所以下圖中某些選項屬性本身是沒有的)

那么,是不是意味着,我需要哪些選項,我就啟用哪些選項呢,yes,在這里給你一個大大的贊,確實是這樣的。
本例中只需要單值和區間,也就是說,只需要EQ和BT,並且Sign為I,代碼示例如下:
DATA: ls_restrict TYPE sscr_restrict,
ls_optlist TYPE sscr_opt_list,
ls_ass TYPE sscr_ass.
ls_optlist-name = 'OBJECTKEY'.
ls_optlist-options-eq = abap_true. " 單值
ls_optlist-options-bt = abap_true. " 區間
APPEND ls_optlist TO ls_restrict-opt_list_tab.
ls_ass-kind = 'S'.
ls_ass-name = 'S_PERID'. " 選擇字段
ls_ass-sg_main = 'I'. " Sign
ls_ass-sg_addy = space.
ls_ass-op_main = 'OBJECTKEY'.
APPEND ls_ass TO ls_restrict-ass_tab.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction = ls_restrict
EXCEPTIONS
too_late = 1
repeated = 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign = 5
empty_option_list = 6
invalid_kind = 7
repeated_kind_a = 8
OTHERS = 9.
