FPM Search里给查询条件加OVS搜索帮助

Posted sapsb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FPM Search里给查询条件加OVS搜索帮助相关的知识,希望对你有一定的参考价值。

FPM里的OVS用法基本和WDA一致。

1,将OVS类添加到SEARCH.(可以单独写个类,因为这里为了方便,就和SEARCH放一起了)

技术图片

 

 

IF_FPM_GUIBB_OVS~HANDLE_PHASE_0   Phase 0 (OVS config, c.f. IF_WD_OVS->set_configuration( ))“设置显示字段
IF_FPM_GUIBB_OVS~HANDLE_PHASE_1   Phase 1 (initialize fields, c.f. set_input_structure( ))"设置输入查询条件
IF_FPM_GUIBB_OVS~HANDLE_PHASE_2    Phase 2 (search, c.f. query_parameters, set_output_table( ))"查询处理
IF_FPM_GUIBB_OVS~HANDLE_PHASE_3    Phase 3 (set return value, c.f. selection)"返回结果

先在SEARCH的定义里,定义使用OVS。

  METHOD if_fpm_guibb_search~get_definition.
    DATA:gt_field TYPE TABLE OF fpmgb_s_searchfield_descr,
         gw_field TYPE fpmgb_s_searchfield_descr,
         gt_value TYPE fpmgb_t_namevalue,
         gw_value TYPE fpmgb_s_namevalue.

    DEFINE setv.
      gw_value-value = &1.
      gw_value-name = &2.
      APPEND gw_value TO gt_value.
    END-OF-DEFINITION.

    eo_field_catalog_attr ?= cl_abap_structdescr=>describe_by_name( ZCRMJP002 ).
    "品牌下拉
    gw_field-name = ZZZBRAND.
    SELECT line_key AS value value1 AS name INTO CORRESPONDING FIELDS OF TABLE gt_value FROM zcrmt_domain_t WHERE tab_name = ZTVS_BRAND AND spras = sy-langu.
    gw_field-enumeration[] = gt_value[].
    gw_field-is_of_type = EN.
    APPEND gw_field TO et_field_description_attr.

    "inprogress 下拉
    CLEAR:gt_value[],gw_field.
    gw_field-name = ZZDLYRSN.
    SELECT estat AS value text AS name INTO CORRESPONDING FIELDS OF TABLE gt_value FROM zdelay_reason WHERE  spras = J."sy-langu.
    gw_field-enumeration[] = gt_value[].
    gw_field-is_of_type = EN.
    APPEND gw_field TO et_field_description_attr.

    "inprogress 下拉
    CLEAR:gt_value[],gw_field.
    gw_field-name = DATE_RANGE.
    setv D+0 D+0 今日.
    setv D-1 D-1 昨日.
    setv M+0 M+0 今月.
    setv M-1 M-1 先月.
*    setv ‘W+0‘ ‘W+0 今週‘.
*    setv ‘W-1‘ ‘W-1 先週‘.
    setv Y+0 Y+0 今年.
    setv Y-1 Y-1 去年.
    gw_field-enumeration[] = gt_value[].
    gw_field-max_1_value = X.
    gw_field-is_of_type = EN.
    APPEND gw_field TO et_field_description_attr.

    "CHARG TYPE 下拉
    CLEAR:gt_value[],gw_field.
    gw_field-name = ZZCHARG_TYPE.
    SELECT line_key AS value value1 AS name INTO CORRESPONDING FIELDS OF TABLE gt_value
      FROM zcrmt_domain_t WHERE  spras = J"sy-langu.
       AND tab_name = ZJP_REPAIR_CHARGETPYE.
    gw_field-enumeration[] = gt_value[].
    gw_field-is_of_type = EN.
    APPEND gw_field TO et_field_description_attr.

    "Process Type 下拉
    CLEAR:gt_value[],gw_field.
    gw_field-name = PROCESS_TYPE.
    gw_field-ovs_name = ZCL_FPM_DEMO_SEARCH.
    APPEND gw_field TO et_field_description_attr.
  ENDMETHOD.

 

定义结构:

  METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_0.
    DATA:LT_COL TYPE WDR_NAME_VALUE_LIST,
         LS_COL TYPE WDR_NAME_VALUE.
    IF IV_FIELD_NAME = PROCESS_TYPE.
      LS_COL-NAME = PROCESS_TYPE.
      LS_COL-VALUE = Porcess Type.
      APPEND LS_COL TO LT_COL.
      LS_COL-NAME = P_DESCRIPTION_20.
      LS_COL-VALUE = Description.
      APPEND LS_COL TO LT_COL.
    ENDIF.

    IO_OVS_CALLBACK->SET_CONFIGURATION(
        WINDOW_TITLE       = Process Type
*        GROUP_HEADER       = GROUP_HEADER
*        LABEL_TEXTS        = LABEL_TEXTS
        TABLE_HEADER       = Process Type List
        COLUMN_TEXTS       = LT_COL
*        COL_COUNT          = COL_COUNT
*        ROW_COUNT          = ROW_COUNT
*        TABLE_MULTI_SELECT = TABLE_MULTI_SELECT
           ).

  ENDMETHOD.

 

