模拟Select-Options对象实现多项数据输入功能
2013-12-11 17:06
453 查看
模拟Select-Options对象实现多项数据输入功能
Select-Options对象可以同时输入多项值并将所输入数据存入内表以供程序使用,不过Select-Options的功能有一定的局限性,它所能显示信息的长度是固定的,对于一些较长的文本,会因为输出长度过短而影响显示效果(如地址信息)。本例将以邮件地址输入字段为例,创建一个长度为50的可输入多值的文本对象。
本例中需要定义一个隐藏的Select-Options对象,用于保存实际输入数据。需要定义一个够长的文本框及一个多值输入按钮作为数据传递的接口。数据会通过所定义的文本框传递到隐藏的Select-Options对象中,并通过改变多值输入按钮上的图标样式来表示该对象中是否存在数据。
相关函数:
COMPLEX_SELECTIONS_DIALOG:开启输入多值对话框
REPORT ZR_EXAMPLE_04 .
TYPE-POOLS: ICON. "按钮上显示图标时需要调用该类库
DATA: L_COUNT TYPE I. "用于计算内表数值总数
DATA: LMAIL(50) TYPE C. "定义Mail地址输入变量长度及类型
*定义屏幕元素及文本元素(参考第7章)
SELECTION-SCREEN: BEGIN OF BLOCK ALV WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT (14) TEXT-001.
PARAMETERS: MAILCOPY LIKE LMAIL.
SELECTION-SCREEN: PUSHBUTTON 63(5) PUBU USER-COMMAND MAILBUTT.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK ALV.
DATA: MAILTYPE TYPE C VALUE ''.
*定义一隐藏的SELECT-OPTIONS用于保存输入值
SELECT-OPTIONS: MAILADD FOR LMAIL NO-DISPLAY .
AT SELECTION-SCREEN OUTPUT.
CLEAR L_COUNT.
DESCRIBE TABLE MAILADD LINES L_COUNT.
*判断内表是否有值来设置按钮图标
IF L_COUNT > 1.
WRITE ICON_DISPLAY_MORE AS ICON TO PUBU.
ELSE.
WRITE ICON_ENTER_MORE AS ICON TO PUBU.
ENDIF.
AT SELECTION-SCREEN.
CLEAR L_COUNT.
DESCRIBE TABLE MAILADD LINES L_COUNT.
*实现内表与文本元素间的值传递
IF NOT MAILCOPY IS INITIAL AND MAILADD[] IS INITIAL.
MAILADD-LOW = MAILCOPY.
APPEND MAILADD.
ENDIF.
IF L_COUNT = 1.
REFRESH MAILADD.
CLEAR MAILADD.
IF NOT MAILCOPY IS INITIAL.
MAILADD-LOW = MAILCOPY.
APPEND MAILADD.
ENDIF.
ENDIF.
IF L_COUNT > 1 .
IF MAILCOPY IS INITIAL.
DELETE MAILADD INDEX 1.
ELSE.
MAILADD-LOW = MAILCOPY.
MODIFY MAILADD INDEX 1 TRANSPORTING LOW.
ENDIF.
ENDIF.
*在单击按钮的事件时调用输入多值输入对话框
IF SY-UCOMM = 'MAILBUTT'.
PERFORM SHOW_BOX.
ENDIF.
*---------------------------------------------------------------------*
* 调用多值输入对话框 *
*---------------------------------------------------------------------*
FORM SHOW_BOX.
TYPE-POOLS AQADH .
DATA: TAB_AND_FIELD TYPE RSTABFIELD.
TAB_AND_FIELD-TABLENAME = 'ADR6'.
TAB_AND_FIELD-FIELDNAME = 'SMTP_ADDR'.
*该函数将输入值传递给内表
CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
EXPORTING
TEXT = 'SET E-Mail To '
TAB_AND_FIELDTAB_AND_FIELD = TAB_AND_FIELD
TABLES
RANGE = MAILADD[]
EXCEPTIONS
NO_RANGE_TAB = 1
CANCELLED = 2
INTERNAL_ERROR = 3
OTHERS = 4.
*将内表首行值传给文本对象,显示在屏幕上
IF NOT MAILADD[] IS INITIAL.
READ TABLE MAILADD INDEX 1.
MAILCOPY = MAILADD-LOW.
ELSE.
MAILCOPY = ''.
ENDIF.
ENDFORM
程序输出界面如图16-4所示。
Select-Options对象可以同时输入多项值并将所输入数据存入内表以供程序使用,不过Select-Options的功能有一定的局限性,它所能显示信息的长度是固定的,对于一些较长的文本,会因为输出长度过短而影响显示效果(如地址信息)。本例将以邮件地址输入字段为例,创建一个长度为50的可输入多值的文本对象。
本例中需要定义一个隐藏的Select-Options对象,用于保存实际输入数据。需要定义一个够长的文本框及一个多值输入按钮作为数据传递的接口。数据会通过所定义的文本框传递到隐藏的Select-Options对象中,并通过改变多值输入按钮上的图标样式来表示该对象中是否存在数据。
相关函数:
COMPLEX_SELECTIONS_DIALOG:开启输入多值对话框
REPORT ZR_EXAMPLE_04 .
TYPE-POOLS: ICON. "按钮上显示图标时需要调用该类库
DATA: L_COUNT TYPE I. "用于计算内表数值总数
DATA: LMAIL(50) TYPE C. "定义Mail地址输入变量长度及类型
*定义屏幕元素及文本元素(参考第7章)
SELECTION-SCREEN: BEGIN OF BLOCK ALV WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT (14) TEXT-001.
PARAMETERS: MAILCOPY LIKE LMAIL.
SELECTION-SCREEN: PUSHBUTTON 63(5) PUBU USER-COMMAND MAILBUTT.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK ALV.
DATA: MAILTYPE TYPE C VALUE ''.
*定义一隐藏的SELECT-OPTIONS用于保存输入值
SELECT-OPTIONS: MAILADD FOR LMAIL NO-DISPLAY .
AT SELECTION-SCREEN OUTPUT.
CLEAR L_COUNT.
DESCRIBE TABLE MAILADD LINES L_COUNT.
*判断内表是否有值来设置按钮图标
IF L_COUNT > 1.
WRITE ICON_DISPLAY_MORE AS ICON TO PUBU.
ELSE.
WRITE ICON_ENTER_MORE AS ICON TO PUBU.
ENDIF.
AT SELECTION-SCREEN.
CLEAR L_COUNT.
DESCRIBE TABLE MAILADD LINES L_COUNT.
*实现内表与文本元素间的值传递
IF NOT MAILCOPY IS INITIAL AND MAILADD[] IS INITIAL.
MAILADD-LOW = MAILCOPY.
APPEND MAILADD.
ENDIF.
IF L_COUNT = 1.
REFRESH MAILADD.
CLEAR MAILADD.
IF NOT MAILCOPY IS INITIAL.
MAILADD-LOW = MAILCOPY.
APPEND MAILADD.
ENDIF.
ENDIF.
IF L_COUNT > 1 .
IF MAILCOPY IS INITIAL.
DELETE MAILADD INDEX 1.
ELSE.
MAILADD-LOW = MAILCOPY.
MODIFY MAILADD INDEX 1 TRANSPORTING LOW.
ENDIF.
ENDIF.
*在单击按钮的事件时调用输入多值输入对话框
IF SY-UCOMM = 'MAILBUTT'.
PERFORM SHOW_BOX.
ENDIF.
*---------------------------------------------------------------------*
* 调用多值输入对话框 *
*---------------------------------------------------------------------*
FORM SHOW_BOX.
TYPE-POOLS AQADH .
DATA: TAB_AND_FIELD TYPE RSTABFIELD.
TAB_AND_FIELD-TABLENAME = 'ADR6'.
TAB_AND_FIELD-FIELDNAME = 'SMTP_ADDR'.
*该函数将输入值传递给内表
CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
EXPORTING
TEXT = 'SET E-Mail To '
TAB_AND_FIELDTAB_AND_FIELD = TAB_AND_FIELD
TABLES
RANGE = MAILADD[]
EXCEPTIONS
NO_RANGE_TAB = 1
CANCELLED = 2
INTERNAL_ERROR = 3
OTHERS = 4.
*将内表首行值传给文本对象,显示在屏幕上
IF NOT MAILADD[] IS INITIAL.
READ TABLE MAILADD INDEX 1.
MAILCOPY = MAILADD-LOW.
ELSE.
MAILCOPY = ''.
ENDIF.
ENDFORM
程序输出界面如图16-4所示。
图16-4 自定义多值输入文本对象执行界面 |
相关文章推荐
- 模拟Select-Options对象实现多项数据的输入功能
- ios-day13-01(私人通讯录。控制器之间的数据传递、保存密码和自动登录的实现、普通对象的归档、UITableView的局部刷新和向左滑动删除功能等等)
- 模拟实现MyBatis中通过SQL反射实体类对象功能
- Java实现WinPcap+Wireshark数据抓包模拟联通客户端签到功能
- jQuery数据缓存功能的实现思路及简单模拟
- JAVA基础类与对象实现模拟火车站购票功能
- 微信小程序车牌号码模拟键盘输入功能的实现代码
- express+mockjs实现模拟后台数据发送功能
- 定义一个List集合并实例化对应的实现类对象。循环输入任意个整数,输入0结束输入循环,对集合中的数据进行从大到小的排序后输出
- listview获取edittext中输入的数据,显示,并且实现可删除功能
- 模拟实现MyBites中通过SQL反射实体类对象功能
- easyui的combobox根据后台数据实现自动输入提示功能
- 需要求3个长方体的体积,写一个基于对象的程序,数据成员包括 length width height 要求用成员函数实现以下功能
- 使用UI Automation实现自动化测试--7.1 (模拟键盘输入数据在自动化测试中的应用)
- 微信小程序简单实现form表单获取输入数据功能示例
- struts2开发时通过interceptor拦截器实现输入数据过滤前后空格的功能
- struts2开发时通过interceptor拦截器实现输入数据过滤前后空格的功能
- js实现Select下拉框具有输入功能的方法
- AngularJS实现select的ng-options功能示例