分享

ABAP开发中常用弹窗的应用详解

 ERP文库 2024-04-02 发布于广东

声明:本文仅代表原作者观点,仅用于ERP软件的应用与学习,不代表任何公司。

在ABAP程序设计中为提示和交互的需要会经常用到弹窗, 所谓弹窗就是弹出一个框,告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等,它价值在于通过提示提醒、警告,帮助用户顺利完成业务流程中的必要操作或给用户提供实时反馈的结果
ABAP开发中常用弹窗的功能代码
1.POPUP_TO_CONFIRM(确认弹窗)
以下是一个简单的示例代码:
它创建了一个带有“是”和“否”按钮的确认弹窗,并在用户作出选择后给出一个消息提示结果。
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.
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'
EXPORTING
TEXTLINE1 = '提示信息1'TEXTLINE2 = '提示信息2'TITEL = '弹窗标题'* START_COLUMN = 25* START_ROW = 6* DEFAULTOPTION = 'N'IMPORTINGANSWER = ANSWER." 选择是,返回 J ,选择否 返回 N

备注:目前不推荐使用,这种提示信息的直接使用POPUP_TO_CONFIRM就够了。
2.POPUP_TO_CONFIRM_STEP 
提示是否确认操作的弹出窗口
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.
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      = '否'        "按钮12的图标       *ICON_TEXT_OPTION1 = ' '  *ICON_TEXT_OPTION2 = ' '        TITEL             = 'title'  "弹窗标题        "开始行列        START_COLUMN      = 25        START_ROW         = 6        CANCEL_DISPLAY    = 'X' "是否显示cancel按钮      IMPORTING        ANSWER            = ANSWER."选择返回1:按钮12:按钮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.
8.POPUP_TO_SELECT_MONTH 
月份选择窗口
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.

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多