abap中VIEW_MAINTENANCE_GIVEN_DATA的用法

本文介绍了一个使用 ABAP 编写的报表 (ZMM127_DEPT) 的实现细节,该报表通过调用 'VIEW_MAINTENANCE_GIVEN_DATA' 函数模块来维护 ZTDEPT_TXT 表的数据。报表允许用户根据部门类型、业务范围和部门文本进行筛选,并支持数据的更新操作。

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

*&---------------------------------------------------------------------*
*& Report ZMM127_DEPT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmm127_dept.

TABLESztdept_txtsscrfields..


DATABEGIN OF gt_valuetable OCCURS ,
        value(255),
      END OF gt_valuetable.

DATAgt_zmm127 TYPE TABLE OF ztdept_txt,
      gs_zmm127 LIKE LINE OF gt_zmm127.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN FUNCTION KEY 1."可以设置1~5五个功能键
SELECTION-SCREEN FUNCTION KEY 2."可以设置1~5五个功能键
SELECT-OPTIONSs_type FOR  ztdept_txt-zdept_type,
                s_brsch  FOR  ztdept_txt-brsch,
                s_txt  FOR  ztdept_txt-zdept_txt.
SELECTION-SCREEN END OF BLOCK b1.


START-OF-SELECTION.
  PERFORM frm_view_maintenance.


END-OF-SELECTION.




*&---------------------------------------------------------------------*
*&      Form  FRM_VIEW_MAINTENANCE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_view_maintenance .
  SELECT *
    INTO TABLE gt_zmm127
    FROM ztdept_txt
    WHERE zdept_type IN s_type
      AND brsch IN s_brsch
      AND zdept_txt IN s_txt.

  SORT gt_zmm127 BY zseqno.

  gt_valuetable[] gt_zmm127.


  CALL FUNCTION 'VIEW_MAINTENANCE_GIVEN_DATA'
    EXPORTING
      action             'U'
*     CORR_NUMBER        = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
      view_name          'ZTDEPT_TXT'
*     NO_WARNING_FOR_CLIENTINDEP           = ' '
*     RFC_DESTINATION_FOR_UPGRADE          = ' '
      client_for_upgrade 'X'
*     VARIANT_FOR_SELECTION                = ' '
*     COMPLEX_SELCONDS_USED                = ' '
    TABLES
      data               gt_valuetable
*     DBA_SELLIST        =
*     EXCL_CUA_FUNCT     =
*   EXCEPTIONS
*     CLIENT_REFERENCE   = 1
*     FOREIGN_LOCK       = 2
*     INVALID_ACTION     = 3
*     NO_CLIENTINDEPENDENT_AUTH            = 4
*     NO_DATABASE_FUNCTION                 = 5
*     NO_SHOW_AUTH       = 6
*     NO_TVDIR_ENTRY     = 7
*     NO_UPD_AUTH        = 8
*     ONLY_SHOW_ALLOWED  = 9
*     SYSTEM_FAILURE     = 10
*     UNKNOWN_FIELD_IN_DBA_SELLIST         = 11
*     VIEW_NOT_FOUND     = 12
*     OTHERS             = 13
    .
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.
ENDFORM.
<think>我们正在处理一个ABAP开发中的问题:用户遇到了"HR_AUTHORITY_CHECK_INFTY"不存在的错误。根据引用[1]:在函数HR_READ_INFOTYPE中,会调用HR_CHECK_AUTHORITY_INFTY来检查权限。这里提到了权限检查的函数是HR_CHECK_AUTHORITY_INFTY,而不是HR_AUTHORITY_CHECK_INFTY。因此,用户可能错误地使用了函数模块名称。正确的函数模块可能是HR_CHECK_AUTHORITY_INFTY。另外,引用[3]中展示了一个使用函数模块RH_STRUC_GET的例子,但并没有直接涉及权限检查。因此,我们推测用户可能在代码中试图调用一个不存在的函数模块HR_AUTHORITY_CHECK_INFTY,而实际上应该调用HR_CHECK_AUTHORITY_INFTY。解决方案建议:1.检查代码中调用的函数模块名称是否正确。将HR_AUTHORITY_CHECK_INFTY改为HR_CHECK_AUTHORITY_INFTY。2.确保函数模块HR_CHECK_AUTHORITY_INFTY在系统中存在。可以通过SE37事务码查看。3.如果函数模块HR_CHECK_AUTHORITY_INFTY不存在,可能是系统版本问题,需要检查系统版本和补丁级别。通常这个函数模块在标准的SAP HR系统中是存在的。如果用户确实需要实现权限检查,可以参考引用[1]中的描述:权限检查的结果可能会被缓存,所以要注意静态变量auth_buffer的使用。另外,引用[2]中提到了HR_MAINTAIN_MASTERDATA和HR_INFOTYPE_OPERATION,这两个函数模块用于维护主数据,与权限检查无关。因此,总结解决方案:-更正函数模块名称为HR_CHECK_AUTHORITY_INFTY。-如果系统没有这个函数模块,考虑升级系统或应用相关补丁。相关问题:1.如何正确使用HR_CHECK_AUTHORITY_INFTY函数模块?2.在SAP HR中,权限检查的常见问题有哪些?3.如何调试SAPHR中的权限问题?</think>### ABAP HR_AUTHORITY_CHECK_INFTY 不存在错误解决方案 在SAP HR开发中,`HR_AUTHORITY_CHECK_INFTY`错误通常由以下原因引起: #### 1. **函数模块名称错误** - **核心问题**:SAP标准函数模块正确名称是`HR_CHECK_AUTHORITY_INFTY`而非`HR_AUTHORITY_CHECK_INFTY`[^1]。 - **解决方案**: ```abap " 错误写法 CALL FUNCTION 'HR_AUTHORITY_CHECK_INFTY' " 正确写法 CALL FUNCTION 'HR_CHECK_AUTHORITY_INFTY' EXPORTING infty = '0000' " 信息类型 authority = 'DISPLAY' " 操作权限 object_id = lv_pernr " 人员编号 EXCEPTIONS not_authorized = 1. ``` #### 2. **权限缓存机制问题** - **原理**:该函数使用静态变量`auth_buffer`缓存权限结果。若两次调用的人员编号(`PERNR`)和信息类型(`TCLAS`)相同,会直接返回缓存结果[^1]。 - **风险场景**: - 人员编号或信息类型变更后仍使用旧缓存 - 跨事务调用时缓存失效 - **解决方案**: ```abap " 强制刷新权限缓存 CALL FUNCTION 'HR_CHECK_AUTHORITY_INFTY' EXPORTING reset_cache = 'X' " 重置缓存标志 infty = '0001' ... ``` #### 3. **系统环境问题** - **检查步骤**: 1. 事务码`SE37`验证函数是否存在 2. 执行`SNOTE`检查是否缺少HR基础补丁 3. 确认系统版本(ECC 6.0+ 应支持该函数) #### 4. **替代方案** 若函数仍不可用,改用底层权限检查: ```abap CALL FUNCTION 'AUTHORITY_CHECK' EXPORTING user = sy-uname object = 'P_ORGIN' field1 = 'INFTY' value1 = '0002' EXCEPTIONS no_authority = 1. ``` > **关键注意事项**: > - 权限检查需在`P_ORGIN`对象下配置`INFTY`字段值[^1] > - 批量处理时需显式重置缓存(`reset_cache = 'X'`) > - 开发前用`SU53`测试权限错误明细
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值