【ABAP——DAILOG_2】

ABAP界面控件使用与修改方法

在这里插入图片描述
用户通过界面输入数据,数据通过屏幕控件传递到ABAP/4程序中的变量,程序在PBO中准备数据并显示界面,用户回车后,PAI处理用户输入的数据,按顺序依次执行PAI中MODULE,并将结果反馈到界面。

使用Tabstrip控件实现分页签效果

Tabstrip可以实现在某个界面中,通过tab页的形式来显示多个界面
构成:按钮及子界面区域
1.创建Tabstrip Control
输入Tabstrip Name:Tabstrip Control控件名称(例:TS_TAB)
2.输入需要创建的各个tab页的描述
3.设定各tab页的名称,及相应的子界面编号
4.设定各部分代码进入的Include程序
激活程序后,可以查看到程序中增加了子界面的编号,可以依次进入界面
修改界面格式:设置方式与主界面相同,但不能设置GUl Status和GUI TITLE

标签页的修改

1.减少
选中标签页切换位置(Pushbutton),点击删除
在数据定义/PBO/PAI中做相应变更,也可不变更
2.增加
选择Pushbotton控件,在标签页旁边增加一个页面
设置按钮属性
在这里插入图片描述

增加数据定义/PBO/PAI处代码,可以直接参考复制
数据定义
在这里插入图片描述
PBO

MODULE TS_CTRL_ACTIVE_TAB_SET OUTPUT.
  TS_CTRL-ACTIVETAB = G_TS_CTRL-PRESSED_TAB."已激活的分页签:默认值是第一个分页签
  CASE G_TS_CTRL-PRESSED_TAB."点选了哪一个分页签
    WHEN C_TS_CTRL-TAB1.
      G_TS_CTRL-SUBSCREEN = '0110'."屏幕编号赋值
    WHEN C_TS_CTRL-TAB2.
      G_TS_CTRL-SUBSCREEN = '0120'.
    WHEN C_TS_CTRL-TAB3.
      G_TS_CTRL-SUBSCREEN = '0130'.
    WHEN C_TS_CTRL-TAB4.
      G_TS_CTRL-SUBSCREEN = '0140'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

PAI

MODULE TS_CTRL_ACTIVE_TAB_GET INPUT.
  IF GV_UCOMM IS NOT INITIAL.
    G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
    CLEAR GV_UCOMM.
  ELSE.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE.  "根据点选按钮,给全局参数赋值
    WHEN C_TS_CTRL-TAB1.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB1.
      CLEAR GT_STATUS[].
    WHEN C_TS_CTRL-TAB2.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB2.
    WHEN C_TS_CTRL-TAB3.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
      CLEAR GT_STATUS[].
      GT_STATUS = 'SAVE'.
      APPEND GT_STATUS.
    WHEN C_TS_CTRL-TAB4.
      G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB4.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
  ENDIF.
ENDMODULE.

使用Table Control控件实现表单输出

表格控件

  • 当界面中查询多条数据时,可以使用TableControl控件来进行表单输出
  • Table Control的行及列可以由以下元素构成:
    KeyWords
    Input/Output Fields
    Radio Button/Radio Button Group
    Checkbox
    Pushbutton

使用向导创建Table Control

在程序中创建Table control使用的内表(向导会自动创建相应执行代码)

DATA GT_SCHOOL TYPE TABLE OF ZSCHOOL_JSM_01.
DATA GS_SCHOOL TYPE ZSCHOOL_JSM_01.

创建Table Control

选择表控件在屏幕画出表单
在这里插入图片描述

进入向导界面,输入表控制名称后继续
Name of Table Control:TableControl的名称(例:TC TAB)
在这里插入图片描述

使用Internal Program Table创建,选择程序中的内表
在这里插入图片描述
选择显示列
在这里插入图片描述

设定属性
Outputonly:只显示,不可输入
Input Control:可输入
With column header:带标题
Line selection col.:行可选中
Single:只能选中一行
Multiple:可以选中多行
在这里插入图片描述

设定按钮
Scroll:设定滚动条
Insert/delete line:插入/删除行按钮
Select/deselect all:选中所有/不选中按钮
在这里插入图片描述
设定各部分代码进入的Include程序
在这里插入图片描述

Table Control列的修改

1.增加
在之前定义的内表中增加字段
在这里插入图片描述
在布局中使用Input/Output Field增加列
在这里插入图片描述
Text控件增加描述
在这里插入图片描述
在PAI的Chain部分,增加相应字段
在这里插入图片描述

  1. 减少
    在布局中选中input/output field,直接删除;
    退出布局激活程序会报错
    在这里插入图片描述
    需要将PAI中的Chain部分的相应字段进行注释
    在这里插入图片描述
    激活程序后运行表单显示没有ZADD字段
    在这里插入图片描述
    3.属性修改
    更改前
    在这里插入图片描述
    将Input/Output Field设成不可输入
    在这里插入图片描述
    激活后运行程序显示
    在这里插入图片描述
ABAP 中,类 `CL_ABAP_CONV_OUT_CE` 主要用于字符编码转换,特别是在非 Unicode 与 Unicode 系统之间进行数据处理时扮演重要角色。其方法 `GET_BUFFER` 是此类中用于获取转换后数据缓存的核心方法。 ### 方法功能 `GET_BUFFER` 方法的主要作用是返回已经完成编码转换的数据缓冲区内容。通常,在使用 `CL_ABAP_CONV_OUT_CE` 进行编码转换的过程中,数据会先被写入内部缓冲区,经过转换后再通过 `GET_BUFFER` 提取出来。此方法常用于确保输出的数据格式符合目标系统的要求,尤其是在涉及多语言支持或跨系统数据交换的场景中[^1]。 ### 使用方式 以下是一个典型的调用示例: ```abap DATA: lv_input TYPE string VALUE '汪', lv_output TYPE xstring, lo_converter TYPE REF TO cl_abap_conv_out_ce. lo_converter = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ). lo_converter->write( data = lv_input ). lo_converter->get_buffer( IMPORTING data = lv_output ). ``` 在此代码片段中: - 首先创建了一个编码器实例,并指定目标编码为 UTF-8。 - 接着将输入字符串 `'汪'` 写入编码器。 - 最后调用 `GET_BUFFER` 方法提取转换后的二进制数据(XSTRING)形式的结果。 ### 注意事项 1. **编码设置**:在创建 `CL_ABAP_CONV_OUT_CE` 实例时,必须明确指定目标编码格式。若未正确设置编码,可能导致乱码或不可预期的转换结果[^2]。 2. **缓冲区管理**:多次调用 `WRITE` 方法后,`GET_BUFFER` 返回的是累积的所有转换数据。如需清空缓冲区,应重新创建实例或调用相应清理方法(如有)。 3. **性能考量**:对于大数据量的转换任务,频繁调用 `GET_BUFFER` 可能影响性能。建议合理设计程序逻辑以减少不必要的调用。 ### 常见问题 在实际应用中,可能会遇到诸如字符丢失、乱码等问题。这些问题通常与源/目标系统的编码不一致有关,或是由于某些特殊字符在目标编码体系中不存在所致。此时可通过检查编码配置、验证输入数据完整性等方式进行排查和修复[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值