声明:本文仅代表原作者观点,仅用于ERP软件的应用与学习,不代表任何公司。在ABAP程序设计中为提示和交互的需要会经常用到弹窗, 所谓弹窗就是弹出一个框,告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等,它价值在于通过提示、提醒、警告,帮助用户顺利完成业务流程中的必要操作或给用户提供实时反馈的结果。它创建了一个带有“是”和“否”按钮的确认弹窗,并在用户作出选择后给出一个消息提示结果。DATA: lv_answer TYPE c. START-OF-SELECTION. " 创建弹窗 CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = '确认弹窗' text_question = '你确定要继续吗?' text_button_1 = '是' text_button_2 = '否' default_button = '2' display_cancel_button = abap_false IMPORTING answer = lv_answer EXCEPTIONS text_not_found = 1 OTHERS = 2.
" 处理用户的响应 IF sy-subrc = 0. IF lv_answer = '1'. " 用户点击了“是” WRITE: / '用户选择了是。' COLOR COL_GROUP. ELSE. " 用户点击了“否” WRITE: / '用户选择了否。' COLOR COL_NEGATIVE. ENDIF. ELSE. " 异常处理 WRITE: / '弹窗创建失败。' COLOR COL_NEGATIVE. ENDIF. titlebar参数设置弹窗的标题,text_question设置弹窗的问题文本,text_button_1和text_button_2定义按钮的标签,default_button设置默认选中的按钮,而display_cancel_button决定是否显示取消按钮。函数执行后,answer变量将包含用户的选择('1'表示按钮1,'2'表示按钮2)。根据用户的选择,系统给出相应的消息提示。2.POPUP_GET_VALUES(输入参数式弹窗)这种弹窗允许用户输入一组值,这通常用于收集用户的输入,如参数或过滤条件等。DATA: lt_values TYPE TABLE OF sval, wa_values LIKE LINE OF lt_values. DATA: return_code TYPE string .
"物料号 CLEAR wa_values. wa_values-tabname = 'MARA' . "物料主数据的表名 wa_values-fieldname = 'MATNR' . "物料号 wa_values-field_obl = 'X' . "是否为必填 APPEND wa_values TO lt_values.
"物料组 CLEAR wa_values. wa_values-tabname = 'MARA' . ""物料主数据的表名 wa_values-fieldname = 'MATKL' . "物料组 wa_values-field_obl = 'X' . "是否为必填 APPEND wa_values TO lt_values.
CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING * NO_VALUE_CHECK = ' ' popup_title = '请输入参数' * START_COLUMN = '5' * START_ROW = '5' IMPORTING returncode = return_code TABLES fields = lt_values EXCEPTIONS error_in_fields = 1 OTHERS = 2.
IF sy-subrc = 0. LOOP AT lt_values INTO wa_values. WRITE:/ wa_values-fieldname, wa_values-value. ENDLOOP. ENDIF. start_column/start_row :是弹窗位置fields :表中存储要和用户交互的字段,要求字段名称必须是参考表中的数据,会自动带出搜索帮助。注意:sval 是一个结构,包含字段 tabname (参考表),fieldname (字段名称),value (默认值)等。 函数执行后,我们可以检查返回码和用户输入的值,然后进行相应的处理。 上面介绍的2个标准弹窗FUNCTION,基本可以满足大部分这方面的开发需求。 ABAP中还有其它的弹窗函数如下(列举部分供参考)1.POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/NO的弹出窗口,提示用户未保存的数据将丢失DATA:ANSWER(1) TYPE C. "接收选择结果
CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
EXPORTING
TEXTLINE1 = '提示信息1' TEXTLINE2 = '提示信息2' TITEL = '弹窗标题' * START_COLUMN = 25 * START_ROW = 6 * DEFAULTOPTION = 'N' IMPORTING ANSWER = ANSWER." 选择是,返回 J ,选择否 返回 N 备注:目前不推荐使用,这种提示信息的直接使用POPUP_TO_CONFIRM就够了。 DATA:answer(1) TYPE c. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING defaultoption = 'Y' "显示两行文本 textline1 = '第一行文本信息' textline2 = '第二行文本信息' titel = '弹窗标题' "弹窗标题 start_column = 25 start_row = 6 cancel_display = '' "是否显示cancel按钮 IMPORTING answer = answer. "返回值J:yes;N:no;A:cancel 3.POPUP_TO_CONFIRM_WITH_MESSAGE 可以显示定制的提示信息的确认窗口 类似POPUP_TO_CONFIRM_STEP,只是多三行的文本错误诊断提示。DATA:l_answer TYPE char1. CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE' EXPORTING diagnosetext1 = '对话提示信息1' diagnosetext2 = '对话提示信息2' diagnosetext3 = '对话提示信息3' textline1 = '文本信息1' textline2 = '文本信息2' titel = '弹窗标题' IMPORTING answer = l_answer. "是为J;否为N;取消为A 备注:目前不推荐使用,这种提示信息的直接使用POPUP_TO_CONFIRM就够了。4.POPUP_TO_CONFIRM_WITH_VALUE
DATA:answer TYPE c LENGTH 1.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_VALUE' EXPORTING defaultoption = 'Y' objectvalue = 'objectvalue' text_after = 'text after objectvalue' text_before = 'text before objectvalue !!!!!' titel = 'title' start_column = 25 start_row = 6 cancel_display = 'X' IMPORTING answer = answer EXCEPTIONS text_too_long = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
CASE answer. WHEN 'A'. WHEN 'J'. WHEN 'N'. ENDCASE.
DATA:ANSWER(1) TYPE C. "接收选择结果 "显示弹窗 CALL FUNCTION 'POPUP_TO_DECIDE' EXPORTING "默认按钮 DEFAULTOPTION = '1' "显示三行文本弹窗 TEXTLINE1 = '第一行文本信息' TEXTLINE2 = '第二行文本信息' TEXTLINE3 = '第三行文本信息' "按钮1,2的文本 TEXT_OPTION1 = '是' TEXT_OPTION2 = '否' "按钮1,2的图标 *ICON_TEXT_OPTION1 = ' ' *ICON_TEXT_OPTION2 = ' ' TITEL = 'title' "弹窗标题 "开始行列 START_COLUMN = 25 START_ROW = 6 CANCEL_DISPLAY = 'X' "是否显示cancel按钮 IMPORTING ANSWER = ANSWER."选择返回1:按钮1;2:按钮2;A:cancel按钮 6.POPUP_TO_DECIDE_WITH_MESSAGE DATA: LV_ANSWER TYPE STRING. "用于存储用户选择
CALL FUNCTION 'POPUP_TO_DECIDE_WITH_MESSAGE' EXPORTING DIAGNOSETEXT1 = '推送成功' "诊断文本的第一行 TEXTLINE1 = '第一行文本信息' "弹出窗口的第一行,设置文本行内容1 TEXT_OPTION1 = '确认' "选项 1 的文本。 TEXT_OPTION2 = '重新推送' "选项 2 的文本。 TITEL = '推送结果' "设置标题 IMPORTING ANSWER = LV_ANSWER. "获得用户选择,这里返回的值对应是当前列表NO,比如第一个就返回1,第二个返回2
7.POPUP_TO_DISPLAY_TEXT
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT' EXPORTING titel = '提示' textline1 = '第一行文本信息' textline2 = '第二行文本信息' start_column = 25 start_row = 6.
DATA:lv_month LIKE isellist-month, lv_code LIKE sy-subrc. CALL FUNCTION 'POPUP_TO_SELECT_MONTH' EXPORTING actual_month = sy-datum+0(6) * factory_calendar = '01' * holiday_calendar = '01' language = sy-langu * START_COLUMN = 8 * START_ROW = 5 IMPORTING selected_month = lv_month return_code = lv_code * EXCEPTIONS * FACTORY_CALENDAR_NOT_FOUND = 1 * HOLIDAY_CALENDAR_NOT_FOUND = 2 * MONTH_NOT_FOUND = 3 * OTHERS = 4 .
8.POPUP_WITH_TABLE_DISPLAY DATA: BEGIN OF itab_nba OCCURS 0, a TYPE c LENGTH 10, b TYPE c LENGTH 10, END OF itab_nba. DATA: counts LIKE sy-tabix. itab_nba-a = '01'. itab_nba-b = '111111'. APPEND itab_nba. itab_nba-a = '02'. itab_nba-b = '222222'. APPEND itab_nba. CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY' EXPORTING endpos_col = 50 "右下角X endpos_row = 10 "右下角Y startpos_col = 10 "左上角X startpos_row = 5 "左上角Y titletext = 'Please Choose Your Entry' IMPORTING choise = counts "返回選中行 TABLES valuetab = itab_nba "可選擇的表 EXCEPTIONS break_off = 1 OTHERS = 2. IF counts NE 0. READ TABLE itab_nba INDEX counts. WRITE: itab_nba-a. ENDIF. CLEAR :itab_nba,counts. REFRESH:itab_nba.
|