SAP,Dialog开发教程之Table,Control开发.pdf

EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 1 页 共 30 页 SAP Dialog 开发教程之开发教程之 Table Control 开发开发 一 创建主程序 2 1 定义程序相关数据类型 3 1 定义 Table Control 的数据来源 3 2 定义与 Table Control 控制相关的数据变量 3 2 定义主程序的数据屏幕处理逻辑 4 二 创建承载 Table Control 的子屏幕 5 1 给子屏幕添加 Table Control 控件 5 1 使用 表控制 工具手动创建 Table Control 7 2 使用 表控制向导 来自动创建 Table Control 13 2 给子屏幕添加 OK CODE 屏幕元素 19 3 给子屏幕添加 PBO 和 PAI 追加表控制循环 19 4 实现 Table Control 与 ABAP 程序的数据交换 20 5 设置屏幕的 GUI 状态和标题 21 6 实现用户动作响应 USER COMMAND 23 1 实现编辑状态切换 24 2 实现增加行 24 3 实现删除行 25 4 实现升序排序 25 5 实现降序排序 26 7 本例最终实现效果 26 三 本教程用例完整源码 27 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 2 页 共 30 页 一 创建主程序一 创建主程序 Table Control 既可以用于报表程序 也可以用于模块池程序 本教程场景基于报表程序 且 不设置选择屏幕 从系统表 Sflight 查询到数据后 直接进入带有 Table Control 的屏幕中进行数 据显示 使用 T Code SE38 创建报表程序 ZTEST ZH02 程序类型选择 可执行程序 维护完程 序描述信息后 点击编码界面的 显示对象列表 按钮 进入到带有资源库浏览器的界面 即 SE80 界面 分别如下 3 图所示 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 3 页 共 30 页 1 定义程序相关数据类型定义程序相关数据类型 1 定义 定义 Table Control 的数据来源的数据来源 这里以演示为主 就直接引用系统现有数据表 SFLIGHT 的前几个字段 创建一个类型 工作 区和内表 这里的内表就是要用于 Table Control 数据展示的数据源 具体定义如下 本教程的所 有源码会以附件形式附在文末 2 定义与 定义与 Table Control 控制相关的数据变量控制相关的数据变量 有过 Dialog 开发经验的读者应该知道 ABAP 程序与 Dialog 屏幕进行数据交换的方式 其实 就是通过在程序中定义一个与 Dialog 中同名的全局变量或者结构 从而实现数据的自动传递 这里 要与自屏幕中的 Table Control 控件进行数据交互 也需要在程序中声明一个类型为 TABLEVIEW 的 Controls 并且传入子屏幕 这里以屏幕 0100 为例 同时为了控制表格中字段的输出属性 这 里还需要定义一个结构 参考 CXTAB COLUMN 这个结构中包含一个叫做 screen 的字段 而这 个 Screen 就和我们屏幕上的 Screen 一样 包含了 Table control 中所有的屏幕元素 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 4 页 共 30 页 2 定义主程序的数据屏幕处理逻辑定义主程序的数据屏幕处理逻辑 报表程序的屏幕逻辑是在 START OF SELECTION 中进行的 本演示程序主逻辑是先取数 再定义 table control 的默认输出状态为不可编辑 最后调用子屏幕 0100 输出数据 具体代码如下 其中前两个函数的代码示例如下 这里之所以在子屏幕调用之前设置 table control 的屏幕元素为不可编辑状态 是因为 Table control 中的屏幕元素默认是可以编辑的 这个不符合我们报表查询的习惯 一般报表默认是不可以 修改的 并且这个函数不能在 0100 的 PBO 事件中调用 否则每一次屏幕刷新后 table control 中的 元素都会变成不可编辑 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 5 页 共 30 页 二 创建承载二 创建承载 Table Control 的子屏幕的子屏幕 Table Control 作为 Dialog 中常用的一种屏幕元素 一般会布局在子屏幕的一部分 所以需要单独 创建一个子屏幕来承载 Table Control 控件 创建子屏幕的方法 有很多 最简单的办法就是双击 CALL SCREEN 100 中的 100 就会弹出创建提示 也可以在 SE80 的试图下 右击左侧的程序名 创 建 屏幕 输入屏幕编号 0100 后 就创建了一个空白的子屏幕 1 给子屏幕添加给子屏幕添加 Table Control 控件控件 双击左侧程序属性结构中 屏幕 节点下的 0100 屏幕 可以激活屏幕属性界面 然后点击上方 工具栏中的 格式 按钮 就可以进入画屏界面 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 6 页 共 30 页 在屏幕制作器界面 点击工具栏上的 修改 按钮 激活左侧控件工具箱 在控件工具箱中提 供了两个创建的 Table Control 的按钮 如下图所示 下面将分别以这两个按钮来说明本教程中所需要用到 Table Control 的创建过程 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 7 页 共 30 页 1 使用 表控制 工具手动创建 使用 表控制 工具手动创建 Table Control 点击 表控制 按钮 将光标移到画布的左上角 按住鼠标左键 向右下方拖拽出一个区域 这个区域就是 table Control 的区域 这个区域后面还可以调整大小 松开鼠标后 控件被激活 维护控件的名称 回车后控件生成 再双击控件右上角的表格按钮 可以调出 Table Control 的属性 设置窗口 以下为表控制属性的描述信息 关键字关键字作用作用 带列标题勾选此选项 则会在给表格的每个列都生成一个标题 此标题需要手动添加文本元素进去 可配置的激活表控制的设置按钮 含标题勾选此选项 则会在表格上方单独生成一行标题 需要手动添加文本元素进行描述 调整大小允许用户通过拖拽来改变表格的整体大小 分为允许垂直方向和水平方向两种 可同时选 分隔符即显示表格单元格的边框 分为垂直方向和水平方向两种 可同时勾选 行选定行选的方式 分为三种 不允许 允许单行 允许多行 三选一 列选定列选择方式 分为三种 不允许 允许单列 允许多列 三选一 带选择列是否包含选择列 即生成左侧的一行选择按钮 勾选的话 需要指定名称 固定列 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 8 页 共 30 页 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 9 页 共 30 页 设置完成后 需要往 Table Control 里面添加字段 这里可以通过字段添加工具 快速引入数据 字典或者程序里面已经定义的数据结构 这里以加入前面数据定义部分定义号的结构 GS FLIGHT 为 例进行说明 点击屏幕制作器工具栏上的 字典 程序字段窗口 按钮 打开字段引入工具 如下 2 图所示 在 表 字段名称 中输入前面数据定义部分定义的结构 GS FLIGHT 然后选择左侧的 从 程序中获取 即可调出该结构中所有字段 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 10 页 共 30 页 点击左上角的 全选 按钮 即可选择所有的字段 也可以逐行选择需要的字段 支持多选 这里取消掉 FLAG 字段 因为后面需要用这个字段来定义选择列 选择好需要的字段后 下方的 确认对勾将会被激活 选择对勾 窗口会自动切换到屏幕制作器上 且带有字段框形状 将光标定 位于 Table Control 区域中 鼠标左击后松开 这些数据元素会被自动分布于 Table Control 中 且会 横向排列 如下 2 图所示 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 11 页 共 30 页 这时候双击表控制右上角的表格图标 调出表控制的属性窗口 设置标题行和选择列的名称 这里设置选择列名为 GS FLIGHT FLAG 标题的文本元素命名为 T000 文本为 Table Control 表格标题名称 同时还需要手工定义各个列的名称 也需要往每个字段的顶部添加一个文本元素 用来描述列名 直接拖拽文本元素到列上方 不需要定义长度 该文本元素的长度会自动和下方的 字段长度进行匹配和调整 如果发现列标题名称不够长 无法显示完全 则可以通过拖拉下方的列 字段输入框的长度 来自动调整列标题文本元素的长度 输入文本元素的名称以及文本即可 如 下图所示 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 12 页 共 30 页 按照同样的方法维护所有的列名后 依次点击工具栏上的 保存 按钮 激活 按钮 保存 并激活该屏幕 如出现类似 LOOP ENDLOOP 必须出现在 PBO 和 PAI 中 报错 先忽略 并强行 激活 然后点击工具栏上 关闭 按钮可以退出屏幕制作器 回到 SE80 的程序界面 至此 使用 表控制 按钮创建 Table Control 的过程介绍完毕 EDIT BYZohoo ZhouDOC No APAP JC 2017082601 TITLESAP Dialog 开发教程之 Table Control 开发 DATE2017 8 26 PAGE第 13 页 共 30 页 2 使用 表控制向导 来自动创建 使用 表控制向导 来自动创建 Table Control 使用 table control 向导创建 和前面一种方法一样 点完工具按钮后 将光标移动到左上角 向 右下角划出一个 Table