模拟Select-Options对象实现多项数据输入功能

Select-Options对象可以同时输入多项值并将所输入数据存入内表以供程序使用,不过Select-Options的功能有一定的局限性,它所能显示信息的长度是固定的,对于一些较长的文本,会因为输出长度过短而影响显示效果(如地址信息)。本例将以邮件地址输入字段为例,创建一个长度为50的可输入多值的文本对象。

本例中需要定义一个隐藏的Select-Options对象,用于保存实际输入数据。需要定义一个够长的文本框及一个多值输入按钮作为数据传递的接口。数据会通过所定义的文本框传递到隐藏的Select-Options对象中,并通过改变多值输入按钮上的图标样式来表示该对象中是否存在数据。

相关函数:

COMPLEX_SELECTIONS_DIALOG:开启输入多值对话框

  1. REPORT ZR_EXAMPLE_04 .
  2. TYPE-POOLS: ICON.           "按钮上显示图标时需要调用该类库
  3. DATA: L_COUNT TYPE I.       "用于计算内表数值总数
  4. DATA: LMAIL(50) TYPE C.     "定义Mail地址输入变量长度及类型
  5. *定义屏幕元素及文本元素(参考第7章)
  6. SELECTION-SCREEN: BEGIN OF BLOCK ALV WITH FRAME TITLE TEXT-002.
  7. SELECTION-SCREEN: BEGIN OF LINE.
  8. SELECTION-SCREEN: COMMENT (14) TEXT-001.
  9. PARAMETERS: MAILCOPY LIKE LMAIL.
  10. SELECTION-SCREEN: PUSHBUTTON 63(5) PUBU USER-COMMAND MAILBUTT.
  11. SELECTION-SCREEN: END   OF LINE.
  12. SELECTION-SCREEN: END OF BLOCK ALV.
  13. DATA: MAILTYPE TYPE C VALUE ''.
  14. *定义一隐藏的SELECT-OPTIONS用于保存输入值
  15. SELECT-OPTIONS: MAILADD FOR LMAIL NO-DISPLAY .
  16. AT SELECTION-SCREEN OUTPUT.
  17. CLEAR L_COUNT.
  18. DESCRIBE TABLE MAILADD LINES L_COUNT.
  19. *判断内表是否有值来设置按钮图标
  20. IF L_COUNT > 1.
  21. WRITE ICON_DISPLAY_MORE AS ICON TO PUBU.
  22. ELSE.
  23. WRITE ICON_ENTER_MORE  AS ICON TO PUBU.
  24. ENDIF.
  25. AT SELECTION-SCREEN.
  26. CLEAR L_COUNT.
  27. DESCRIBE TABLE MAILADD LINES L_COUNT.
  28. *实现内表与文本元素间的值传递
  29. IF NOT MAILCOPY IS INITIAL AND MAILADD[] IS INITIAL.
  30. MAILADD-LOW = MAILCOPY.
  31. APPEND MAILADD.
  32. ENDIF.
  33. IF L_COUNT = 1.
  34. REFRESH MAILADD.
  35. CLEAR MAILADD.
  36. IF NOT MAILCOPY IS INITIAL.
  37. MAILADD-LOW = MAILCOPY.
  38. APPEND MAILADD.
  39. ENDIF.
  40. ENDIF.
  41. IF L_COUNT > 1 .
  42. IF MAILCOPY IS INITIAL.
  43. DELETE MAILADD INDEX 1.
  44. ELSE.
  45. MAILADD-LOW = MAILCOPY.
  46. MODIFY MAILADD INDEX 1 TRANSPORTING LOW.
  47. ENDIF.
  48. ENDIF.
  49. *在单击按钮的事件时调用输入多值输入对话框
  50. IF SY-UCOMM = 'MAILBUTT'.
  51. PERFORM SHOW_BOX.
  52. ENDIF.
  53. *---------------------------------------------------------------------*
  54. *     调用多值输入对话框                       *
  55. *---------------------------------------------------------------------*
  56. FORM SHOW_BOX.
  57. TYPE-POOLS AQADH .
  58. DATA: TAB_AND_FIELD TYPE  RSTABFIELD.
  59. TAB_AND_FIELD-TABLENAME = 'ADR6'.
  60. TAB_AND_FIELD-FIELDNAME = 'SMTP_ADDR'.
  61. *该函数将输入值传递给内表
  62. CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
  63. EXPORTING
  64. TEXT           = 'SET E-Mail To '
  65. TAB_AND_FIELDTAB_AND_FIELD  = TAB_AND_FIELD
  66. TABLES
  67. RANGE          = MAILADD[]
  68. EXCEPTIONS
  69. NO_RANGE_TAB   = 1
  70. CANCELLED      = 2
  71. INTERNAL_ERROR = 3
  72. OTHERS         = 4.
  73. *将内表首行值传给文本对象,显示在屏幕上
  74. IF NOT MAILADD[] IS INITIAL.
  75. READ TABLE MAILADD INDEX 1.
  76. MAILCOPY = MAILADD-LOW.
  77. ELSE.
  78. MAILCOPY = ''.
  79. ENDIF.
  80. ENDFORM

