接口日志处理类

news2024/11/27 0:44:57

类:ZCL_IFLOG_UTILITIES

属性:AUTH_RESULTS_LIST

类型:

TY_AUTH_RESULT    Private

受保护部分:

  PRIVATE SECTION.

    TYPES: BEGIN OF ty_auth_result,
             funcname TYPE ztall_logcfg-funcname,
             pass     TYPE abap_bool,
           END OF ty_auth_result.

    CLASS-DATA: auth_results_list TYPE HASHED TABLE OF ty_auth_result WITH UNIQUE KEY funcname.

方法:

RE_PROCESS    Static Method    Public
IS_PRD    Static Method    Public
GET_DISTINCT_COUNT    Static Method    Public
FM_AUTHORITY_CHECK    Static Method    Public

方法:RE_PROCESS

参数:

UUID    Importing    Type    SYSUUID_C32

  METHOD re_process.
    DATA: data_ref TYPE REF TO data.

    SELECT SINGLE uuid, funcname, import, change_in, table_in
      FROM ztall_iflog
      WHERE uuid = @uuid
      INTO @DATA(record).
    IF sy-subrc <> 0.
      RETURN.
    ENDIF.

    SELECT funcname, paramtype, pposition, parameter, structure
      FROM fupararef
      WHERE funcname = @record-funcname
      INTO TABLE @DATA(parameters_tab).
    IF sy-subrc <> 0.
      RETURN.
    ENDIF.

    DATA: temp_dd04l TYPE STANDARD TABLE OF dd04l.
    LOOP AT parameters_tab ASSIGNING FIELD-SYMBOL(<ptab>).
      IF strlen( <ptab>-structure ) > 30.
        CONTINUE.
      ENDIF.
      temp_dd04l = VALUE #( BASE temp_dd04l ( domname = <ptab>-structure ) ).
    ENDLOOP.

    IF temp_dd04l IS NOT INITIAL.
      SELECT domname FROM dd04l
        FOR ALL ENTRIES IN @temp_dd04l
        WHERE domname = @temp_dd04l-domname
        INTO TABLE @DATA(data_elements).
    ENDIF.

    DATA: func      TYPE string,
          ptab      TYPE abap_func_parmbind_tab,
          ptab_line TYPE abap_func_parmbind,
          etab      TYPE abap_func_excpbind_tab,
          etab_line TYPE abap_func_excpbind.

    LOOP AT parameters_tab ASSIGNING FIELD-SYMBOL(<parameter>).

      CLEAR ptab_line.
      ptab_line-name = <parameter>-parameter.
      ptab_line-kind = COND #( WHEN <parameter>-paramtype = 'E' THEN abap_func_importing
                               WHEN <parameter>-paramtype = 'I' THEN abap_func_exporting
                               WHEN <parameter>-paramtype = 'T' THEN abap_func_tables
                               WHEN <parameter>-paramtype = 'C' THEN abap_func_changing
                               ELSE                                  ''
      ).

      DATA(json_field_name) = COND string( WHEN ptab_line-kind = abap_func_exporting THEN 'IMPORT'
                                           WHEN ptab_line-kind = abap_func_tables    THEN 'TABLE_IN'
                                           WHEN ptab_line-kind = abap_func_changing  THEN 'CHANGE_IN'
                                           ELSE                                           ''
      ).

      IF json_field_name IS INITIAL.
        CONTINUE.
      ENDIF.

      ASSIGN COMPONENT json_field_name OF STRUCTURE record TO FIELD-SYMBOL(<json_raw>).
      IF sy-subrc <> 0 OR <json_raw> IS INITIAL.
        CONTINUE.
      ENDIF.

      DATA(json_data) = zcl_iflog_json=>generate_new( json = <json_raw> ).
      ASSIGN json_data->* TO FIELD-SYMBOL(<json_data>).


      ASSIGN COMPONENT <parameter>-parameter OF STRUCTURE <json_data> TO FIELD-SYMBOL(<parameter_val>).
      IF sy-subrc <> 0.
        CONTINUE.
      ENDIF.

      IF ptab_line-kind = abap_func_exporting OR ptab_line-kind = abap_func_changing.

        CREATE DATA data_ref TYPE (<parameter>-structure).
        FIELD-SYMBOLS: <temp> TYPE any.
        ASSIGN <parameter_val>->* TO <temp>.

      ENDIF.

      IF ptab_line-kind = abap_func_tables.
        "不知道为什么,如果是表类型的时候会报错,改成和changing一样的方式试运行一下
        DATA(structure_type) = CAST cl_abap_structdescr( cl_abap_datadescr=>describe_by_name( <parameter>-structure ) ).
        DATA(table_type)     = CAST cl_abap_tabledescr( cl_abap_tabledescr=>create( structure_type ) ).
        CREATE DATA data_ref TYPE HANDLE table_type.
        ASSIGN <parameter_val>->* TO <temp>.

