在ABAP程序设计中为提示和交互的需要会经常用到弹窗, 所谓弹窗就是弹出一个框,告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等,它价值在于通过提示、提醒、警告,帮助用户顺利完成业务流程中的必要操作或给用户提供实时反馈的结果。
ABAP开发中常用弹窗的功能代码
1.POPUP_TO_CONFIRM(确认弹窗)
以下是一个简单的示例代码:
它创建了一个带有“是”和“否”按钮的确认弹窗,并在用户作出选择后给出一个消息提示结果。
DATA: lv_answer TYPE c.
START-OF-SELECTION." 创建弹窗CALL FUNCTION 'POPUP_TO_CONFIRM'EXPORTINGtitlebar              = '确认弹窗'text_question         = '你确定要继续吗?'text_button_1         = '是'text_button_2         = '否'default_button        = '2'display_cancel_button = abap_falseIMPORTINGanswer                = lv_answerEXCEPTIONStext_not_found        = 1OTHERS                = 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'IMPORTINGreturncode      = return_codeTABLESfields          = lt_valuesEXCEPTIONSerror_in_fields = 1OTHERS          = 2.IF sy-subrc = 0.LOOP AT lt_values INTO wa_values.WRITE:/ wa_values-fieldname, wa_values-value.ENDLOOP.
ENDIF.popup_title :弹窗的标题
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'EXPORTINGTEXTLINE1 = '提示信息1'
TEXTLINE2 = '提示信息2'
TITEL = '弹窗标题'
*   START_COLUMN = 25
*   START_ROW = 6
*   DEFAULTOPTION = 'N'
IMPORTING
ANSWER           = ANSWER." 选择是,返回 J  ,选择否 返回 N
备注:目前不推荐使用,这种提示信息的直接使用POPUP_TO_CONFIRM就够了。
2.POPUP_TO_CONFIRM_STEP
提示是否确认操作的弹出窗口
DATA:answer(1) TYPE c.CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'EXPORTINGdefaultoption        = 'Y'"显示两行文本textline1            = '第一行文本信息'textline2            = '第二行文本信息'titel                = '弹窗标题'   "弹窗标题start_column         = 25start_row            = 6cancel_display       = '' "是否显示cancel按钮IMPORTINGanswer               = 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'EXPORTINGdiagnosetext1 = '对话提示信息1'diagnosetext2 = '对话提示信息2'diagnosetext3 = '对话提示信息3'textline1     = '文本信息1'textline2     = '文本信息2'titel         = '弹窗标题'IMPORTINGanswer        = 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'EXPORTINGdefaultoption  = 'Y'objectvalue    = 'objectvalue'text_after     = 'text after objectvalue'text_before    = 'text before objectvalue !!!!!'titel          = 'title'start_column   = 25start_row      = 6cancel_display = 'X'IMPORTINGanswer         = answerEXCEPTIONStext_too_long  = 1OTHERS         = 2.
IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.CASE answer.WHEN 'A'.WHEN 'J'.WHEN 'N'.
ENDCASE.
5.POPUP_TO_DECIDE
将待确认选项以单选按钮的方式显示的弹出窗口
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'EXPORTINGDIAGNOSETEXT1 = '推送成功'  "诊断文本的第一行TEXTLINE1     = '第一行文本信息'  "弹出窗口的第一行,设置文本行内容1TEXT_OPTION1  = '确认'      "选项 1 的文本。TEXT_OPTION2  = '重新推送'  "选项 2 的文本。TITEL         = '推送结果'  "设置标题IMPORTINGANSWER        = LV_ANSWER.  "获得用户选择,这里返回的值对应是当前列表NO,比如第一个就返回1,第二个返回2
7.POPUP_TO_DISPLAY_TEXT
显示多行信息的窗口
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'EXPORTINGtitel        = '提示'textline1    = '第一行文本信息'textline2    = '第二行文本信息'start_column = 25start_row    = 6.
8.POPUP_TO_SELECT_MONTH
月份选择窗口
DATA:lv_month LIKE isellist-month,lv_code  LIKE sy-subrc.
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'EXPORTINGactual_month   = sy-datum+0(6)
*   factory_calendar = '01'
*   holiday_calendar = '01'language       = sy-langu
*   START_COLUMN   = 8
*   START_ROW      = 5IMPORTINGselected_month = lv_monthreturn_code    = lv_code
* EXCEPTIONS
*   FACTORY_CALENDAR_NOT_FOUND       = 1
*   HOLIDAY_CALENDAR_NOT_FOUND       = 2
*   MONTH_NOT_FOUND  = 3
*   OTHERS         = 4.
9.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.

往期相关文章荐读:
ABAP SUBMIT如何使用详解
ABAP RANGE的用法详解
SAP内存和ABAP内存应用详解