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

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的基本实施已完成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL 拟合二维椭圆(迭代法)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 一般情况,我们会用椭圆拟合二维点,用椭球拟合三维点。在n维中,这些对象被称为超椭球体,由二次方程隐式定义 超椭球的中心是n1向量C,nn矩阵S是正定的,n1向量X是超椭球上的任意点。矩阵S可以用特征分解,S = R…

前端学习笔记100篇之002:Webpack简明教程(持续完善中)

文章目录 1. **安装和初始化**2. **创建和配置入口文件**3. **编写和配置Webpack配置文件**4. **打包和运行项目** Webpack是一个静态模块打包工具&#xff0c;适用于前端项目构建和模块化开发。Webpack通过从入口文件构建依赖图&#xff0c;然后打包相关的模块&#xff0c;最终…

数据库管理-第205期 换个角度看23ai(20240617)

数据库管理205期 2024-06-17 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09;1 规范应用开发2 融合总结 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE Pro…

【Linux】进程间通信2——命名管道

1. 命名管道(FIFO) 1.1. 基本概念 简单&#xff0c;给匿名管道起个名字就变成了命名管道 那么如何给 匿名管道 起名字呢&#xff1f; 结合文件系统&#xff0c;给匿名管道这个纯纯的内存文件分配 inode&#xff0c;将文件名与之构建联系&#xff0c;关键点在于不给它分配 D…

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors 块设备名称为&#xff1a; /dev/sda 设备的大小为&#xff1a;107.4 GB 107374182400 bytes &#xff1a; 107374182400/1024/1024/1024100G &#xff08;1&#xff09;块设备名称为&#xff1a;/dev/sd…

qt笔记之qml和C++的交互系列(二):rootObject

qt笔记之qml和C的交互系列(二)&#xff1a;rootObject code review! —— 2024-06-17 杭州 夜 文章目录 qt笔记之qml和C的交互系列(二)&#xff1a;rootObject一.使用rootObject例程1.运行2.main.cpp3.main.qml3.用于Debug的加长版main.cpp 二.QML文件的根对象详解基本概念常…

【减法网络】Minusformer:通过逐步学习残差来改进时间序列预测

摘要 本文发现泛在时间序列(TS)预测模型容易出现严重的过拟合。为了解决这个问题&#xff0c;我们采用了一种去冗余的方法来逐步恢复TS的真实值。具体来说&#xff0c;我们引入了一种双流和减法机制&#xff0c;这是一种深度Boosting集成学习方法。通过将信息聚合机制从加法转…

【最全面最优质的PyTorch学习资源】

纯 PyTorch 资源 PyTorch 博客 https://pytorch.org/blog/ PyTorch 文档 https://pytorch.org/docs PyTorch 性能调优指南 https://pytorch.org/tutorials/recipes/recipes/tuning_guide.html# PyTorch Recipes https://pytorch.org/tutorials/recipes/recipes_index.h…

AI 有感:智能体 = 提示词工程 + 大模型算力 + 插件类工具?

回顾 继这篇文章推出&#xff1a;怎么看 AI 大模型&#xff08;LLM&#xff09;、智能体&#xff08;Agent&#xff09;、知识库、向量数据库、知识图谱&#xff0c;RAG&#xff0c;AGI 的不同形态&#xff1f; 引起了很多粉丝朋友的反响&#xff0c;随着目前各大模型的发布以…

PBC密码库安装及使用教程

文章目录 1.PBC库介绍2.PBC库安装3.PBC库使用4.相关API4.1 配对的初始化和释放4.2 元素的初始化和释放4.3 元素的赋值4.4 哈希4.5 元素的常用运算4.6 元素的幂运算4.7 元素的比较4.8 从群中随机选取一个元素&#xff08;常用&#xff09;4.9 配对的运算4.10 小结 5.Some exampl…

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…

牛客周赛 E-茜茜的计算器

原题链接&#xff1a;E-茜茜的计算器​​​​​​ 题目大意&#xff1a;在计算器上显示的0~9十个数字&#xff0c;如果这个计算器有n个位置&#xff0c;可以显示n个数字&#xff0c;问能显示多少种不同的对称数字。只能横轴和竖轴对称。 思路&#xff1a;容斥&#xff0c;最终…

Docker(二)-Centos7安装Docker并配置镜像加速

系统用户为非root用户 1.安装条件 确定Centos版本是否是7及以上sudo vim /etc/redhat-release2.官网地址 https://docs.docker.com/engine/install/centos3.卸载已安装的旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-lates…

数字孪生定义及应用介绍

数字孪生定义及应用介绍 1 数字孪生&#xff08;Digital Twin, DT&#xff09;概述1.1 定义1.2 功能1.3 使用场景1.4 数字孪生三步走1.4.1 数字模型1.4.2 数字影子1.4.3 数字孪生 数字孪生地球平台Earth-2 参考 1 数字孪生&#xff08;Digital Twin, DT&#xff09;概述 数字孪…

项目(一)--高并发内存池项目简介

什么是高并发内存池 它是一个全球性大厂google(谷歌)的 开源项目,项目名字叫tcmalloc,全称是Thread-Caching Malloc,即线程缓存的malloc 作用&#xff1a; 我们知道C语言在堆上开辟空间和 释放使用的是malloc和free函数 并且C的动态内存管理new和delete 的底层实际上也调用了…

白酒行业数字化营销转型方向

白酒行业正站在数字化营销的新风口&#xff0c;随着科技的迅猛发展和消费者行为模式的变革&#xff0c;这一传统行业正迎来前所未有的发展机遇。数字化营销不仅为白酒企业打开了新的市场大门&#xff0c;更在重塑消费者与品牌之间的关系&#xff0c;推动行业向更智能、更个性化…

day02论文学习:能够使大语言模型产生带有引用的文章

1.主题&#xff1a;Enabling Large Language Models to Generate Text with Citations&#xff08;能够使大语言模型产生带有引用的文章&#xff09; 引用出处&#xff1a; Gao, T., Yen, H., Yu, J., & Chen, D. (2023). Enabling Large Language Models to Generate Tex…

05通讯录管理系统——添加联系人

功能描述&#xff1a;实现添加联系人功能&#xff0c;联系人上限为1000人&#xff0c;联系人信息包括姓名、性别、年龄、联系电话、家庭住址。 添加联系人实现步骤&#xff1a; 1.设计联系人结构体 2.设计通讯录结构体 3.main函数中创建通讯录 4.封装添加联系人函数 5.测…

2024-06-17 问AI: 在深度学习中,harmonic mean是什么?

文心一言 在深度学习中&#xff0c;**harmonic mean&#xff08;调和平均数&#xff09;**是一个用于评估模型性能的指标&#xff0c;特别是在处理不平衡的数据集或需要综合多个评估指标的场景中。以下是关于harmonic mean在深度学习中应用的详细解释&#xff1a; 定义&#…

多态深度剖析

前言 继承是多态的基础&#xff0c; 如果对于继承的知识还不够了解&#xff0c; 可以去阅读上一篇文章 继承深度剖析 基本概念与定义 概念&#xff1a; 通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c; 当不同的对象去完成时会产生出不同的状…