RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施

news2024/11/26 9:37:23

1、通过事务码 SE24对Feeder Class实施

1)接口页签的简单说明:
在这里插入图片描述① IF_FPM_GUIBB:通用UI构建块,整个UIBB模块的基础接口;
② IF_FPM_GUIBB_SEARCH:通用搜索UI构建块,搜索组件UIBB的基础接口;
③ IF_FPM_GUIBB_LIST:通用列表UI构建块,列表组件UIBB的基础接口;
④ IF_FPM_GUIBB_OVS_SEARCH:FPM搜索:用于相关搜索的特殊OVS接口,用于特殊搜索条件字段扩展(例如搜索帮助引用等);
⑤ IF_FPM_GUIBB_OVS:接口提供回调方法使用OVS(Object Value Selector)与POWL(Personal Object Worklist),添加IF_FPM_GUIBB_OVS_SEARCH时会自动带出该接口,一般是嵌套使用;
备注:IF_FPM_GUIBB_OVS_SEARCH提供GUIBB搜索的搜索条件,IF_FPM_GUIBB_OVS返回搜索条件的结果。
IF_FPM_GUIBB_OVS包括以下四个方法:
在这里插入图片描述HANDLE_PHASE_0:OVS配置,通过调用IF_WD_OVS->set_configuration返回配置的字段;
HANDLE_PHASE_1:OVS初始化字段;
HANDLE_PHASE_2:获取数据,通过调用IF_WD_OVS->set_output_table返回配置字段的结果;
HANDLE_PHASE_3:设置返回值;
2)Feeder Class中的基本方法:在接口页签继承的接口,自然也会把其中的方法继承过来;
在这里插入图片描述备注:后续列表组件List UIBB的FeederClass的实施便是此处的List UIBB的方法

3)搜索组件Search UIBB方法的实施(包括OVS的方法);
①、方法IF_FPM_GUIBB_OVS_SEARCH~SET_CURRENT_SEARCH_CRITERIA:传递当前搜索界面的信息

  METHOD IF_FPM_GUIBB_OVS_SEARCH~SET_CURRENT_SEARCH_CRITERIA.
    MT_SEARCH_CRITERIA = IT_FPM_SEARCH_CRITERIA.
  ENDMETHOD.

②、方法IF_FPM_GUIBB_OVS~HANDLE_PHASE_0:配置OVS返回值字段;

METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_0 .
  DATA: LS_COLUNM_TEXT TYPE WDR_NAME_VALUE.
  DATA: LT_COLUNM_TEXT TYPE WDR_NAME_VALUE_LIST.
  DATA: LV_HEADER_TEXT TYPE STRING.

  CASE IV_FIELD_NAME.
    WHEN 'ZJBBM'.
      LV_HEADER_TEXT = '总监部'.
      LS_COLUNM_TEXT-NAME = 'ORGID'.
      LS_COLUNM_TEXT-VALUE = '总监部编码'.
      APPEND LS_COLUNM_TEXT TO LT_COLUNM_TEXT.
      CLEAR LS_COLUNM_TEXT.

      LS_COLUNM_TEXT-NAME = 'ORGNM'.
      LS_COLUNM_TEXT-VALUE = '总监部名称'.
      APPEND LS_COLUNM_TEXT TO LT_COLUNM_TEXT.
      CLEAR LS_COLUNM_TEXT.

      CALL METHOD IO_OVS_CALLBACK->SET_CONFIGURATION
        EXPORTING
          GROUP_HEADER = LV_HEADER_TEXT
          COLUMN_TEXTS = LT_COLUNM_TEXT
          COL_COUNT    = 2
          ROW_COUNT    = 20.

  ENDCASE.
ENDMETHOD.

③、方法IF_FPM_GUIBB_OVS~HANDLE_PHASE_1:
无实施要求,直接激活;
④、方法IF_FPM_GUIBB_OVS~HANDLE_PHASE_2:获取配置字段的值;

METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_2 .
  DATA: LV_QYBM TYPE PHINR.
  DATA: LT_ZJB TYPE STANDARD TABLE OF TS_ORG.
  DATA:LT_ZJBBM TYPE TABLE OF ZSJBBM,
       LS_ZJBBM TYPE ZSJBBM.


  CASE IV_FIELD_NAME.
    WHEN 'ZJBBM'.
      READ TABLE MT_SEARCH_CRITERIA ASSIGNING FIELD-SYMBOL(<FS_SEARCH_CRITERIA>) WITH KEY SEARCH_ATTRIBUTE = 'QYBM'.
      IF SY-SUBRC = 0.
        LV_QYBM = <FS_SEARCH_CRITERIA>-LOW.
      ENDIF.

      IF LV_QYBM IS NOT INITIAL.
        DATA(LT_ZJBBM_FIXED_VALUES) = ZRRE_CL_LIB_CCM_UTIL=>GET_ZJB_FIXED_VALUES( IV_QYBM = LV_QYBM ).
        SORT LT_ZJBBM_FIXED_VALUES BY VALUE.
      ENDIF.

      CALL FUNCTION 'ZFM_GET_RCS_AUTH'
        EXPORTING
          IV_OBJECT = 'ZRRE_CONT'
        TABLES
          OT_JBBM   = LT_ZJBBM.

      LOOP AT LT_ZJBBM_FIXED_VALUES ASSIGNING FIELD-SYMBOL(<FS_FIXED_VALUES>).
        READ TABLE LT_ZJBBM INTO DATA(PS_ZJBBM) WITH KEY ID = '*'."* 号直接汇总
        IF SY-SUBRC = 0.
          APPEND INITIAL LINE TO LT_ZJB ASSIGNING FIELD-SYMBOL(<FS_ZJB>).
          <FS_ZJB>-ORGID = <FS_FIXED_VALUES>-VALUE.
          <FS_ZJB>-ORGNM = <FS_FIXED_VALUES>-TEXT.
        ELSE.
          READ TABLE LT_ZJBBM INTO LS_ZJBBM WITH KEY ID = <FS_FIXED_VALUES>-VALUE.
          IF SY-SUBRC = 0."非 * 号按照授权范围汇总
            APPEND INITIAL LINE TO LT_ZJB ASSIGNING FIELD-SYMBOL(<FS_ZJBBM>).
            <FS_ZJBBM>-ORGID = <FS_FIXED_VALUES>-VALUE.
            <FS_ZJBBM>-ORGNM = <FS_FIXED_VALUES>-TEXT.
          ENDIF.
        ENDIF.

      ENDLOOP.
      SORT LT_ZJB BY ORGID.
      CALL METHOD IO_OVS_CALLBACK->SET_OUTPUT_TABLE
        EXPORTING
          OUTPUT = LT_ZJB.
  ENDCASE.
ENDMETHOD.

⑤、方法IF_FPM_GUIBB_OVS~HANDLE_PHASE_3:设置返回值;

METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_3 .
  FIELD-SYMBOLS: <FS_ZJB> TYPE TS_ORG.
  DATA: LO_FPM TYPE REF TO IF_FPM.

  LO_FPM ?= CL_FPM_FACTORY=>GET_INSTANCE( ).
  CASE IV_FIELD_NAME.
    WHEN 'ZJBBM'.
      ASSIGN IO_OVS_CALLBACK->SELECTION->* TO <FS_ZJB> .
      IF <FS_ZJB> IS ASSIGNED.
        CALL METHOD IO_OVS_CALLBACK->CONTEXT_ELEMENT->SET_ATTRIBUTE(
            NAME  = IO_OVS_CALLBACK->CONTEXT_ATTRIBUTE
            VALUE = <FS_ZJB>-ORGID ).
        CREATE OBJECT EO_FPM_EVENT
          EXPORTING
            IV_EVENT_ID = 'HANDLE_ENTERED'.
      ENDIF.
  ENDCASE.
ENDMETHOD.

