Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Search help - sending blank input parameter

Former Member
0 Likes
784

I have written a simple search help with 2 input parameters selecting against a 3 key table. the idea is to send the search help the 1st 2 key values and the search help will display only values from the table that match those 2 key fields. Everything works fine when both parameters have a non blank value. However when the parameter value blank, the SH asumes that it is not known and displays all the values that match the 1st key only. My situation is that blank (spaces) IS a valid value for the 2nd key, I would like the SH to display the parameter values matchs even if the input parameter is spaces.

Can this be done without writing a specialized SH function module? I guess I can do that, but would prefer not to have to do it that way.

Thanks,

Larry

I have written a simple search help with 2 input parameters selecting against a 3 key table. the idea is to send the search help the 1st 2 key values and the search help will display only values from the table that match those 2 key fields. Everything works fine when both parameters have a non blank value. However when the parameter value blank, the SH asumes that it is not known and displays all the values that match the 1st key only. My situation is that blank (spaces) IS a valid value for the 2nd key, I would like the SH to display the parameter values matchs even if the input parameter is spaces.

Can this be done without writing a specialized SH function module? I guess I can do that, but would prefer not to have to do it that way.

Thanks,

Larry

3 REPLIES 3
Read only

apoorva_singh
Active Participant
0 Likes
710

Hi Larry.

You would basically need to consider the fact that all values can be blank or wild card search may be possible. I wrote a search help exit which will help you to accomplish that and you can follow it for your purpose:



FUNCTION ZCRM_MFR_SLNO_AUDIT_SHLP.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      SHLP_TAB TYPE  SHLP_DESCR_TAB_T
*"      RECORD_TAB STRUCTURE  SEAHLPRES
*"  CHANGING
*"     VALUE(SHLP) TYPE  SHLP_DESCR_T
*"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*"----------------------------------------------------------------------
 TYPES : BEGIN OF l_order,
           guid TYPE CRMT_OBJECT_GUID,
           object_id TYPE CRMT_OBJECT_ID,
           process_type TYPE CRMT_PROCESS_TYPE,
          END OF l_order.

  TYPES : BEGIN OF l_guid,
          guid TYPE CRMT_OBJECT_GUID,
          MANUFACT_SN TYPE MANUFACT_SERIALNO,
         END OF l_guid.

  TYPES : BEGIN OF l_source,
          ZZSALE_NUM TYPE ZSALENUM,
          OBJECT_ID TYPE CRMT_OBJECT_ID,
          PROCESS_TYPE TYPE CRMT_PROCESS_TYPE,
          DESCRIPTION TYPE CRMT_PROCESS_DESCRIPTION,
          CHNG_PROCESS TYPE CRMT_LEAS_CHNG,
          MANUFACT_SN TYPE MANUFACT_SERIALNO,
          ZZMANUFAC TYPE ZMANUFAC_ID,
          ZZMLSCHED TYPE ZMLSCHED,
          LOGSYS TYPE CRMT_LOGSYS,
         END OF l_source.
  TYPES : BEGIN OF l_header,
          guid  TYPE CRMT_OBJECT_GUID,
          END OF l_header.

  TYPES : BEGIN OF l_prop_all,
           guid  TYPE CRMT_OBJECT_GUID,
          END OF l_prop_all.

  DATA :   lv_lines TYPE I,
           lv_case  TYPE ZCRM_PROC_TYPE,
           lv_guid  TYPE CRMT_OBJECT_GUID,
           lv_logsys TYPE CRMT_LOGSYS .

  DATA : lt_guid TYPE STANDARD TABLE OF l_guid,
         ls_guid LIKE LINE OF lt_guid,
         lt_shlp_selopt TYPE DDSHSELOPS,
         ls_shlp_selopt TYPE DDSHSELOPT,
         et_wtab  TYPE COMT_WHERE_CONDITION_TAB,
         ls_wtab  TYPE comt_where_condition_s,
         lt_sale_guid TYPE CRMT_OBJECT_GUID_TAB,
         lt_sel_sale_guid TYPE STANDARD TABLE OF l_header,
         ls_sel_sale_guid LIKE LINE OF lt_sel_sale_guid,
         lt_order TYPE STANDARD TABLE OF l_order,
         ls_order LIKE LINE OF lt_order,
         ls_seldyn  TYPE rsseldyn,
         lt_seldyn  TYPE STANDARD TABLE OF rsseldyn,
         lt_header_guid TYPE STANDARD TABLE OF l_header,
         ls_header_guid LIKE LINE OF lt_header_guid,
         lt_prop_guid  TYPE CRMT_OBJECT_GUID_TAB,
         ls_prop_guid  LIKE LINE OF lt_prop_guid,
         lt_prop_all TYPE STANDARD TABLE OF l_prop_all,
         ls_prop_all LIKE LINE OF lt_prop_all,
         lt_view_field TYPE STANDARD TABLE OF ZCRMV_PRPTSK,
         ls_view_field LIKE LINE OF lt_view_field.

  DATA : lt_source TYPE STANDARD TABLE OF l_source,
         ls_source LIKE LINE OF lt_source.