定义查询字段:

  METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_1.
    TYPES:BEGIN OF TY_PROCE,
            PROCESS_TYPE TYPE CRMT_PROCESS_TYPE,
            DESCRIPTION  TYPE  CRMT_DESCRIPTION_20,
          END OF TY_PROCE.
    DATA:LS_INPUT TYPE TY_PROCE.

    IF IV_FIELD_NAME = PROCESS_TYPE.
      IO_OVS_CALLBACK->CONTEXT_ELEMENT->GET_ATTRIBUTE(
        EXPORTING
          NAME   = IO_OVS_CALLBACK->CONTEXT_ATTRIBUTE
        IMPORTING
          VALUE  = LS_INPUT-PROCESS_TYPE
             ).
      IO_OVS_CALLBACK->SET_INPUT_STRUCTURE(
        EXPORTING
          INPUT  = LS_INPUT
             ).
    ENDIF.
  ENDMETHOD.

查询及输出:

  METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_2.
    TYPES:BEGIN OF TY_PROCE,
            PROCESS_TYPE TYPE CRMT_PROCESS_TYPE,
            DESCRIPTION  TYPE CRMT_DESCRIPTION_20,
          END OF TY_PROCE.
    DATA:GT_LIST TYPE TABLE OF TY_PROCE.
    FIELD-SYMBOLS:<FS> TYPE TY_PROCE.

    ASSIGN IO_OVS_CALLBACK->QUERY_PARAMETERS->* TO <FS>.
    IF <FS>-PROCESS_TYPE IS NOT INITIAL.
      IF <FS>-PROCESS_TYPE CS *.
        REPLACE ALL OCCURRENCES OF * IN <FS>-PROCESS_TYPE WITH %.
        SELECT PROCESS_TYPE
            P_DESCRIPTION_20 AS DESCRIPTION
       INTO TABLE GT_LIST FROM CRMC_PROC_TYPE_T
       WHERE LANGU = E AND PROCESS_TYPE LIKE <FS>-PROCESS_TYPE.
      ELSE.
        SELECT PROCESS_TYPE
            P_DESCRIPTION_20 AS DESCRIPTION
       INTO TABLE GT_LIST FROM CRMC_PROC_TYPE_T
       WHERE LANGU = E AND PROCESS_TYPE = <FS>-PROCESS_TYPE.
      ENDIF.
    ELSE.
      SELECT PROCESS_TYPE
            P_DESCRIPTION_20 AS DESCRIPTION
       INTO TABLE GT_LIST FROM CRMC_PROC_TYPE_T
       WHERE LANGU = E.
    ENDIF.
    IO_OVS_CALLBACK->SET_OUTPUT_TABLE(
    EXPORTING
      OUTPUT = GT_LIST
    ).
  ENDMETHOD.

返回选择的值:

  METHOD IF_FPM_GUIBB_OVS~HANDLE_PHASE_3.
    TYPES:BEGIN OF TY_PROCE,
            PROCESS_TYPE TYPE CRMT_PROCESS_TYPE,
            DESCRIPTION  TYPE CRMT_DESCRIPTION_20,
          END OF TY_PROCE.
    FIELD-SYMBOLS:<FS> TYPE TY_PROCE.

    ASSIGN IO_OVS_CALLBACK->SELECTION->* TO <FS>.

    IO_OVS_CALLBACK->CONTEXT_ELEMENT->SET_ATTRIBUTE(
    EXPORTING
      VALUE = <FS>-PROCESS_TYPE
      NAME = IV_WD_CONTEXT_ATTR_NAME
    ).
  ENDMETHOD.

 

以上是关于FPM Search里给查询条件加OVS搜索帮助的主要内容,如果未能解决你的问题,请参考以下文章

TP5多条件搜索,同时有必要条件

在 Drupal 7 中更改数据集的搜索查询条件

SQL 查询:如果满足搜索条件,则应返回单条记录,否则返回多条记录

php多条件搜索

thinkphp5 怎么将变量作为模糊查询条件

Elasticsearch查询期间的即时搜索(Query-time Search-as-you-type)