⑥、方法IF_FPM_GUIBB~INITIALIZE:初始化UIBB页面,根据BOPF的常量接口的SC_BO_KEY指定BO对象

METHOD IF_FPM_GUIBB~INITIALIZE.
    MO_FPM ?= CL_FPM_FACTORY=>GET_INSTANCE( ).
    MO_SRV_MGR = /BOBF/CL_TRA_SERV_MGR_FACTORY=>GET_SERVICE_MANAGER( ZRRE_IF_YSYFBL_C=>SC_BO_KEY ).
  ENDMETHOD.

⑦、方法IF_FPM_GUIBB~GET_PARAMETER_LIST:获取表单提供程序支持的参数列表;
无实施需求,直接激活。
⑧、方法IF_FPM_GUIBB_SEARCH~GET_DEFINITION:搜索条件字段引用搜索帮助等;

 DATA: LT_ENUMERATION TYPE FPMGB_T_NAMEVALUE,
          LT_FIXED_VALUE TYPE WDR_CONTEXT_ATTR_VALUE_LIST.
    EO_FIELD_CATALOG_ATTR ?= CL_ABAP_TABLEDESCR=>DESCRIBE_BY_NAME( 'ZRRE_S_BO_YSYFBL_ROOT_C' ).

    APPEND VALUE #( NAME = 'PRJID' DDIC_SHLP_NAME = 'ZRRE_H_PRJ' ) TO ET_FIELD_DESCRIPTION_ATTR.
    APPEND VALUE #( NAME = 'LIFNR' DDIC_SHLP_NAME = 'ZRRE_H_BP' ) TO ET_FIELD_DESCRIPTION_ATTR.

    CLEAR:LT_FIXED_VALUE,LT_ENUMERATION.
    LT_FIXED_VALUE = ZRRE_CL_LIB_CCM_UTIL=>GET_QY3_FIXED_VALUES( ).
    LT_ENUMERATION  = CORRESPONDING #( LT_FIXED_VALUE MAPPING NAME = TEXT ).
    APPEND VALUE #( NAME = 'QYBM' ENUMERATION = LT_ENUMERATION MAX_1_VALUE = ABAP_FALSE ) TO ET_FIELD_DESCRIPTION_ATTR.

    APPEND VALUE #( NAME = 'ZJBBM' OVS_NAME  = 'ZRRE_CL_FD_YSYFBL_SEARCH' MAX_1_VALUE = ABAP_FALSE ) TO ET_FIELD_DESCRIPTION_ATTR.

