当前位置: 首页 > news >正文

ABAP FPM

1.效果

2.查询条件的feed class

SE11创建feed class数据的结构

ZCL_FPM_FIFO_SEARCH

GET_DEFINITION方法代码

  METHOD if_fpm_guibb_search~get_definition.


    eo_field_catalog_attr ?= cl_abap_structdescr=>describe_by_name( 'ZSS_FIFO_DATA'  ).

  ENDMETHOD.

PROCESS_EVENT代码

  METHOD if_fpm_guibb_search~process_event.

    DATA: lo_fpm        TYPE REF TO if_fpm,
          lo_event_data TYPE REF TO cl_fpm_parameter.

    CHECK io_event->mv_event_id = if_fpm_guibb_search=>fpm_execute_search.  "查询事件

    lo_fpm = cl_fpm_factory=>get_instance( ).

    CREATE OBJECT lo_event_data.
    lo_event_data->if_fpm_parameter~set_value(
      EXPORTING
        iv_key   = 'SEL_TAB'
        iv_value = it_fpm_search_criteria
    ).

    lo_event_data->if_fpm_parameter~set_value(
     EXPORTING
       iv_key   = 'MAX_NUM'
       iv_value = iv_max_num_results
   ).


    lo_fpm->raise_event_by_id(
      EXPORTING
        iv_event_id   = if_fpm_guibb_list=>gc_event_list_filter
        io_event_data =  lo_event_data
    ).

  ENDMETHOD.

3.列表输出结果的feed class

GET_DEFINITION代码

  METHOD if_fpm_guibb_list~get_definition.

    eo_field_catalog ?= cl_abap_tabledescr=>describe_by_name( 'ZTYT_FIFO_DATA'  ).

  ENDMETHOD.

