ABAP学习(3):屏幕显示
ABAP屏幕显示
1write语句
Write关键词,‘/’控制输出换行
语法:write [/] <输出内容>
语法:write at [/<数字>[(数字)]] <输出内容>
示例:
DATA testTxt TYPE String value 'hello world!'. WRITE at / testTxt."换行 WRITE at /5 testTxt."从第5列开始输出 WRITE at /(10) testTxt."只显示10位字符 WRITE at /5(15) testTxt."从第5列开始显示15位字符 WRITE:/'****************************'. "write <obj> <format> 按照固定格式显示 WRITE / testTxt LEFT-JUSTIFIED. "靠左显示 WRITE / testTxt RIGHT-JUSTIFIED. "靠右显示 WRITE / testTxt CENTERED. "居中显示 WRITE / testTxt NO-GAP. "无空格显示 DATA testTime type String value '1234311111'. WRITE / testTime USING EDIT MASK '__:__:__'. "使用固定格式显示 Data testData type String value '00000134'. WRITE / testData no-ZERO."不输出前面0, no-sign 不输出正负号 DATA testData1 type F value '3.44444'. WRITE / testData1 DECIMALS 3 . "显示小数点后位数 DATA testData2 type F value '3.44564'. WRITE / testData2 ROUND 3. "四舍五入小数位数 "write as checkbox WRITE:/'****************************'. DATA: FLAG1 VALUE '', FLAG2 VALUE 'X'. WRITE: / 'CHECK FLAG 1:' , FLAG1 AS CHECKBOX. WRITE: / 'CHECK FLAG 2:' , FLAG2 AS CHECKBOX. "write as sinbol Icon INCLUDE <SYMBOL>. INCLUDE <ICON>. WRITE: / 'Phone Symbol:' , SYM_PHONE AS SYMBOL. WRITE: / 'Alarm Icon:' , ICON_ALARM AS ICON. "Skip产生空白列 WRITE:/'****************************'. SKIP. "产生空白列. DATA:temp LIKE TABLE OF spfli WITH HEADER LINE. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE temp WHERE CARRID = 'AA'. WRITE:/1(5)'id',(4) '国家',(18) '出发城市',(18) '目标城市'. LOOP AT temp. WRITE:/1(5) temp-connid,(4) temp-countryfr,(18) temp-cityfrom,(18) temp-cityto. ENDLOOP.
2屏幕元素
语法:
输入框:
Parameters: <变量名> type <数据类型>
[default <值>]
[lower case]
[OBLIGATORY]
多选按钮:
Parameters:<变量名> as checkbox [default ‘X’].
设置是否选中
单选按钮:
Parameters:<变量名> radiobutton group <组名>
范围输入框:
Select-options <变量名> for <数据类型>
[NO DATABASE SELECTION]
[NO-EXTENSION]
[NO INTERVALS]
No database selection:如果数据类型是数据库表,不用根据表现有内容选择值;
No-extension: 范围选择框,不显示multi-option画面,
No intervals:只显示一个输入框,不显示范围输入。
单选按钮组:
Selection-screen begin of block <按钮组名> with frame.
Parameter <按钮名> radiobutton group <组名>.
…………
Selection-screen end of block <按钮组名>.
示例1:
"*************************************************** *PARAMETERS, 一些输入框,button,radioButton *************************************************** PARAMETERS: NAME(8) TYPE C DEFAULT 'lily',"设置默认值 addr(10) type C LOWER CASE,"将输入转换成小写,默认输入转换成大写 AGE TYPE I, BIRTH TYPE D OBLIGATORY , "设置强制输入 dog as CHECKBOX DEFAULT 'x',"多选按钮 cat as CHECKBOX . PARAMETERS: boy RADIOBUTTON GROUP sex,"单选按钮 girl RADIOBUTTON GROUP sex. TABLES SPFLI. SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID."范围选择框 SELECT-OPTIONS AIRLINE1 FOR SPFLI-CONNID NO-EXTENSION."范围选择框,不显示multi-option画面 SELECT-OPTIONS AIRLINE2 FOR SPFLI-CONNID NO INTERVALS."范围选择框,不显示区间画面 SELECTION-SCREEN SKIP 1. "产生两个空白列 SELECTION-SCREEN ULINE 20(30). "产生底线,位置(长度) "选择屏幕 SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME . PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO.
示例2:
*选择屏幕pushbutton SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text-001. "带边框和标题 "显示在一行 SELECTION-SCREEN BEGIN OF LINE. "user-command,绑定命令,使用sy-ucomm可以获取到 "pushbutton 位置(长度),指定按钮出现位置和长度 SELECTION-SCREEN PUSHBUTTON 1(20) but1 USER-COMMAND bt1. SELECTION-SCREEN PUSHBUTTON 23(20) but2 USER-COMMAND bt2. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK main. "选择屏幕,不带标题 SELECTION-SCREEN BEGIN OF BLOCK main1 WITH FRAME . "只带边框 SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON 1(20) but3 USER-COMMAND bt3. SELECTION-SCREEN PUSHBUTTON 22(20) but4 USER-COMMAND bt4. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK main1. INITIALIZATION. * t1 = '输入栏名称'. "but1 = '按键'. CALL FUNCTION 'ICON_CREATE' "给按钮添加图标和文本 EXPORTING name = icon_check "按钮的图片的名字 text = 'button1 按钮1' "按钮的文本 info = '按钮1' IMPORTING result = but1 EXCEPTIONS OTHERS = 0. CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本 EXPORTING name = icon_execute_object " 按钮的图片的名字 text = 'button2 按钮2' "按钮的文本 info = '按钮2' IMPORTING result = but2 EXCEPTIONS OTHERS = 0. CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本 EXPORTING name = icon_execute_object " 按钮的图片的名字 text = 'button3 按钮3' "按钮的文本 info = '按钮3' IMPORTING result = but3 EXCEPTIONS OTHERS = 0. CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本 EXPORTING name = icon_execute_object " 按钮的图片的名字 text = 'button4 按钮4' "按钮的文本 info = '按钮4' IMPORTING result = but4 EXCEPTIONS OTHERS = 0. AT SELECTION-SCREEN. CASE sy-ucomm. WHEN 'BT1'. MESSAGE '您单击了自定义按钮' TYPE 'S'. WHEN 'BT2'. MESSAGE '您单击了自定义按钮2' TYPE 'S'. ENDCASE.
3屏幕弹窗
示例:
********************************************************定义弹窗 "screen 定义窗体 SELECTION-SCREEN BEGIN OF SCREEN 200 as window. PARAMETERS:s_name(10) TYPE C. PARAMETERS:type as CHECKBOX. SELECTION-SCREEN END OF SCREEN 200 . "设置弹窗位置 call SCREEN 200 STARTING AT 50 2 ENDING AT 100 2. "调用screen ,第一个横坐标,第二个纵坐标 "不设置默认include window 显示 call SCREEN 100.
4子屏幕
示例:
"用于screen painter 创建屏幕 SELECTION-SCREEN BEGIN OF SCREEN 300 as SUBSCREEN. PARAMETERS:s_name1(10) TYPE C. PARAMETERS:type1 as CHECKBOX. SELECTION-SCREEN END OF SCREEN 300.
5block和screen
示例:
"*******************************************************block *该语法在屏幕中定义一个BLOCK,其扩展语法包括: *WITH FRAME:创建一个框架。 *TITLE title:创建一个带标题的框架。 *NO INTERVALS:所创建的框架中限制SELECT 只有一个输入项。 SELECTION-SCREEN BEGIN OF BLOCK blk1. PARAMETERS:s_name2(10) TYPE C. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF SCREEN 401. SELECTION-SCREEN BEGIN OF BLOCK blk3 . SELECTION-SCREEN BEGIN OF LINE. "同一行显示 SELECTION-SCREEN POSITION 50. "空格 PARAMETERS:s_name4(10) TYPE C. PARAMETERS:s_name5(10) TYPE C. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK blk3. SELECTION-SCREEN END OF SCREEN 401. SELECTION-SCREEN BEGIN OF SCREEN 400. "block可以在screen内 SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-001 NO INTERVALS. PARAMETERS:s_name3(10) TYPE C. SELECT-OPTIONS s_type FOR SY-REPID. SELECTION-SCREEN ULINE. "换行线 SELECTION-SCREEN SKIP 2. "产生空行 SELECTION-SCREEN END OF BLOCK blk2. SELECT-OPTIONS s_type1 FOR SY-REPID. "include blk,调用其他屏幕定义的block SELECTION-SCREEN INCLUDE BLOCKS blk3. SELECTION-SCREEN END OF SCREEN 400. "调用屏幕 CALL SCREEN 400.
6图示和pushbutton
"**********************************************pushbutton 按钮 INCLUDE <ICON>. "图示 “TCODE”:ICON 查看图示 SELECTION-SCREEN PUSHBUTTON /1(20) btn1 USER-COMMAND btn. SELECTION-SCREEN PUSHBUTTON /1(20) btn2 USER-COMMAND btn. AT SELECTION-SCREEN OUTPUT. MOVE 'my btn1' TO btn1. "为按钮1 赋值添加描述 WRITE ICON_GRAPHICS AS ICON TO btn2. "添加图示 CONCATENATE btn2 'my btn2' INTO btn2 SEPARATED BY SPACE. "按钮2赋值,并连接图示,空格连接
7组件文本显示
"*****************************************selection-screen comment 重设本地元素注释 "必须是在同一line SELECTION-SCREEN BEGIN OF LINE. "文本显示 SELECTION-SCREEN COMMENT (40) text-002 FOR FIELD p1. SELECTION-SCREEN POSITION 45. PARAMETERS p1(10) TYPE C. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS:TYPE AS CHECKBOX. "文本显示 SELECTION-SCREEN COMMENT (40) text-003 FOR FIELD TYPE. SELECTION-SCREEN END OF LINE.
8自定义菜单
示例1:
"******************************************SELECTION-SCREEN FUNCTION KEY n. "用于在工具栏上新增一个功能按钮。该按钮的定义保存在系统结构体SSCRFIELDS中, "n为一个整数的序数,例如当n等于1时,其按钮描述保存在字段SSCRFIELDS-FUNCTXT_01中, "其按钮对象命名为“FC01",保存在字段SSCRFIELDS-UCOMM中。 " * TABLES SSCRFIELDS. SELECTION-SCREEN FUNCTION KEY 1. SELECTION-SCREEN FUNCTION KEY 2. PARAMETERS:s_name(10) TYPE C. INITIALIZATION. MOVE 'BUTTON1' TO SSCRFIELDS-FUNCTXT_01. MOVE 'BUTTON2' TO SSCRFIELDS-FUNCTXT_02. AT SELECTION-SCREEN. if SSCRFIELDS-UCOMM = 'FC01'. MESSAGE i000 WITH 'press button1'. ELSEIF SSCRFIELDS-UCOMM = 'FC02'. MESSAGE i000 WITH 'press button2'. ENDIF.
示例2:
"**********************工具栏菜单,通过菜单制作器 TYPE-POOLS ICON. TABLES SSCRFIELDS. DATA FUNCTXT TYPE SMP_DYNTXT."SMP_DYNTXT(菜单制作器:动态文本的程序接口) PARAMETERS: P_CARRID TYPE S_CARR_ID, P_CITYFR TYPE S_FROM_CIT. SELECTION-SCREEN: FUNCTION KEY 1, FUNCTION KEY 2. INITIALIZATION. "屏幕初始化 FUNCTXT-ICON_ID = ICON_WS_PLANE."文本字段中的图标(替换显示,别名) FUNCTXT-QUICKINFO = 'Preselected Carrier'."菜单制作器:信息文本 (4.0),鼠标移去过去显示的信息TIP FUNCTXT-ICON_TEXT = 'LH'."菜单制作器:图标文本 (4.0),菜单名称 SSCRFIELDS-FUNCTXT_01 = FUNCTXT. FUNCTXT-ICON_TEXT = 'UA'. SSCRFIELDS-FUNCTXT_02 = FUNCTXT. AT SELECTION-SCREEN. CASE SSCRFIELDS-UCOMM. WHEN 'FC01'. P_CARRID = 'LH'. P_CITYFR = 'Frankfurt'. WHEN 'FC02'. P_CARRID = 'UA'. P_CITYFR = 'Chicago'. ENDCASE.
9卷标子屏幕
示例:
"*********************************************tab 标签分页 "用于在屏幕上定义一个分页控件(tab),每个页签都是由一个子屏幕控制,n代表分页控件的高度, "屏幕加载时必须先通过INTIALIZATION事件初始化 SELECTION-SCREEN BEGIN OF SCREEN 100 as SUBSCREEN . SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME. PARAMETERS:s_name(10) TYPE C. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN END OF SCREEN 100. SELECTION-SCREEN BEGIN OF SCREEN 200 as SUBSCREEN. PARAMETERS:s_name1(10) TYPE C. SELECTION-SCREEN END OF SCREEN 200. *定义一个TAB空间,取名为MYTAB,控件高为5,共人两个选项卡BUTTON1\BUTTON2 *两个选项卡的功能代码分别为btn1\btn2 SELECTION-SCREEN:BEGIN OF TABBED BLOCK MYTAB FOR 5 LINES, "指框框高度为5LINES. TAB (20) BUTTON1 USER-COMMAND btn1, TAB (20) BUTTON2 USER-COMMAND btn2, END OF BLOCK MYTAB. INITIALIZATION. BUTTON1 = TEXT-010. BUTTON2 = TEXT-020. MYTAB-PROG = SY-REPID. MYTAB-DYNNR = 100. AT SELECTION-SCREEN. CASE SY-UCOMM. WHEN 'BTN1'. MYTAB-DYNNR = 100. MYTAB-ACTIVETAB = 'BUTTON1'. WHEN 'BTN2'. MYTAB-DYNNR = 200. MYTAB-ACTIVETAB = 'BUTTON2'. ENDCASE.
10页签子屏幕
示例:
TABLES SSCRFIELDS. * 定义子屏幕为100 SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-010. PARAMETERS: P1(10) TYPE C, P2(10) TYPE C, P3(10) TYPE C. SELECTION-SCREEN END OF BLOCK B1. SELECTION-SCREEN END OF SCREEN 100. * 定义子屏幕为200 SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-020. PARAMETERS: Q1(10) TYPE C, Q2(10) TYPE C, Q3(10) TYPE C. SELECTION-SCREEN END OF BLOCK B2. SELECTION-SCREEN END OF SCREEN 200. *定义子屏幕为300 SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-030. PARAMETERS: R1(10) TYPE C, R2(10) TYPE C, R3(10) TYPE C. SELECTION-SCREEN END OF BLOCK B3. SELECTION-SCREEN END OF SCREEN 300. * STANDARD SELECTION SCREEN SELECTION-SCREEN: FUNCTION KEY 1, "工具栏按钮 FUNCTION KEY 2. SELECTION-SCREEN: BEGIN OF TABBED BLOCK SUB FOR 10 LINES, END OF BLOCK SUB. INITIALIZATION. SSCRFIELDS-FUNCTXT_01 = '@0D@'. "按钮描述字段,图标形貌 SSCRFIELDS-FUNCTXT_02 = '@0E@'. "按钮描述字段,图标形貌 SUB-PROG = SY-REPID. "必选项 SUB-DYNNR = 100. AT SELECTION-SCREEN. CASE SY-DYNNR. "当前显示屏幕的名称 WHEN 100. IF SSCRFIELDS-UCOMM = 'FC01'. "触发事件的TOOL BAR CONTROL SUB-DYNNR = 300. "指定显示哪个屏幕 ELSEIF SSCRFIELDS-UCOMM = 'FC02'. SUB-DYNNR = 200. ENDIF. WHEN 200. IF SSCRFIELDS-UCOMM = 'FC01'. SUB-DYNNR = 100. ELSEIF SSCRFIELDS-UCOMM = 'FC02'. SUB-DYNNR = 300. ENDIF. WHEN 300. IF SSCRFIELDS-UCOMM = 'FC01'. SUB-DYNNR = 200. ELSEIF SSCRFIELDS-UCOMM = 'FC02'. SUB-DYNNR = 100. ENDIF. ENDCASE.
11动态屏幕
示例:
TABLES:aufk,afvv. SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-002. PARAMETERS: p1 RADIOBUTTON GROUP g1 USER-COMMAND uc DEFAULT 'X', p2 RADIOBUTTON GROUP g1 . PARAMETERS: p_chk AS CHECKBOX USER-COMMAND uc1. SELECTION-SCREEN END OF BLOCK bl1. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001. SELECT-OPTIONS:s_date FOR afvv-fssld MODIF ID ty1. SELECT-OPTIONS:s_name FOR aufk-werks MODIF ID ty1. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-003. PARAMETERS:p_werks LIKE aufk-werks MODIF ID ty2. SELECT-OPTIONS:s_aufnr FOR aufk-aufnr MODIF ID ty2. SELECTION-SCREEN END OF BLOCK blk2. AT SELECTION-SCREEN OUTPUT. PERFORM f_screen_control_show. PERFORM f_screen_control_obli. PERFORM f_screen_control_output. AT SELECTION-SCREEN. PERFORM f_chk_obli. START-OF-SELECTION. WRITE:/ 'screen'. "Screen结构参数 FORM f_screen_control_parm. LOOP AT SCREEN. WRITE:/ 'name',screen-name. WRITE:/ 'group1',screen-group1. WRITE:/ 'group2',screen-group2. WRITE:/ 'group3',screen-group3. WRITE:/ 'group4',screen-group4. WRITE:/ 'required',screen-required. "显示是否必输 WRITE:/ 'input',screen-input. "控制是否只读 WRITE:/ 'output',screen-output. WRITE:/ 'itensified',screen-intensified. WRITE:/ 'invisible',screen-invisible. WRITE:/ 'length',screen-length. WRITE:/ 'active',screen-active. "控制是否显示 WRITE:/ 'display_3d',screen-display_3d. WRITE:/ 'value_helo',screen-value_help. WRITE:/ 'request',screen-request. WRITE:/ 'values_in_combo',screen-values_in_combo. WRITE:/ 'color',screen-color. ENDLOOP. ENDFORM. "Screen元素是否显示 FORM f_screen_control_show. LOOP AT SCREEN. if p1 = 'X' AND screen-group1 = 'TY2' . "screen-active值为0:隐藏;为1:显示 screen-active = '0'. ELSEif p2 = 'X' AND screen-group1 = 'TY1'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. "Screen元素是否显示必输标志 FORM f_screen_control_obli. "动态设置字段必输 LOOP AT SCREEN. "这里设置modif id 为TY1为必输,只是有必输标志,真正控制需要其他代码检查 IF p1 = 'X' AND screen-group1 = 'TY1'. "必输,screen-required = '2',必输标志 screen-required = '2'. ENDIF. IF p2 = 'X' AND screen-group1 = 'TY2'. "必输,screen-required = '2',必输标志 screen-required = '2'. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. "Screen元素是否可输入 FORM f_screen_control_output. "动态设置字段是否可输入 LOOP AT SCREEN. IF p_chk = 'X' AND screen-group1 = 'TY1'. "input=0,X不可输入;input=1可以输入 screen-input = '0'. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. "检查必输字段 FORM f_chk_obli. "这里真正控制字段必输 IF p1 = 'X' AND s_date IS INITIAL. MESSAGE s000 WITH 'Please fill all required fields'. STOP. ENDIF. IF p2 = 'X' AND ( p_werks IS INITIAL OR s_aufnr IS INITIAL ). MESSAGE s000 WITH 'Please fill all required fields'. STOP. ENDIF. ENDFORM.
12弹出框
调用function,‘POPUP_WITH_TABLE_DISPLAY_OK’显示弹窗。
示例:
DATA :BEGIN OF itab OCCURS 0, name(100) type c, END OF itab. itab-name = 'tang'. APPEND itab. itab-name = 'tang'. APPEND itab. call FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK' EXPORTING endpos_col = 80 endpos_row = 8 startpos_col = 40 startpos_row = 1 titletext = 'test pop' TABLES valuetab = itab.
参数endpos_col、endpos_row、startpos_col、startpos_row指定弹窗在主屏幕中显示位置。
调用funtion ’POPUP_TO_CONFIRM’显示一个确认弹窗。
示例:
DATA:answer(10) type c. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING TITLEBAR = '确认弹窗' * DIAGNOSE_OBJECT = ' ' TEXT_QUESTION = '请确认' * DEFAULT_BUTTON = '1' DISPLAY_CANCEL_BUTTON = '' * USERDEFINED_F1_HELP = ' ' * START_COLUMN = 25 * START_ROW = 6 * POPUP_TYPE = * IV_QUICKINFO_BUTTON_1 = ' ' * IV_QUICKINFO_BUTTON_2 = ' ' IMPORTING ANSWER = answer * TABLES * PARAMETER = * EXCEPTIONS * TEXT_NOT_FOUND = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here else. WRITE:answer. "选择yes 返回1 ; 选择no 返回2; 选择cancel 返回A ENDIF.
调用function,‘POPUP_TO_DECIDE_LIST’显示一个带单选选择列表的弹窗。
示例:
DATA: t_spopli like spopli OCCURS 0 WITH HEADER LINE. DATA: answer(10) type c. t_spopli-selflag = 'X'. "默认选中选项 t_spopli-varoption = 'hello world'. t_spopli-inactive = 'X'. "是否可用 APPEND t_spopli to t_spopli. t_spopli-selflag = 'X'. t_spopli-varoption = 'world'. t_spopli-inactive = ' '. APPEND t_spopli to t_spopli. t_spopli-selflag = ' '. t_spopli-varoption = 'hello'. t_spopli-inactive = ' '. APPEND t_spopli to t_spopli. CALL FUNCTION 'POPUP_TO_DECIDE_LIST' EXPORTING CURSORLINE = 2 * MARK_FLAG = ' ' * MARK_MAX = 1 * START_COL = 0 * START_ROW = 0 TEXTLINE1 = '请选择' * TEXTLINE2 = ' ' * TEXTLINE3 = ' ' TITEL = '选择弹窗' * DISPLAY_ONLY = ' ' IMPORTING ANSWER = answer TABLES T_SPOPLI = t_spopli * EXCEPTIONS * NOT_ENOUGH_ANSWERS = 1 * TOO_MUCH_ANSWERS = 2 * TOO_MUCH_MARKS = 3 * OTHERS = 4 . IF SY-SUBRC <> 0. * Implement suitable error handling here ELSE. WRITE:answer. "反馈选中的选项数 ENDIF.
调用function,‘FILENAME_GET’显示一个输入栏,返回输入内容弹窗。
示例:
"弹出弹窗获取用户输入文件路径 DATA:filename type SDOK_FILNM. CALL FUNCTION 'FILENAME_GET' EXPORTING IV_FILENAME = 'D:\record\test.txt' "默认文件路径 TITLE = '选择文件' IMPORTING EV_FILENAME = filename. WRITE:filename.
调用function,‘POPUP_TO_SELECT_MONTH’显示一个日期选择弹窗。
DATA:select_month like ISELLIST-MONTH. DATA:return like sy-subrc. CALL FUNCTION 'POPUP_TO_SELECT_MONTH' EXPORTING ACTUAL_MONTH = 11 "默认选择月份 FACTORY_CALENDAR = 'CN' "选择年份范围由factory_calendar决定 HOLIDAY_CALENDAR = 'CN' * LANGUAGE = SY-LANGU * START_COLUMN = 8 * START_ROW = 5 IMPORTING SELECTED_MONTH = select_month RETURN_CODE = return * EXCEPTIONS * FACTORY_CALENDAR_NOT_FOUND = 1 * HOLIDAY_CALENDAR_NOT_FOUND = 2 * MONTH_NOT_FOUND = 3 * OTHERS = 4 . IF SY-SUBRC <> 0. * Implement suitable error handling here ELSE. WRITE:'选择了',select_month,'月'. ENDIF.
调用function,‘F4_DATE’显示日期选择弹窗。
DATA:date like WORKFLDS-GKDAY. DATA:week like SCAL-WEEK. DATA:week_begin like sy-datum. DATA:week_end like sy-datum. CALL FUNCTION 'F4_DATE' EXPORTING DATE_FOR_FIRST_MONTH = '20180901' "初始日期,可以不传 * DISPLAY = 'x' FACTORY_CALENDAR_ID = 'CN' * GREGORIAN_CALENDAR_FLAG = ' ' HOLIDAY_CALENDAR_ID = 'CN' * PROGNAME_FOR_FIRST_MONTH = ' ' * DATE_POSITION = 'x' IMPORTING SELECT_DATE = date * SELECT_WEEK = week * SELECT_WEEK_BEGIN = week_begin * SELECT_WEEK_END = week_end EXCEPTIONS CALENDAR_BUFFER_NOT_LOADABLE = 1 DATE_AFTER_RANGE = 2 DATE_BEFORE_RANGE = 3 DATE_INVALID = 4 FACTORY_CALENDAR_NOT_FOUND = 5 HOLIDAY_CALENDAR_NOT_FOUND = 6 PARAMETER_CONFLICT = 7 OTHERS = 8 . IF SY-SUBRC <> 0. * Implement suitable error handling here CASE sy-subrc. WHEN 1. WRITE:/'CALENDAR_BUFFER_NOT_LOADABLE'. WHEN 2. WRITE:/ 'DATE_AFTER_RANGE'. WHEN 3. WRITE:/ 'DATE_BEFORE_RANGE'. WHEN 4. WRITE:/ 'DATE_INVALID'. WHEN 5. WRITE:/ 'HOLIDAY_CALENDAR_ID_MISSING'. WHEN 6. WRITE:/ 'HOLIDAY_CALENDAR_NOT_FOUND'. WHEN 7. WRITE:/ 'PARAMETER_CONFLICT'. WHEN OTHERS. WRITE:/ 'other exception'. ENDCASE. ELSE. WRITE:/'date=',date,'week=',week,'week_begin',week_begin,'week_end',week_end. ENDIF.
13下拉选择框
实例1:
"****************************屏幕显示下拉选择框 DATA:lv_id TYPE vrm_id. DATA:t_list TYPE vrm_values. DATA:wa_value LIKE LINE OF t_list. "下拉选择框 PARAMETERS:s_box TYPE C AS LISTBOX VISIBLE LENGTH 20 DEFAULT '2'. "初始化 INITIALIZATION. PERFORM init_listbox. START-OF-SELECTION. PERFORM get_sel_value. "初始化多选框 FORM init_listbox. wa_value-key = '1'. wa_value-text = '选择1'. APPEND wa_value TO t_list. wa_value-key = '2'. wa_value-text = '选择2'. APPEND wa_value TO t_list. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING ID = 'S_BOX' VALUES = t_list EXCEPTIONS ID_ILLEGAL_NAME = 1 OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ENDFORM. "获取多选框值 FORM get_sel_value. "s_box值为key值 WRITE:/ s_box. ENDFORM.
14Search Help
示例1:
"************************************************ "search help "************************************************ DATA:gv_date TYPE datum. DATA:gv_carrid TYPE spfli-carrid. "自定义search help DATA:gv_field TYPE char10. DATA:gv_str TYPE string. TYPES:BEGIN OF s_carrname, carrname TYPE char20, END OF s_carrname. DATA:lt_carrname TYPE TABLE OF s_carrname. DATA:ls_carrname LIKE LINE OF lt_carrname. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME. "1日期类型,只要定义datum类型,触发search help PARAMETERS:p_date TYPE datum. SELECT-OPTIONS:s_date FOR gv_date. "2表类型,字段spfli-carrid,使用table定义search help:H_SCARR PARAMETERS:p_carr LIKE gv_carrid. SELECT-OPTIONS:s_carr FOR gv_carrid. "3自定义search help值,使用f4 help PARAMETERS:p_field LIKE gv_field. SELECT-OPTIONS:s_field FOR gv_field. "4使用f1,帮助文档 PARAMETERS:p_field1 LIKE gv_field. "5已有search help,f4 help PARAMETERS:p_field2 LIKE gv_field. SELECT-OPTIONS:s_field2 FOR gv_field. "6文件选择search help PARAMETERS:p_field3 LIKE gv_str. SELECTION-SCREEN END OF BLOCK blk1. "使用f4帮助 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field. PERFORM f_search_hlp_field USING 'CARRNAME' CHANGING p_field. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_field-low. PERFORM f_search_hlp_field USING 'CARRNAME' CHANGING s_field-low. "使用f1帮助 AT SELECTION-SCREEN ON HELP-REQUEST FOR p_field1. PERFORM f_search_hlp_field1. "使用f4帮助 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field2. PERFORM f_search_hlp_field2 CHANGING p_field2. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_field2-low. PERFORM f_search_hlp_field2 CHANGING s_field2-low. "使用f4帮助 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field3. PERFORM f_search_hlp_field3 CHANGING p_field3. START-OF-SELECTION. "使用f4,返回table FORM f_search_hlp_field USING iv_retfield CHANGING ev_field. DATA:lv_retfield TYPE dfies-fieldname VALUE 'CARRNAME'. DATA:lv_dynprofield TYPE help_info-dynprofld. DATA:lt_return TYPE TABLE OF ddshretval. DATA:ls_return LIKE LINE OF lt_return. "获取search help,carrname值表 SELECT carrname INTO TABLE lt_carrname FROM scarr. SORT lt_carrname. DELETE ADJACENT DUPLICATES FROM lt_carrname. "调用search help CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = iv_retfield "返回字段 dynpprog = sy-repid dynpnr = sy-dynnr value_org = 'S' TABLES value_tab = lt_carrname "search help显示值list return_tab = lt_return "返回选择值table . IF sy-subrc <> 0. MESSAGE 'Search help failed!' TYPE 'E'. ELSE. READ TABLE lt_return INTO ls_return INDEX 1. ev_field = ls_return-fieldval. ENDIF. ENDFORM. "f1 help,说明文档 FORM f_search_hlp_field1. DATA:lt_links TYPE TABLE OF tline. DATA:ls_links LIKE LINE OF lt_links. "方式1: CALL FUNCTION 'HELP_OBJECT_SHOW' EXPORTING dokclass = 'DE' dokname = 'SYDATUM' TABLES links = lt_links. * "方式2: * CALL FUNCTION 'HELP_OBJECT_SHOW_FOR_FIELD' * EXPORTING * called_for_tab = 'SCARR' * called_for_field = 'CARRNAME'. ENDFORM. "使用f4帮助 FORM f_search_hlp_field2 CHANGING iv_field. DATA:lv_reset TYPE char1. DATA:lt_return TYPE TABLE OF ddshretval. DATA:ls_return LIKE LINE OF lt_return. "通过使用已有table字段的search help CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = 'SCARR' fieldname = 'CARRID' IMPORTING user_reset = lv_reset TABLES return_tab = lt_return. IF sy-subrc = 0. READ TABLE lt_return INTO ls_return INDEX 1. iv_field = ls_return-fieldval. ENDIF. ENDFORM. "使用f4帮助,文件选择框 FORM f_search_hlp_field3 CHANGING iv_field. DATA:lv_file TYPE ibipparms-path. "调用F4_FILENAME,点击输入框后小方块弹出文件选择框 CALL FUNCTION 'F4_FILENAME' IMPORTING file_name = lv_file."返回文件名 IF sy-subrc = 0. iv_field = lv_file. ENDIF. ENDFORM.
本文来自博客园,作者:渔歌晚唱,转载请注明原文链接:https://www.cnblogs.com/tangToms/p/11642640.html