⑨方法IF_FPM_GUIBB_SEARCH~GET_DATA:发起SEARCH操作事件,用于搜索条件下一步获取数据;

 METHOD IF_FPM_GUIBB_SEARCH~GET_DATA.
    DATA: LO_SRV_MGR TYPE REF TO /BOBF/IF_TRA_SERVICE_MANAGER,
          LO_FPM     TYPE REF TO IF_FPM.
    DATA: LT_SELECTION_PARAMETERS TYPE /BOBF/T_FRW_QUERY_SELPARAM,
          LS_SELECTION_PARAMETERS TYPE /BOBF/S_FRW_QUERY_SELPARAM,
          LS_QUERY_OPTIONS        TYPE /BOBF/S_FRW_QUERY_OPTIONS.
    DATA CORE_OBJECT TYPE REF TO /BOBF/IF_TRA_SERVICE_MANAGER .
    DATA: LS_RSDS TYPE RSDSSELOPT.
    DATA: LV_AUTH TYPE BOOLEAN.
    DATA:LT_JBBM           TYPE TABLE OF ZSJBBM,
         LS_JBBM           TYPE ZSJBBM,
         LS_MESSAGES       TYPE FPMGB_SEARCH_S_T100_MESSAGE,
         LS_QUERY_SELPARAM TYPE /BOBF/S_FRW_QUERY_SELPARAM,
         LV_MSG            TYPE STRING.

    LO_FPM ?= CL_FPM_FACTORY=>GET_INSTANCE( ).
    LO_SRV_MGR = /BOBF/CL_TRA_SERV_MGR_FACTORY=>GET_SERVICE_MANAGER( ZRRE_IF_YSYFBL_C=>SC_BO_KEY ).

    CASE IO_EVENT->MV_EVENT_ID.
      WHEN 'FPM_EXECUTE_SEARCH'.

        LOOP AT CT_FPM_SEARCH_CRITERIA ASSIGNING FIELD-SYMBOL(<FS_FPM_SEARCH>) WHERE LOW IS NOT INITIAL.

          LS_SELECTION_PARAMETERS-ATTRIBUTE_NAME = <FS_FPM_SEARCH>-SEARCH_ATTRIBUTE.
          TRY.
              LS_RSDS = CL_FPM_GUIBB_SEARCH_CONVERSION=>TO_ABAP_SELECT_OPTION( IS_FPM_SEARCH_ROW = <FS_FPM_SEARCH> ).
            CATCH CX_FPMGB.
              CONTINUE.
          ENDTRY.
          LS_SELECTION_PARAMETERS-SIGN = LS_RSDS-SIGN.
          LS_SELECTION_PARAMETERS-OPTION = LS_RSDS-OPTION.
          LS_SELECTION_PARAMETERS-LOW = LS_RSDS-LOW.
          LS_SELECTION_PARAMETERS-HIGH = LS_RSDS-HIGH.
          APPEND LS_SELECTION_PARAMETERS TO LT_SELECTION_PARAMETERS.
          CLEAR  LS_SELECTION_PARAMETERS.
        ENDLOOP.

        IF MV_MAXLINES IS NOT INITIAL.
          LS_QUERY_OPTIONS-MAXIMUM_ROWS = MV_MAXLINES.
        ENDIF.

        "不输入总监部情况下 获取权限内所有总监部
        READ TABLE LT_SELECTION_PARAMETERS INTO DATA(LS_SEL) WITH KEY ATTRIBUTE_NAME = 'ZJBBM'.
        IF SY-SUBRC <> 0.
          CALL FUNCTION 'ZFM_GET_RCS_AUTH'
            EXPORTING
              IV_OBJECT = 'ZRRE_CONT'
            TABLES
              OT_JBBM   = LT_JBBM.

          IF LT_JBBM[] IS INITIAL.
            MESSAGE E237(/RER/CO) INTO LV_MSG.
            LS_MESSAGES-MSGID = SY-MSGID.
            LS_MESSAGES-MSGNO = SY-MSGNO.
            LS_MESSAGES-SEVERITY = 'E'.
            APPEND LS_MESSAGES TO ET_MESSAGES.
            RETURN.
          ENDIF.

          READ TABLE LT_JBBM INTO DATA(PS_JBBM) WITH KEY ID = '*'.
          IF SY-SUBRC <> 0.
            LOOP AT LT_JBBM INTO LS_JBBM WHERE ID <> '*'.
              LS_QUERY_SELPARAM-ATTRIBUTE_NAME ='ZJBBM'.
              LS_QUERY_SELPARAM-SIGN = 'I'.
              LS_QUERY_SELPARAM-OPTION = 'EQ'.
              LS_QUERY_SELPARAM-LOW = LS_JBBM-ID.
              APPEND LS_QUERY_SELPARAM TO LT_SELECTION_PARAMETERS.
            ENDLOOP.
          ENDIF.
        ENDIF.

        LO_SRV_MGR->QUERY(
        EXPORTING
        IV_QUERY_KEY = ZRRE_IF_YSYFBL_C=>SC_QUERY-ROOT-SELECT_BY_ATTRS
        IT_SELECTION_PARAMETERS = LT_SELECTION_PARAMETERS
        IS_QUERY_OPTIONS = LS_QUERY_OPTIONS
        IV_FILL_DATA     = ABAP_TRUE
        IMPORTING
          ET_DATA = MT_RESULT ).

        IF MT_RESULT[] IS INITIAL.
          MESSAGE E229(/RER/CO) INTO LV_MSG.
          LS_MESSAGES-MSGID = SY-MSGID.
          LS_MESSAGES-MSGNO = SY-MSGNO.
          LS_MESSAGES-SEVERITY = 'E'.
          APPEND LS_MESSAGES TO ET_MESSAGES.
          RETURN.
        ENDIF.

        CALL METHOD LO_FPM->RAISE_EVENT_BY_ID
          EXPORTING
            IV_EVENT_ID = 'REFRESH'.

    ENDCASE.
  ENDMETHOD.