*        CREATE DATA data_ref TYPE (<parameter>-structure).
*        ASSIGN <parameter_val>->* TO <temp>.

      ENDIF.

      IF data_ref IS BOUND.
        ASSIGN data_ref->* TO FIELD-SYMBOL(<data_ref>).
      ENDIF.

      IF line_exists( data_elements[ domname = <parameter>-structure ] ).
        <data_ref> = <temp>.
      ELSE.
        DATA(json_temp) = zcl_iflog_json=>serialize( data = <parameter_val> ).
        zcl_iflog_json=>deserialize( EXPORTING json = json_temp CHANGING data = <data_ref> ).
      ENDIF.

      GET REFERENCE OF <data_ref> INTO ptab_line-value.

      INSERT ptab_line INTO TABLE ptab.

    ENDLOOP.

    etab_line-name = 'OTHERS'.
    etab_line-value = 2.
    INSERT etab_line INTO TABLE etab.

    CALL FUNCTION record-funcname
      PARAMETER-TABLE
      ptab
      EXCEPTION-TABLE
      etab.

  ENDMETHOD.

方法:IS_PRD

参数:RESULT    Returning    Type    ABAP_BOOL

  METHOD is_prd.
    DATA: role TYPE t000-cccategory.

    CALL FUNCTION 'TR_SYS_PARAMS'
      IMPORTING
        system_client_role = role
      EXCEPTIONS
        no_systemname      = 1
        no_systemtype      = 2
        OTHERS             = 3.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    IF role = 'P'.
      result = abap_true.
    ENDIF.

  ENDMETHOD.

方法:GET_DISTINCT_COUNT

参数:

TAB_DATA    Importing    Type    ANY TABLE
FIELD_NAME    Importing    Type    CLIKE
COUNT    Returning    Type    INT4

  METHOD get_distinct_count.

    TYPES: BEGIN OF ty_temp,
             field TYPE string,
           END OF ty_temp.
    DATA: count_table TYPE HASHED TABLE OF ty_temp WITH UNIQUE KEY field,
          count_wa    LIKE LINE OF count_table.

    LOOP AT tab_data ASSIGNING FIELD-SYMBOL(<wa>).
      ASSIGN COMPONENT field_name OF STRUCTURE <wa> TO FIELD-SYMBOL(<field>).
      IF sy-subrc <> 0.
        RETURN.
      ELSE.
        count_wa-field = <field>.
        INSERT count_wa INTO TABLE count_table.
      ENDIF.
    ENDLOOP.

    count = lines( count_table ).

  ENDMETHOD.

方法:FM_AUTHORITY_CHECK

参数:

FM_NAME    Importing    Type    RS38L_FNAM                                                                                                                                        
BUFFER    Importing    Type    ABAP_BOOL    ABAP_TRUE
PASS    Returning    Type    ABAP_BOOL                                                                                                                                        

  METHOD fm_authority_check.

    DATA: auth_result LIKE LINE OF auth_results_list.

    IF buffer = abap_true.
      auth_result = VALUE #( auth_results_list[ funcname = fm_name ] OPTIONAL ).
      IF auth_result IS NOT INITIAL.
        pass = auth_result-pass.
        RETURN.
      ENDIF.
    ENDIF.

    IF auth_result IS INITIAL.

      DELETE auth_results_list WHERE funcname = fm_name.
      SELECT SINGLE no_auth_check FROM ztall_logcfg WHERE funcname = @fm_name
        INTO @DATA(no_auth_check) BYPASSING BUFFER.

      IF no_auth_check = abap_true.
        auth_result = VALUE #( funcname = fm_name pass = abap_true ).
      ELSE.
        DATA: wa_tadir TYPE tadir,
              area     TYPE sobj_name.

        SELECT SINGLE area FROM enlfdir WHERE funcname = @fm_name INTO @area.
        IF sy-subrc <> 0.
          RETURN.
        ENDIF.

        CALL FUNCTION 'TR_TADIR_INTERFACE'
          EXPORTING
            wi_test_modus     = ' '
            wi_read_only      = 'X'
            wi_tadir_pgmid    = 'R3TR'
            wi_tadir_object   = 'FUGR'
            wi_tadir_obj_name = area
          IMPORTING
            new_tadir_entry   = wa_tadir
          EXCEPTIONS
            OTHERS            = 1.

        IF sy-subrc <> 0 OR wa_tadir-devclass IS INITIAL.
          AUTHORITY-CHECK OBJECT 'S_DEVELOP'
                 ID 'DEVCLASS' DUMMY
                 ID 'OBJTYPE' FIELD 'FUGR'
                 ID 'OBJNAME' FIELD area
                 ID 'P_GROUP' DUMMY
                 ID 'ACTVT' FIELD '16'.
        ELSE.
          AUTHORITY-CHECK OBJECT 'S_DEVELOP'
                 ID 'DEVCLASS' FIELD wa_tadir-devclass
                 ID 'OBJTYPE' FIELD 'FUGR'
                 ID 'OBJNAME' FIELD area
                 ID 'P_GROUP' DUMMY
                 ID 'ACTVT' FIELD '16'.
        ENDIF.
        IF sy-subrc = 0.
          auth_result = VALUE #( funcname = fm_name pass = abap_true ).
        ELSE.
          auth_result = VALUE #( funcname = fm_name pass = abap_false ).
        ENDIF.

      ENDIF.
    ENDIF.

    pass = auth_result-pass.

    INSERT auth_result INTO TABLE auth_results_list.

  ENDMETHOD.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7 升级 5.4 内核

MatrixOne 推荐部署使用的操作系统为 Debian 11、Ubuntu 20.04、CentOS 9 等 Kernel 内核版本高于 5.0 的操作系统。随着 CentOS 7 的支持周期接近尾声&#xff0c;社区不少小伙伴都在讨论用以替换的 Linux 操作系统&#xff0c;经过问卷调查&#xff0c;我们发现小伙伴们的操作…

测试开发-快速定位问题

写在前面 这两天工作实在是有点小忙&#xff0c;感觉好久没更新了&#xff0c;但是平时也是有感而发的比较多&#xff0c;今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。 测试平台又又又出问题了 今天一位…

【文件IO】JavaIO详解

一.文件的相关概念 什么是文件? 文件是计算机中存储信息的基本单位。文件通常指的是存储在计算机或其他数字存储设备上的一段信息的集合&#xff0c;这些信息可以是文本、图片、音频、视频等不同格式的数据。 文件路径: 文件的路径可以分为两类 相对路径:先指定一个"当前…

c++的STL(8) -- queue

queue容器概述 queue容器实现了实现了和队列相同结构的容器。 如图&#xff0c;队列这种结构有两端: 队首和队尾。 对于队列&#xff0c;我们添加数据只能从队尾添加&#xff0c;删除数据和获取数据只能从队首删除。是一种先进先出的结构。 -- 当然读取数据也只能从队首或者…

方案分享 | 嵌入式指纹方案

随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…

MUNK电源维修GmbH高频电源E230 G60/45 WRG-TFMYCT24

德国MUNK电源维修主要系列&#xff1a;ΡKA2&#xff0c;DCAC100&#xff0c;AS100&#xff0c;HS100&#xff0c;ESA2000&#xff0c; HSG2000&#xff0c;E230 G60/45&#xff1b;E230 G100&#xff0c;D400 G100全系列型号。 常见维修型号包括&#xff1a;D400 G100/75WRG-…

【四十一】【算法分析与设计】floodfill(2),130. 被围绕的区域,417. 太平洋大西洋水流问题

目录 130. 被围绕的区域 417. 太平洋大西洋水流问题 结尾 130. 被围绕的区域 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board …

长基线大高差RTK定位效果分析

