abap al设置单元格可编辑 oo_abap oo模板代码

这篇博客介绍了如何在ABAP中使用OO ALV进行面向对象编程,包括创建control容器、实例化ALV屏幕以及如何设置单元格可编辑。通过示例代码展示了如何处理ALV的事件,如单击事件、搜索帮助和数据变更事件,同时讲解了如何设置行、列和单元格的颜色,以及如何实现下拉列表和HTTP超链接功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OO ALV是面向对象的ALV,在使用之前我们需创建一个control容器(屏幕),在通过CUSTOM_CONTAINER将其实例化为一个ALV屏幕,我们可以将ALV看作是一个对象,按钮,字段,样式,事件都是其属性,使用起来简单方便。

image.png

*&---------------------------------------------------------------------*

*& Report ZTEST_OOP_ALV

*&

*&---------------------------------------------------------------------*

*&OO ALV练习

*&

*&---------------------------------------------------------------------*

REPORT ZTEST_OOP_ALV.

INCLUDE .

TABLES:MARA, " 常规物料数据

MAKT, " 物料描述

T023T. " 物料组描述

TYPE-POOLS: VRM, SLIS.

TYPES:BEGIN OF TY_ITAB,

CKBOX TYPE C , " ALV 左侧选择框

ICON TYPE ICON-ID, " 状态

MATNR TYPE MARA-MATNR, " 物料号

MAKTX TYPE MAKT-MAKTX, " 物料描述

MTART TYPE MARA-MTART, " 物料类型

MBRSH TYPE MARA-MBRSH, " 行业领域

MATKL TYPE MARA-MATKL, " 物料组

WGBEZ TYPE T023T-WGBEZ, " 物料组描述

MEINS TYPE MARA-MEINS, " 基本计量单位

BRGEW TYPE MARA-BRGEW, " 毛重

NTGEW TYPE MARA-NTGEW, " 净重

GEWEI TYPE MARA-GEWEI, " 重量单位

ROW_COLOR(4) TYPE C, " 行颜色

CEL_COLOR TYPE SLIS_T_SPECIALCOL_ALV, " 列颜色

BNAME(10) TYPE C,

STORE TYPE CHAR10, " 存放地点,搜索帮助字段

ZHTTP TYPE STRING, " 存放URL

ZLINK TYPE INT4,

END OF TY_ITAB.

*&---物料描述(属性信息为附属表,禁止和主表jion使用)

TYPES:BEGIN OF TY_MAKT,

MATNR TYPE MAKT-MATNR, " 物料号

SPRAS TYPE MAKT-SPRAS, " 语言代码

MAKTX TYPE MAKT-MAKTX, " 物料描述

END OF TY_MAKT.

*&---物料组描述(属性信息为附属表,禁止和主表jion使用)

TYPES:BEGIN OF TY_T023T,

MATKL TYPE T023T-MATKL, " 物料组

SPRAS TYPE T023T-SPRAS, " 语言代码

WGBEZ TYPE T023T-WGBEZ, " 物料组描述

END OF TY_T023T.

*&---ALV 搜索帮助类型

TYPES:BEGIN OF TY_STORE,

STORE TYPE CHAR4,

TYPE TYPE CHAR4,

BNAME TYPE CHAR30,

END OF TY_STORE.

*----------------------------------------------------------------------*

* 全局变量定义/Global variable definition

*----------------------------------------------------------------------*

*&---全局内表定义

DATA:GT_ITAB TYPE TABLE OF TY_ITAB, " 主数据表

GT_MAKT TYPE TABLE OF TY_MAKT, " 物料描述

GT_T023T TYPE TABLE OF TY_T023T, " 物料组描述

GT_STORE TYPE TABLE OF TY_STORE. " 搜索帮助内表

*&---全局结构定义

DATA:GS_ITAB TYPE TY_ITAB, " 主数据结构

GS_MAKT TYPE TY_MAKT, " 物料描述结构

GS_STORE TYPE TY_STORE, " 搜索帮助内表

GS_T023T TYPE TY_T023T. " 物料组描述结构

*&---全局变量定义

DATA:GV_MATNR TYPE MARA-MATNR, " 物料号

GV_MAKTX TYPE MAKT-MAKTX, " 物料描述

GV_NAME1 TYPE CHAR10, " 字符串操作变量1

GV_NAME2 TYPE STRING, " 字符串操作变量2

GV_INDEX TYPE I, " 取余值

GV_TIMES TYPE I VALUE 10. " 循环次数

*&---------------------------------------------------------------------*

*& 字段串定义/Field-symbols *

*&---------------------------------------------------------------------*

FIELD-SYMBOLS: TYPE TY_ITAB.

*&---------------------------------------------------------------------*

*& ALV TYPE/ALV 类型定义

*&---------------------------------------------------------------------*

DATA: OK_CODE TYPE SY-UCOMM,

G_REPID LIKE SY-REPID,

G_GRID TYPE REF TO CL_GUI_ALV_GRID,