其他无实施需求方法不再一一列举了。
到此,Search UIBB对应Feeder Class的基本实施已完成。

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

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

相关文章

操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法 在了解完进程和线程的概念后&#xff0c;我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程&#xff0c;因此我们就需要了解CPU的调度算法 1.CPU调度 1.1概念 CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。 1.2调度…

外链是否会增加流量?

外链确实可以间接地帮助增加网站流量&#xff0c;不过要了解的是这不是直接影响&#xff0c;首先&#xff0c;外链主要是提升你的网站在搜索引擎中的整体权重。简单地说&#xff0c;当你的网站被很多其他的网站通过dofollow链接指向时&#xff0c;搜索引擎会认为你的网站内容质…

TCP三次握手和四次挥手过程简介(抓包分析,简单易懂,小白)

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次&#xff0c;点赞10次&#xff0c;收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包&#xff0c;并尝试显示包的尽可能详细…

SQL Server数据库安装

原文&#xff1a;https://blog.c12th.cn/archives/26.html SQL Server数据库安装 测试&#xff1a;笔记本原装操作系统&#xff1a;Windows 10 家庭中文版 资源分享链接&#xff1a;提取码&#xff1a;qbt2 注意事项&#xff1a; 请严格按照步骤安装&#xff0c;SQL软件安装较…

单片机 PWM输入捕获【学习记录】

前言 学习是永无止境的&#xff0c;就算之前学过的东西再次学习一遍也能狗学习到很多东西&#xff0c;输入捕获很早之前就用过了&#xff0c;但是仅仅是照搬例程没有去进行理解。温故而知新&#xff01; 定时器 定时器简介 定时器的分类 高级定时器 通用定时器 基本定时器…

用TensorRT-LLM进行LLama的推理和部署

Deploy an AI Coding Assistant with NVIDIA TensorRT-LLM and NVIDIA Triton | NVIDIA Technical BlogQuick Start Guide — tensorrt_llm documentation (nvidia.github.io) 使用TensorRT-LLM的源码&#xff0c;来下载docker并在docker里编译TensorRT-LLM&#xff1b; 模型…

LabVIEW回热系统热经济性分析及故障诊断

开发了一种利用LabVIEW软件的电厂回热系统热经济性分析和故障诊断系统。该系统针对火电厂回热加热器进行优化&#xff0c;通过实时数据监控与分析&#xff0c;有效提高机组的经济性和安全性&#xff0c;同时降低能耗和维护成本。系统的实施大幅提升了火电厂运行的效率和可靠性&…

【调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布】

调试笔记-系列文章目录 调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 文章目录 调试笔记-系列文章目录调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试…

CSS-0_2 CSS和继承(inherit initial)

文章目录 CSS的层叠和继承inheritinitial很多你以为的样式初始值&#xff0c;其实是用户代理样式 碎碎念 CSS的层叠和继承 在上一篇 CSS和层叠、样式优先级 里已经讲过了层叠和优先级之间的关系&#xff0c;但是在CSS中的层叠除了体现在争抢露脸机会的优先级之外&#xff0c;还…

HTML/CSS Xiaomi综合案例day 6.13-6.16

ok了家人们今天不做别的&#xff0c;今天浅做一个小米网站&#xff0c;话不多说看看怎么事 一.顶部 我们先看看代码 1&#xff0c;html 2&#xff0c;css代码 1.我们先消除浏览器自带的内外边距&#xff0c;添加一个总背景颜色为浅灰色&#xff0c;设置顶部盒子的大小&#x…