程序输出界面如图16-4所示。

 
图16-4  自定义多值输入文本对象执行界面

模拟Select-Options对象实现多项数据输入功能的更多相关文章

  1. BarTender中如何调整数据输入表单的大小?

    BarTender中的表单设计,是一个简单而又复杂的操作.简单的是它提供很多实用的工具,帮助用户实现更多的功能,复杂的是要对其进行排版设计,这就要看小伙伴们的个人要求高低了. 自定义数据输入表单时,你 ...

  2. 如何利用javascript获取表单中select下拉列表中所选中项的值value

    1.html代码如下: <html> <head> </head> <body> <form name="form1" id= ...

  3. .NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

    配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置.值得推荐的做法就是采用<.NET Core采用的全新配置系统[1]: 读取 ...

  4. TFS工作项数据统计及相关数据库结构分析

    今天为客户的质量管理部门人员提供TFS咨询过程中,客户的质量管理专家基于TFS提出了一个比较棘手的数据统计需求.需求是这样,客户的数十个软件项目通过质量管理部按照年度版本计划进行软件产品系统的发布,因 ...

  5. Flexigrid从对象中加载数据

    (有问题,在找…………) Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表 ...

  6. resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found.

    resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found. 代码: String sql="SELECT d.co ...

  7. 【转】asp.net中利用session对象传递、共享数据[session用法]

    来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...

  8. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  9. select options常用操作

    1.判断select选项中 是否存在Value="value"的option元素 function jsSelectIsExitItem(objSelect,objItemValu ...

随机推荐

  1. Backbone1.0.0数据验证的变化

    0.5.3版本对Model数据验证时,绑定Error就可以了: (function(){ var Model = Backbone.Model.extend({ initialize : functi ...

  2. 自制Console线(已测试CISCO3560可用)

    D9的顺序是5口在上,4口在下.从右到左分别是1-5,6-9. 5 4 3 2 1 o o o o o o o o o 9 8 7 6 用万用表量出D9的口的对应颜色.然后按照下面的表.把颜色填写上. ...

  3. mysql 显示行号,以及分组排序

    建表: CREATE TABLE `my_tb` ( `id` ) NOT NULL AUTO_INCREMENT, `parent_code` ) DEFAULT NULL, `code` ) DE ...

  4. 分享一个Mongodb PHP封装类

    <?php /** * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该版本API实现了 Mongodb 中最 ...

  5. [转]VS2010中水晶报表安装应用及实例

    基本分类如下:第一部分:VS2010简介VS2010是微软的提供的一套完整的开发环境,功能也是相当的大微软宣布了下一代开发工具和平台的正式名称,分别称为“Visual Studio Team Syst ...

  6. WPA字典锦集

    1.xiemimendictionary 字典下载(第二季),500W整理过后还有282W条不重复的密码 字典下载,600W整理过后还有400W条不重复的密码 历次泄+常用弱口令字典集合[无中文去重复 ...

  7. MyBatis知多少(17)MyBatis和JDBC

    有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会 ...

  8. 快乐的JS正则表达式(一)

    上一篇介绍了为什么需要正则,那从这一篇开始我们就去学习如何使用正则. 在js中有两种方式创建正则表达式: var reg = new RegExp("表达式","可选规则 ...

  9. 菜鸟学Windows Phone 8开发(3)——布局和事件基础

    本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发  本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develo ...

  10. LDPC编译码基本原理

    LDPC编译码基本原理     学习笔记 V1.1 2015/02/18 LDPC编译码基本原理   概述   本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结.该版本主要致力 ...