Regards

Apoorva

Edited by: Apoorva Singh on May 7, 2009 4:58 PM

Read only

0 Likes
710



  CHECK ( callcontrol-step = 'SELECT' or
           callcontrol-step = 'SELONE' ) AND
         shlp-shlpname EQ 'ZSEARCH_MFR_AUDIT_NO'.


  lt_shlp_selopt =  SHLP-SELOPT.

  READ TABLE lt_shlp_selopt into ls_shlp_selopt INDEX 1.
  IF ls_shlp_selopt-SHLPFIELD <> 'MANUFACT_SN'.
    ls_shlp_selopt-SHLPNAME  = 'ZSEARCH_MFR_AUDIT_NO'.
    ls_shlp_selopt-SHLPFIELD = 'MANUFACT_SN'.
    ls_shlp_selopt-SIGN = 'I'.
    ls_shlp_selopt-OPTION = 'CP'.
    ls_shlp_selopt-LOW = '*'.
    APPEND ls_shlp_selopt to lt_shlp_selopt.
    SORT lt_shlp_selopt BY SHLPFIELD DESCENDING.
  ENDIF.

  LOOP AT lt_shlp_selopt into ls_shlp_selopt .
    ls_seldyn-tablename = 'ZCRMV_PRPTSK'.
    ls_seldyn-fieldname = ls_shlp_selopt-SHLPFIELD.
    ls_seldyn-sign      = 'I'.
    ls_seldyn-option    = ls_shlp_selopt-OPTION.
    ls_seldyn-low       = ls_shlp_selopt-LOW.

    IF LS_SHLP_SELOPT-SHLPFIELD = 'PROCESS_TYPE'.
      lv_case = LS_SHLP_SELOPT-LOW.
    ENDIF.
    APPEND ls_seldyn TO lt_seldyn.
  ENDLOOP.

  CALL FUNCTION 'CMS_CONV_SEL_2_DYN_WHERE'
    IMPORTING
      et_where_clause = et_wtab
    TABLES
      t_sel_ran       = lt_seldyn.

  DESCRIBE TABLE et_wtab LINES lv_lines.




  READ TABLE et_wtab into ls_wtab INDEX 1.

  SELECT * FROM ZCRMV_PRPTSK APPENDING TABLE lt_view_field WHERE (ls_wtab).
  CLEAR ls_wtab.
  SORT lt_view_field .
  DELETE ADJACENT DUPLICATES FROM lt_view_field.



  CASE lv_case.

    WHEN 'ZPRP'.

      LOOP AT lt_view_field INTO ls_view_field WHERE PROCESS_TYPE = 'ZPRP'.
        ls_source-MANUFACT_SN      = ls_view_field-MANUFACT_SN.
        ls_source-ZZSALE_NUM       = ls_view_field-ZZSALE_NUM.
        ls_source-OBJECT_ID        = ls_view_field-object_id.
        ls_source-PROCESS_TYPE     = ls_view_field-process_type.
        ls_source-DESCRIPTION      = ls_view_field-DESCRIPTION.
        ls_source-CHNG_PROCESS     = ls_view_field-CHNG_PROCESS.
        ls_source-ZZMANUFAC        = ls_view_field-ZZMANUFAC.
        ls_source-ZZMLSCHED        = ls_view_field-ZZMLSCHED.
        ls_source-LOGSYS           = ls_view_field-LOGICAL_SYSTEM.
        APPEND ls_source to lt_source.
      ENDLOOP.

      CLEAR : lt_view_field.



    WHEN 'ZCUI'.

      LOOP AT lt_view_field INTO ls_view_field WHERE PROCESS_TYPE = 'ZCUI'.
        ls_source-MANUFACT_SN      = ls_view_field-MANUFACT_SN.
        ls_source-ZZSALE_NUM       = ls_view_field-ZZSALE_NUM.
        ls_source-OBJECT_ID        = ls_view_field-object_id.
        ls_source-PROCESS_TYPE     = ls_view_field-process_type.
        ls_source-DESCRIPTION      = ls_view_field-DESCRIPTION.
        ls_source-CHNG_PROCESS     = ls_view_field-CHNG_PROCESS.
        ls_source-ZZMANUFAC        = ls_view_field-ZZMANUFAC.
        ls_source-ZZMLSCHED        = ls_view_field-ZZMLSCHED.
        ls_source-LOGSYS           = ls_view_field-LOGICAL_SYSTEM.
        APPEND ls_source to lt_source.
      ENDLOOP.

      CLEAR : lt_view_field.

    WHEN OTHERS.

      LOOP AT lt_view_field INTO ls_view_field WHERE PROCESS_TYPE EQ 'ZPRP'
                                                  OR PROCESS_TYPE EQ 'ZCUI'.


        ls_source-MANUFACT_SN      = ls_view_field-MANUFACT_SN.
        ls_source-ZZSALE_NUM       = ls_view_field-ZZSALE_NUM.
        ls_source-OBJECT_ID        = ls_view_field-object_id.
        ls_source-PROCESS_TYPE     = ls_view_field-process_type.
        ls_source-DESCRIPTION      = ls_view_field-DESCRIPTION.
        ls_source-CHNG_PROCESS     = ls_view_field-CHNG_PROCESS.
        ls_source-ZZMANUFAC        = ls_view_field-ZZMANUFAC.
        ls_source-ZZMLSCHED        = ls_view_field-ZZMLSCHED.
        ls_source-LOGSYS           = ls_view_field-LOGICAL_SYSTEM.
        APPEND ls_source to lt_source.
      ENDLOOP.

      CLEAR : lt_view_field.
  ENDCASE.

  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
    IMPORTING
      own_logical_system             = lv_logsys
    EXCEPTIONS
      own_logical_system_not_defined = 1
      OTHERS                         = 2.

  DELETE lt_source WHERE logsys NE lv_logsys.
  SORT lt_source.
  DELETE ADJACENT DUPLICATES FROM lt_source COMPARING ZZSALE_NUM OBJECT_ID PROCESS_TYPE.

  CALL FUNCTION 'F4UT_RESULTS_MAP'
*    EXPORTING
*      source_structure   = 'l_source'
*      APPLY_RESTRICTIONS = ' '
    TABLES
      shlp_tab           = shlp_tab
      record_tab         = record_tab
      source_tab         = lt_source
    CHANGING
      shlp               = shlp
      callcontrol        = callcontrol
    EXCEPTIONS
      illegal_structure  = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    callcontrol-step = 'EXIT'.
    EXIT.
  ENDIF.

  callcontrol-step = 'DISP'.

ENDFUNCTION.

Regards

Apoorva

Read only

0 Likes
710

I am pretty sure I can write what I need it to do in a FM, but I was hoping for a solution that didn't involve writing code. Like maybe some sort of setting in the SH definition or maybe when it is assigned to the table column in the data dicitionary.