【电脑小白】装机从认识电脑部件开始

前言 在 B 站上刷到了一个很牛逼的电脑装机视频&#xff0c;很适合电脑小白学习&#xff0c;故用文本记录下。 推荐对组装台式电脑有兴趣的小伙伴都去看看这个视频&#xff1a; 原视频链接&#xff1a;【装机教程】全网最好的装机教程&#xff0c;没有之一_哔哩哔哩_bilibil…

JVM-GC-常用调优命令和GC参数

定位问题常用命令 top&#xff1a;查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息&#xff0c;一般查看线程状态&#xff0c;判断是否死锁。重点观察&#xff1a;WAITING、BLOCKED的线程&#xff0c;另外查看wait…

【网络安全】网络安全威胁及途径

1、网络安全威胁的种类及途径 &#xff08;1&#xff09;网络安全威胁的主要类型 网络安全面临的威胁和隐患种类繁多&#xff0c;主要包括人为因素、网络系统及数据资源和运行环境等影响。网络安全威胁主要表现为&#xff1a;黑客入侵、非授权访问、窃听、假冒合法用户、病毒…

【读博日记】拓扑结构(待修正)

Topology 拓扑学 内容来源于互联网&#xff0c;还在甄别中——20240617 拓扑结构指把实体抽象成与其形状大小无关的点&#xff0c;把连接实体的线路抽象成线&#xff0c;再研究这些电线之间的关系。 所谓相似的拓扑结构&#xff1a; 例如一个圆环变成正方形、长方形、三角形…

基 CanMV 的 C 开发环境搭建

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件&#xff0c;都需要搭建基于 CanMV 的 C 开发环境&#xff0c;用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

读AI新生:破解人机共存密码笔记04计算的极限

1. 计算的极限 1.1. 光靠速度是无法给我们带来人工智能的 1.1.1. 在速度更快的计算机上运行糟糕的算法并不会使算法变得更优秀&#xff0c;这只意味着你会更快地得到错误的答案 1.1.2. 数据越多&#xff0c;错误答案出现的机会就越大 1.…

EE trade:现货黄金杠杆比例的计算方法

现货黄金杠杆交易是一种利用保证金进行交易的方式&#xff0c;允许投资者用较少的资金控制较大的交易量&#xff0c;从而放大收益或损失。杠杆比例的计算方法相对简单&#xff0c;主要取决于交易所需的保证金和实际交易金额之间的关系。 杠杆比例的计算公式 杠杆比例 实际交…

使用插件永久解决IDEA使用Shift+F10失效问题(不需要换老版本输入法)

在日常编程中&#xff0c;使用快捷键可以大大提高开发效率。然而&#xff0c;有时候我们会遇到IDEA 中&#xff0c;ShiftF10 快捷键失效。这个蛋疼的问题现在终于可以得到解决&#xff0c;上个月在逛V2EX的时候看见一位大佬做的插件。 大佬链接&#xff1a;https://www.v2ex.c…

物联网技术-第4章物联网通信技术-4.1计算机网络

目录 1.1计算机网络拓扑与组成 &#xff08;1&#xff09;全连通式网络 &#xff08;2&#xff09;星型网 &#xff08;3&#xff09;环形网 &#xff08;4&#xff09;总线网 &#xff08;5&#xff09;不规则型网 1.2数据交换类型 &#xff08;1&#xff09;电路交换网 &…

STM32单片机DMA存储器详解

文章目录 1. DMA概述 2. 存储器映像 3. DMA框架图 4. DMA请求 5. 数据宽度与对齐 6. DMA数据转运 7. ADC扫描模式和DMA 8. 代码示例 1. DMA概述 DMA&#xff08;Direct Memory Access&#xff09;可以直接访问STM32内部的存储器&#xff0c;DMA是一种技术&#xff0c;…