PROCESS_EVENT代码

  METHOD if_fpm_guibb_list~process_event.
    DATA: lt_fpm_search_criteria TYPE fpmgb_t_search_criteria,
          lv_max_num             TYPE i,
          rt_matnr               TYPE range_t_matnr,
          rs_matnr               TYPE range_s_matnr,
          ls_rsds                TYPE rsdsselopt,
          rt_charg               TYPE ranges_charg_tt,
          rs_charg               TYPE range_charg_s,
          ls_fifo                TYPE zss_fifo_data,
          lv1                    TYPE i,
          ls_chart               TYPE zss_fifo_chart.


    TYPES:BEGIN OF ty_reason,
            sign   TYPE ddsign,
            option TYPE ddoption,
            low    TYPE zzreason,
            high   TYPE zzreason,
          END OF ty_reason.

    DATA: rt_reason TYPE TABLE OF ty_reason,
          rs_reason TYPE ty_reason.

    TYPES:BEGIN OF ty_year,
            sign   TYPE ddsign,
            option TYPE ddoption,
            low    TYPE mjahr,
            high   TYPE mjahr,
          END OF ty_year.

    DATA: rt_year TYPE TABLE OF ty_year,
          rs_year TYPE ty_year.


    TYPES:BEGIN OF ty_month,
            sign   TYPE ddsign,
            option TYPE ddoption,
            low    TYPE month,
            high   TYPE month,
          END OF ty_month.

    DATA: rt_month TYPE TABLE OF ty_month,
          rs_month TYPE ty_month.



    FIELD-SYMBOLS: <fs_params_search> TYPE fpmgb_s_search_criteria.

    CASE io_event->mv_event_id.
      WHEN if_fpm_guibb_list~gc_event_list_filter.

        io_event->mo_event_data->get_value(
          EXPORTING
            iv_key   = 'SEL_TAB'
          IMPORTING
            ev_value =  lt_fpm_search_criteria

        ).

        io_event->mo_event_data->get_value(
        EXPORTING
          iv_key   = 'MAX_NUM'
        IMPORTING
          ev_value =  lv_max_num

      ).

        LOOP AT lt_fpm_search_criteria INTO DATA(ls_search_criteria).
          CLEAR: ls_rsds,rs_matnr.
          CASE ls_search_criteria-search_attribute.
            WHEN 'MATNR'.
              TRY.
                  cl_fpm_guibb_search_conversion=>to_abap_select_option(
                    EXPORTING
                      is_fpm_search_row  = ls_search_criteria    " GUIBB search: Search operator
                    RECEIVING
                      rs_abap_sel_option = ls_rsds     " ABAP: Selection option (EQ/BT/CP/...)
                  ).

                  MOVE-CORRESPONDING ls_rsds TO rs_matnr.
                  APPEND rs_matnr TO rt_matnr.
                CATCH cx_fpmgb.
              ENDTRY.

            WHEN 'CHARG'.
              TRY.
                  cl_fpm_guibb_search_conversion=>to_abap_select_option(
                    EXPORTING
                      is_fpm_search_row  = ls_search_criteria    " GUIBB search: Search operator
                    RECEIVING
                      rs_abap_sel_option = ls_rsds     " ABAP: Selection option (EQ/BT/CP/...)
                  ).

                  MOVE-CORRESPONDING ls_rsds TO rs_charg.
                  APPEND rs_charg TO rt_charg.
                CATCH cx_fpmgb.
              ENDTRY.
            WHEN 'REASON'.
              TRY.
                  cl_fpm_guibb_search_conversion=>to_abap_select_option(
                    EXPORTING
                      is_fpm_search_row  = ls_search_criteria    " GUIBB search: Search operator
                    RECEIVING
                      rs_abap_sel_option = ls_rsds     " ABAP: Selection option (EQ/BT/CP/...)
                  ).

                  MOVE-CORRESPONDING ls_rsds TO rs_reason.
                  APPEND rs_reason TO rt_reason.
                CATCH cx_fpmgb.
              ENDTRY.
            WHEN 'YEAR'.
              TRY.
                  cl_fpm_guibb_search_conversion=>to_abap_select_option(
                    EXPORTING
                      is_fpm_search_row  = ls_search_criteria    " GUIBB search: Search operator
                    RECEIVING
                      rs_abap_sel_option = ls_rsds     " ABAP: Selection option (EQ/BT/CP/...)
                  ).

                  MOVE-CORRESPONDING ls_rsds TO rs_year.
                  APPEND ls_rsds TO rt_year.
                CATCH cx_fpmgb.
              ENDTRY.
            WHEN 'MONTH'.
              TRY.
                  cl_fpm_guibb_search_conversion=>to_abap_select_option(
                    EXPORTING
                      is_fpm_search_row  = ls_search_criteria    " GUIBB search: Search operator
                    RECEIVING
                      rs_abap_sel_option = ls_rsds     " ABAP: Selection option (EQ/BT/CP/...)
                  ).

                  MOVE-CORRESPONDING ls_rsds TO rs_month.
                  APPEND rs_month TO rt_month.
                CATCH cx_fpmgb.
              ENDTRY.
          ENDCASE.
        ENDLOOP.

    ENDCASE.

    CLEAR: gt_fifo,zcl_fpm_fifo_chart=>gt_fifo.

    SELECT  a~matnr,b~maktx,a~charg,SUM( a~menge ) AS quantity,
            substring( budat_mkpf,1,4 ) AS year,
            substring( budat_mkpf,5,2 ) AS month,
            c~zzreason_text AS reason
        FROM mseg AS a
        LEFT JOIN makt AS b
        ON a~matnr = b~matnr
        INNER JOIN zmmt0008 AS c
        ON a~zzreason = c~zzreason
       WHERE werks = '1300'
        AND  a~zzreason <> ''
        AND a~matnr IN @rt_matnr
        AND a~charg IN @rt_charg
        AND a~zzreason IN @rt_reason
        AND  b~spras = @sy-langu
       GROUP BY a~matnr,b~maktx,a~charg,budat_mkpf,c~zzreason_text
       INTO TABLE @DATA(lt_temp).

    LOOP AT lt_temp INTO DATA(ls_temp).
      MOVE-CORRESPONDING ls_temp TO ls_fifo.
      COLLECT ls_fifo INTO gt_fifo.
      CLEAR: ls_temp,ls_fifo.
    ENDLOOP.

    CHECK lv_max_num IS NOT INITIAL.

    LOOP AT gt_fifo INTO ls_fifo.
      lv1 = lv1 + 1.
      MOVE-CORRESPONDING ls_fifo TO ls_chart.
      COLLECT ls_chart INTO zcl_fpm_fifo_chart=>gt_fifo.
      CLEAR: ls_chart.

      IF lv1 > lv_max_num.
        DELETE gt_fifo.
        CONTINUE.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.

