模拟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. ZOJ 2112 Dynamic Rankings(动态区间第 k 大+块状链表)

    题目大意 给定一个数列,编号从 1 到 n,现在有 m 个操作,操作分两类: 1. 修改数列中某个位置的数的值为 val 2. 询问 [L, R] 这个区间中第 k 大的是多少 n<=50,00 ...

  2. xfire框架内部基本结构解析

    1 概述 xfire是webservice的一个实现框架,是apache旗下CXF的前身,是一个比较被广泛使用的webservice框架,网上有很多关于如何使用xfire或cxf的hello worl ...

  3. HTTP 详解一 -- 转

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  4. devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)

    介绍一些常用的gridcontrol设置. 1.设置隔行变色.首先设置显示隔行变色,步骤:OptionsView-->EnableAppearanceEvenRow-->true和Opti ...

  5. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案

    创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过a ...

  6. gulpfile.js 合并压缩 requirejs 的配置文件

    var gulp = require("gulp"); // var babel = require("gulp-babel"); // 用于ES6转化ES5 ...

  7. SNF开发平台WinForm之十三-单独从服务器上获取PDF文件进行显示-SNF快速开发平台3.3-Spring.Net.Framework

    1运行效果: 2开发实现: 如果需要单独显示PDF文件时用下面代码去实现,指定url地址. 地址: . 获取附件管理的实体对象: List<KeyValuePair<string, obj ...

  8. 求1+2+3+...+n

    求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 卧槽,剑指Offer竟然有这样的题... public ...

  9. 关于python中赋值、浅拷贝、深拷贝之间区别的深入分析

    当重新学习了计算机基础课程<数据结构和算法分析>后再来看这篇自己以前写的博文,发现错误百出.python内置数据类型之所以会有这些特性,归根结底是它采用的是传递内存地址的方式,而不是传递真 ...

  10. MySQL字符串转日期类型

    MySQL字符串转日期类型 select str_to_date('2014-08-20 00:00:00', '%Y-%m-%d %H:%i:%s'); >2014-08-20 00:00:0 ...