GS_LAYOUT TYPE LVC_S_LAYO,

CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

DATA: GT_FIELD_CAT TYPE LVC_T_FCAT,

GS_FIELD_CAT TYPE LVC_S_FCAT,

GS_VARIANT TYPE DISVARIANT,

GT_EXCLUDE TYPE UI_FUNCTIONS.

*&---选择屏幕下拉框/list box

DATA:GT_LIST TYPE VRM_VALUES,

GS_LIST LIKE LINE OF GT_LIST.

*&---ALV HTTP超链接

DATA GS_HYPE TYPE LVC_S_HYPE .

DATA GT_HYPE TYPE LVC_T_HYPE ."网址映射关系表,在具体链接到哪个网址就是根

*&---ALV 下拉列表

DATA:GT_BNAME TYPE LVC_T_DROP, " 用户下拉列表,表存储

GS_BNAME TYPE LVC_S_DROP. " 用户下拉列表,结构

*&---单元格颜色

DATA:GS_CELL TYPE LINE OF SLIS_T_SPECIALCOL_ALV.

*----------------------------------------------------------------------*

*CLASS cl_event_handler DEFINITION

*----------------------------------------------------------------------*

CLASS CL_EVENT_HANDLER DEFINITION.

PUBLIC SECTION.

"Hotspot Click.

METHODS: HANDLE_CLICK

FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO.

METHODS: HANDLE_ONF4

FOR EVENT ONF4 OF CL_GUI_ALV_GRID

IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.

METHODS: HANDLE_DATA_CHANGED

FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID

IMPORTING

ER_DATA_CHANGED

E_ONF4

E_ONF4_BEFORE

E_ONF4_AFTER

E_UCOMM.

ENDCLASS. "cl_event_handler DEFINITION

*----------------------------------------------------------------------*

* CLASS cl_event_handler IMPLEMENTATION

*----------------------------------------------------------------------*

CLASS CL_EVENT_HANDLER IMPLEMENTATION.

"Hotspot Click.单击事件

METHOD HANDLE_CLICK.

CASE E_COLUMN_ID-FIELDNAME.

WHEN 'MATNR'.

READ TABLE GT_ITAB ASSIGNING INDEX E_ROW_ID.

IF SY-SUBRC = 0.

SET PARAMETER ID 'MAT' FIELD -MATNR.

CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

ENDIF.

WHEN OTHERS.

ENDCASE.

ENDMETHOD. "HANDLE_CLICK

METHOD HANDLE_ONF4."搜索帮助

PERFORM HANDLE_ONF4 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.

ENDMETHOD. "HANDLE_ONF4

"数据变化事件:更改物料描述

METHOD HANDLE_DATA_CHANGED.

DATA: GT_HEAD TYPE TABLE OF BAPIMATHEAD,

GS_HEAD TYPE BAPIMATHEAD,

LT_MAKT TYPE TABLE OF BAPI_MAKT,

LS_MAKT TYPE BAPI_MAKT,

GT_RET TYPE TABLE OF BAPI_MATRETURN2,

GS_RET TYPE BAPI_MATRETURN2.

DATA: L_MSG TYPE STRING.

TYPES:LTY_ALV_H TYPE STANDARD TABLE OF TY_ITAB WITH NON-UNIQUE DEFAULT KEY.

DATA: L_MAKTX TYPE MAKT-MAKTX.

FIELD-SYMBOLS: TYPE LTY_ALV_H,

LIKE LINE OF ,

LIKE LINE OF ER_DATA_CHANGED->MT_DELETED_ROWS,

LIKE LINE OF ER_DATA_CHANGED->MT_MOD_CELLS.

LOOP AT ER_DATA_CHANGED->MT_MOD_CELLS ASSIGNING WHERE FIELDNAME = 'MAKTX'.

CASE -FIELDNAME.

WHEN 'MAKTX'.

READ TABLE GT_ITAB INTO GS_ITAB INDEX -ROW_ID.

IF SY-SUBRC EQ 0.

GS_HEAD-MATERIAL = GS_ITAB-MATNR.

ENDIF.

LS_MAKT-LANGU = '1'.

LS_MAKT-MATL_DESC = -VALUE.

APPEND LS_MAKT TO LT_MAKT.

CLEAR LS_MAKT.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

EXPORTING

HEADDATA = GS_HEAD

* IMPORTING

* RETURN = GS_RET

TABLES

MATERIALDESCRIPTION = LT_MAKT

RETURNMESSAGES = GT_RET.

LOOP AT GT_RET INTO GS_RET WHERE TYPE = 'S'.

ENDLOOP.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'

EXPORTING

INPUT = GS_HEAD-MATERIAL

IMPORTING

OUTPUT = GS_HEAD-MATERIAL.

IF SY-SUBRC EQ 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'.

COMMIT WORK.

CONCATENATE '物料号' GS_HEAD-MATERIAL '的物料描述修改成功!' INTO L_MSG.

MESSAGE L_MSG TYPE 'S'.

ELSE.

CALL FUNCTION

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值