ABAP--显示修改数据(tables CDHDR and CDPOS)

这篇博客介绍了如何在ABAP中显示和修改CDHDR和CDPOS表的数据。通过创建选择屏幕和定义表格类型,博客展示了读取更改文档头并使用REUSE_ALV_GRID_DISPLAY显示ALV的方法。此外,还提供了根据用户命令处理更改文档项的逻辑,以及检查标记的方法。

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

REPORT z_alv_cdhdr_cdpos.
TYPE-POOLS slis. 
DATA : cdhdr TYPE cdhdr.        
SELECT-OPTIONS :
  s_objcls FOR cdhdr-objectclas OBLIGATORY,
  s_objtid FOR cdhdr-objectid,
  s_chngnr FOR cdhdr-changenr,
  s_usrnam FOR cdhdr-username DEFAULT sy-uname,
  s_udate  FOR cdhdr-udate    DEFAULT sy-datum,
  s_time   FOR cdhdr-utime,
  s_tcode  FOR cdhdr-tcode,
  s_plncnr FOR cdhdr-planchngnr,
  s_chngno FOR cdhdr-act_chngno,
  s_wsplnd FOR cdhdr-was_plannd,
  s_chngid FOR cdhdr-change_ind.

SELECTION-SCREEN SKIP.
PARAMETERS p_max TYPE numc3 OBLIGATORY DEFAULT '200'.

*---------------------------------------------------------------------*
TYPES :
  BEGIN OF ty_s_cdhdr.
        INCLUDE STRUCTURE cdhdr.
TYPES : checkbox,
  END OF ty_s_cdhdr,

  BEGIN OF ty_s_cdpos.
        INCLUDE STRUCTURE cdpos.
TYPES : checkbox,
  END OF ty_s_cdpos.

*---------------------------------------------------------------------*
DATA :
* Layout for ALV
  gs_layout TYPE slis_layout_alv,
* Change document header
  t_cdhdr TYPE TABLE OF ty_s_cdhdr.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* Read Change document header
  SELECT * INTO TABLE t_cdhdr
             UP TO p_max ROWS

<think>嗯,用户问的是在ABAP里调用函数'VIEW_MAINTENANCE_CALL'保存数据到视图ZSDFT_005后,如何检查底表数据是否存在保存的数据。首先,我需要理解这个函数的作用。这个函数通常用于维护视图,比如更新、显示或者修改视图的数据。用户用了action = 'U',应该是执行更新操作。 接下来,用户想知道如何验证数据是否真的保存到了底表里。视图ZSDFT_005可能有多个底表,所以需要先确认这些底表是哪些。通常可以通过SE11或者数据字典查看视图的结构,找到关联的表。 然后,用户需要查询这些底表,看看是否有新增或修改数据。这时候可能需要用SELECT语句,根据视图的字段和条件去底表里查找。需要注意的是,如果视图是聚合或者连接多个表,可能需要分别检查每个相关的表。 另外,用户可能还需要考虑事务提交的问题。如果在调用函数后没有显式提交,数据可能还没写入数据库,所以检查之前要确保有COMMIT WORK。不过,VIEW_MAINTENANCE_CALL可能会自动提交,这点需要确认。 还有权限的问题,用户是否有读取底表的权限,否则查询时会报错。时间戳或日志表也是有用的,特别是当底表数据量大时,可以缩小查询范围。 用户可能没有提到的深层需求是,他们可能在调试或测试过程中遇到数据保存的问题,需要验证函数是否正常工作。或者是数据不一致的情况,需要排查是否保存成功。这时候,提供多种方法,比如直接查询、使用日志、检查返回参数,能帮助他们更全面地验证数据。</think>在ABAP中调用`VIEW_MAINTENANCE_CALL`函数维护视图数据后,检验底表数据的步骤如下: --- ### 第一步:理解视图与底表关系 视图`ZSDFT_005`的底层数据存储在关联的数据库表中。需通过以下方式确认底表: 1. 执行事务码`SE11` 2. 输入视图名`ZSDFT_005` 3. 进入 **"数据库视图"** 页签,查看 **"基表"** 列表 --- ### 第二步:查询底表数据 假设底表为`ZSDT001`和`ZSDT002`,需根据视图字段映射关系查询: ```abap DATA: lt_zdt001 TYPE TABLE OF zsdt001, lt_zdt002 TYPE TABLE OF zsdt002. SELECT * FROM zsdt001 INTO TABLE lt_zdt001 WHERE field1 = '输入值' "替换为实际条件 AND field2 = '输入值'. SELECT * FROM zsdt002 INTO TABLE lt_zdt002 WHERE field3 = '输入值' "替换为实际条件 AND field4 = '输入值'. ``` --- ### 关键注意点 1. **事务提交检查**: - 确保在调用`VIEW_MAINTENANCE_CALL`后执行`COMMIT WORK` - 该函数可能自动提交,需通过调试确认 2. **时间范围过滤**: ```abap SELECT * FROM zsdt001 INTO TABLE lt_data WHERE erdat >= sy-datum "创建日期 AND erzet >= sy-uzeit. "创建时间 ``` 3. **权限验证**: - 使用`AUTHORITY-CHECK`语句确认当前用户对底表的读取权限 --- ### 替代方案(推荐) 1. **直接读取视图数据**: ```abap SELECT * FROM zsdft_005 INTO TABLE @DATA(lt_view_data) WHERE condition_field = '值'. ``` 2. **使用日志表**: - 若视图维护启用了变更文档(Change Document),可查询表`CDHDR`和`CDPOS` --- ### 调试技巧 1. 在`VIEW_MAINTENANCE_CALL`后设置断点 2. 检查函数返回参数`dba_sellist`的内容 3. 使用`CL_DEMO_OUTPUT=>DISPLAY`快速显示内表数据 --- ### 典型问题排查 | 现象 | 可能原因 | 解决方案 | |------|--------|--------| | 数据未更新 | 未提交事务 | 添加`COMMIT WORK` | | 权限错误 | 缺少底表访问权限 | 申请`S_TABU_NAM`权限 | | 时间不同步 | 服务器时区差异 | 使用UTC时间查询 | 建议结合事务码`SE16N`手动验证数据,确保程序逻辑与数据库操作的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值