GET_DATA代码

  METHOD if_fpm_guibb_list~get_data.
    IF iv_eventid->mv_event_id = if_fpm_guibb_list~gc_event_list_filter.
      ct_data = gt_fifo.
      ev_data_changed = abap_true.
    ENDIF.
  ENDMETHOD.

4.图表CHART分析 feed class

SE11创建CHART的数据结构

因为时间有限,这里偷懒,直接用class的静态属性在多个组件之间共享数据,有更标准的做法

后续有时间再写blog演示

GET_DEFINITION代码

  METHOD if_fpm_guibb_chart~get_definition.

    DATA lo_field_catalog TYPE REF TO cl_abap_tabledescr.

    lo_field_catalog ?= cl_abap_tabledescr=>describe_by_name( 'ZTYT_FIFO_CHART'  ).

    io_chart_model->get_table_model( )->set_definition(
      EXPORTING
        io_field_catalog     = lo_field_catalog    " Runtime Type Services

    ).

  ENDMETHOD.

GET_DATA代码

  METHOD if_fpm_guibb_chart~get_data.
    IF io_event->mv_event_id = if_fpm_guibb_list=>gc_event_list_filter.
      io_chart_data->get_table_model( )->set_data(
      EXPORTING
        it_data = gt_fifo
      ).

    ENDIF.
  ENDMETHOD.

5.事务码FPM_WB创建组件配置

由于我之前已经创建过了,截图都是编辑状态的,和新建略有差异

5.1 创建查询组件的配置

输入步骤2的feed class

添加搜索条件

5.2 创建列表组件的配置

输入步骤3创建的feed class

添加列

5.3 创建图表组件的配置

输入步骤4创建的feed class

图表类型选条形图

5.4 创建OVP概览页面组件配置

通过FPM_OVP_COMPONENT概览页面组件把查询,列表,CHART等组件UIBB BLOCK组合到一个页面

6.创建应用程序配置

点击test fpm应用程序效果

http://www.dtcms.com/a/98296.html

相关文章:

  • 污水处理厂人员定位方案-UWB免布线高精度定位
  • 2025“钉耙编程”中国大学生算法设计春季联赛(4)题解
  • 华为交换综合实验——VRRP、MSTP、Eth-trunk、NAT、DHCP等技术应用
  • 如何使用K8S快速部署测试环境
  • 蓝桥刷题note11(好数)
  • 【湖北工业大学2025年ACM校赛(同步赛)】题解
  • 【数据结构】[特殊字符] 并查集优化全解:从链式退化到近O(1)的性能飞跃 | 路径压缩与合并策略深度实战
  • Windows catime 番茄时钟-v1.0.5-开源简洁的 Windows 倒计时工具,支持番茄时钟功能
  • Enhanced PEC-YOLO:电力施工场景安全装备检测的轻量化算法解析
  • 树莓派超全系列文档--(12)如何使用raspi-config工具其一
  • 处理 Linux 信号:进程控制与异常管理的核心
  • JSP(实验):带验证码的用户登录
  • JavaScript基础知识初步掌握
  • 【免费】2007-2019年各省地方财政文化体育与传媒支出数据
  • 19839 Dijkstra求最短路1
  • kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂
  • c++学习系列----005.c++模板(类模板)
  • 人工智能在自然语言处理中的应用:从理论到实践的探索
  • 在一个scss文件中定义变量,在另一个scss文件中使用
  • 【Linux】——文件(上)
  • 缓存使用纪要
  • mcp 接freecad画齿轮
  • 《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)
  • 阅读分析Linux0.11 /boot/bootsect.s
  • 显示文献是几区的免费科研插件easyScholar
  • 基于盛科CTC7132交换机核心模块
  • SpringBoot (一) 自动配置原理
  • 字典翻转教学
  • 买卖股票的最佳时机(121)
  • Kubernetes对象基础操作