为了评估基于GNSS参考站网的实时高精度滑坡监测算法效果&#xff0c;如图2所示&#xff0c;本文共收集了中国西北2019年年积日第271&#xff5e;277共7天的4个CORS站数据&#xff0c;分别为LZLC、BYBY、LXDX、LXJS&#xff0c; 2个黑方台滑坡监测站数据HF01和HF06&#xff0c;其…

算法:多重背包问题dp

文章目录 一、多重背包问题特点1.1、多重背包问题的特征1.2、解决多重背包问题的基本方法典型例题&#xff1a;AcWing——多重背包问题I 1.3、二进制优化1.3.1、二进制优化的思想1.3.2、多重背包问题的二进制优化 一、多重背包问题特点 多重背包问题是背包问题的又一变种&…

大厂设计师倾心推荐的在线作图免费网站

在当今数字时代&#xff0c;绘画已经成为各行各业的必备技能。无论你是设计师、学生、创作者还是业余爱好者&#xff0c;免费的在线绘图软件都是发挥创造力和表达想法的理想选择。本文将介绍七款强大免费的在线绘图软件&#xff0c;让你轻松实现自己的创作梦想。你可以在不安装…

功能测试_验证qq账号的合法性

案例&#xff1a;验证qq账号的合法性&#xff08;要求&#xff1a;6-10位的自然数&#xff09; 使用等价类设计用例案例&#xff1a; 步骤&#xff1a; 1:明确需求&#xff1a;qq账号的合法性 2:划分等价类&#xff1a;有效等价类、有效取值、无效等价类、无效取值 3&…

docker搭建EFK

目录 elasticsearch1.创建网络2.拉取镜像3.创建容器如果出现启动失败&#xff0c;提示目录挂载失败&#xff0c;可以考虑如下措施 开放防火墙端口4.验证安装成功重置es密码关闭https连接创建kibana用户创建新账户给账户授权 kibana1.创建容器2.验证安装成功3.es为kibana创建用户…

LeetCode-冗余连接(并查集)

每日一题&#xff0c;今天又刷到一道使用并查集来解决的问题&#xff0c;再次加深了一遍自己对并查集的印象和使用。 题目要求 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1…

Windows11下Docker使用记录(一)

Docker使用记录&#xff08;一&#xff09; 简单介绍Docker安装Docker 常用命令Docker 可视化Docker 使用GPU可视化rviz、gazebo 在进行ROS项目开发时&#xff0c;如果只有一台Windows电脑&#xff0c;我们可以考虑使用WSL或Docker来搭建ROS环境。在尝试了两种方式后&#xff0…

【静态分析】静态分析笔记01 - Introduction

参考&#xff1a; BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…

Python实现滑块验证码识别,最简单的一种,没有任何加密

网址链接&#xff1a;衣丰 & 2010-聚衣网(juyi5.cn) - 常熟市聚衣网&#xff0c;聚衣网女装&#xff0c;江苏省女装批发&#xff0c;苏州市女装批发&#xff0c;常熟市女装批发&#xff0c;网销女装一件代发&#xff0c;全国最低价 平时采集数据&#xff0c;频率过快&…

ai伪原创文案,快速生成文案的方法!

在当今数字化时代&#xff0c;文案写作成为广告、营销等领域中不可或缺的一环。然而&#xff0c;随着互联网的发展&#xff0c;市场上的竞争愈发激烈&#xff0c;传统的文案写作方式已经无法满足大家的需求。ai伪原创文案的出现&#xff0c;便成为一种快速的写作文案的方法。本…

PowerJob 分布式任务调度简介

目录 适用场景 设计目标 PowerJob 功能全景 任务调度 工作流 分布式计算 动态容器 什么是动态容器? 使用场景 可维护性和灵活性的完美结合 实时日志&在线运维 PowerJob 系统组件 PowerJob 应用场景 PowerJob 的优势 PowerJob&#xff08;原OhMyScheduler&…

中国500米分辨率年最大EVI数据集

增强型植被指数&#xff08;EVI&#xff09;是在归一化植被指数&#xff08;NDVI&#xff09;改善出来的&#xff0c;根据大气校正所包含的影像因子大气分子、气溶胶、薄云、水汽和臭氧等因素进行全面的大气校正&#xff0c;EVI大气校正分三步&#xff0c;第一步是去云处理。第…

基于SpringBoot+Vue网上医院预约挂号系统+jsp(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…