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 exit

Former Member
0 Likes
383

Hello Forum!

I need to do a complex search help exit function of products in the transaction COMMPR01 in CRM. I know how is the structure of this kind of functions but anybody can help me with some examples or advices¿?

Thanks in advance and regards!

Mon

Hello Forum!

I need to do a complex search help exit function of products in the transaction COMMPR01 in CRM. I know how is the structure of this kind of functions but anybody can help me with some examples or advices¿?

Thanks in advance and regards!

Mon

1 REPLY 1
Read only

Former Member
0 Likes
339

Check the sample code of search help exit:

FUNCTION zmet_de_insp_shelp_exit.

*"----


""Local interface:

*" TABLES

*" SHLP_TAB TYPE SHLP_DESCR_TAB_T

*" RECORD_TAB STRUCTURE SEAHLPRES

*" CHANGING

*" REFERENCE(SHLP) TYPE SHLP_DESCR_T

*" REFERENCE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL

*"----


TYPE-POOLS: isu00, isu07.

TYPES: BEGIN OF ty_inst,

anlage TYPE eanl-anlage,

sparte TYPE eanl-sparte,

zzinstname TYPE zeanl-zzinstname,

zzkunnr TYPE eanl-zzkunnr,

zzsupinst TYPE zeanl-zzsupinst,

tplnr TYPE iflot-tplnr,

END OF ty_inst.

TYPES: BEGIN OF ty_inst_dev,

anlage TYPE eanl-anlage,

tplnr TYPE iflot-tplnr,

END OF ty_inst_dev.

DATA: t_range_devloc LIKE isu_ranges OCCURS 1 WITH HEADER LINE,

t_range_anlage LIKE isu_ranges OCCURS 1 WITH HEADER LINE,

t_range_sparte LIKE isu_ranges OCCURS 1 WITH HEADER LINE,

t_range_instna LIKE isu_ranges OCCURS 1 WITH HEADER LINE,

t_range_zkunnr LIKE isu_ranges OCCURS 1 WITH HEADER LINE,

t_range_supins LIKE isu_ranges OCCURS 1 WITH HEADER LINE.

DATA: i_iflot TYPE STANDARD TABLE OF iflot,

i_inst TYPE STANDARD TABLE OF ty_inst,

i_inst_dev TYPE STANDARD TABLE OF ty_inst_dev,

i_final_data TYPE STANDARD TABLE OF ty_inst,

i_t_ger TYPE isu07_twd_gertab_t.

DATA: wa_iflot TYPE iflot,

wa_sel TYPE ddshselopt,

wa_ifot TYPE iflot,

wa_equi_sel_tab TYPE isu00_range_tab,

wa_t_ger TYPE isu07_twd_gertab,

ws_anlage TYPE anlage,

ws_index TYPE sy-tabix,

ws_tplnr TYPE tplnr,

wa_inst TYPE ty_inst,

wa_final_data TYPE ty_inst,

wa_inst_dev TYPE ty_inst_dev.

IF callcontrol-step = 'PRESEL'.

callcontrol-maxrecords = '100'.

ENDIF.

IF callcontrol-step = 'DISP'.

READ TABLE shlp-selopt INTO wa_sel WITH KEY shlpfield = 'DEVLOC'.

IF sy-subrc = 0.

REFRESH: record_tab.

t_range_devloc-sign = wa_sel-sign.

t_range_devloc-option = wa_sel-option.

t_range_devloc-low = wa_sel-low.

t_range_devloc-high = wa_sel-high.

APPEND t_range_devloc.

CLEAR wa_sel.

READ TABLE shlp-selopt INTO wa_sel WITH KEY

shlpfield = 'ANLAGE'.

IF sy-subrc = 0.

t_range_anlage-sign = wa_sel-sign.

t_range_anlage-option = wa_sel-option.

t_range_anlage-low = wa_sel-low.

t_range_anlage-high = wa_sel-high.

APPEND t_range_anlage.

ENDIF.

CLEAR wa_sel.

READ TABLE shlp-selopt INTO wa_sel WITH KEY

shlpfield = 'SPARTE'.

IF sy-subrc = 0.

t_range_sparte-sign = wa_sel-sign.

t_range_sparte-option = wa_sel-option.

t_range_sparte-low = wa_sel-low.

t_range_sparte-high = wa_sel-high.

APPEND t_range_sparte.

ENDIF.

CLEAR wa_sel.

READ TABLE shlp-selopt INTO wa_sel WITH KEY

shlpfield = 'ZZINSTNAME'.

IF sy-subrc = 0.

t_range_instna-sign = wa_sel-sign.

t_range_instna-option = wa_sel-option.

t_range_instna-low = wa_sel-low.

t_range_instna-high = wa_sel-high.

APPEND t_range_instna.

ENDIF.

CLEAR wa_sel.

READ TABLE shlp-selopt INTO wa_sel WITH KEY

shlpfield = 'ZZKUNNR'.

IF sy-subrc = 0.

t_range_zkunnr-sign = wa_sel-sign.

t_range_zkunnr-option = wa_sel-option.

t_range_zkunnr-low = wa_sel-low.

t_range_zkunnr-high = wa_sel-high.

APPEND t_range_zkunnr.

ENDIF.

CLEAR wa_sel.

READ TABLE shlp-selopt INTO wa_sel WITH KEY

shlpfield = 'ZZSUPINST'.

IF sy-subrc = 0.

t_range_supins-sign = wa_sel-sign.

t_range_supins-option = wa_sel-option.

t_range_supins-low = wa_sel-low.

t_range_supins-high = wa_sel-high.

APPEND t_range_supins.

ENDIF.

SELECT aanlage asparte bzzinstname azzkunnr

b~zzsupinst INTO TABLE i_inst

FROM eanl AS a INNER JOIN zeanl AS b

ON aanlage = banlage AND asparte = bsparte

WHERE a~anlage IN t_range_anlage

AND a~sparte IN t_range_sparte

AND b~zzinstname IN t_range_instna

AND a~zzkunnr IN t_range_zkunnr

AND b~zzsupinst IN t_range_supins.

SELECT * FROM iflot INTO TABLE i_iflot

WHERE tplnr IN t_range_devloc.

LOOP AT i_iflot INTO wa_iflot.

CALL FUNCTION 'ISU_DET_DEVICE_FROM_DEVLOC'

EXPORTING

x_devloc = wa_iflot-tplnr

x_keydate = sy-datum

x_equi_sel_tab = wa_equi_sel_tab

CHANGING

xy_t_ger = i_t_ger

EXCEPTIONS

internal_error = 1

system_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

ENDIF.

IF NOT i_t_ger IS INITIAL.

READ TABLE i_t_ger INTO wa_t_ger INDEX 1.

CALL FUNCTION 'Z_DE_ISU_DET_INSTA_FOR_DEVICE'

EXPORTING

x_equnr = wa_t_ger-equnr

x_date = sy-datum

IMPORTING

y_anlage = ws_anlage

EXCEPTIONS

no_data_found = 1

no_device_found = 2

dlrypnt_not_found = 3

full_insta_not_found = 4

devloc_not_found = 5

OTHERS = 6.

IF sy-subrc <> 0.

ENDIF.

IF NOT ws_anlage IS INITIAL.

READ TABLE i_inst INTO wa_final_data WITH KEY

anlage = ws_anlage.

IF sy-subrc = 0.

wa_final_data-tplnr = wa_iflot-tplnr.

APPEND wa_final_data TO i_final_data.

CLEAR: wa_final_data.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF NOT i_final_data[] IS INITIAL.

LOOP AT i_final_data INTO wa_final_data.

record_tab-string = wa_final_data.

APPEND record_tab.

CLEAR wa_final_data.

ENDLOOP.

CALL FUNCTION 'F4UT_OPTIMIZE_COLWIDTH'

TABLES

shlp_tab = shlp_tab

record_tab = record_tab

CHANGING

shlp = shlp

callcontrol = callcontrol.

ENDIF.

ELSE.

LOOP AT record_tab.

CLEAR: i_t_ger, wa_inst, ws_tplnr, ws_anlage,

i_inst_dev, wa_inst_dev, ws_index.

ws_index = sy-tabix.

MOVE record_tab TO wa_inst.

CALL FUNCTION 'ISU_DET_DEVICE_FROM_INST'

EXPORTING

x_anlage = wa_inst-anlage

x_keydate = sy-datum

x_only_keydate = 'X'

CHANGING

xy_t_ger = i_t_ger

EXCEPTIONS

not_found = 1

internal_error = 2

system_error = 3

OTHERS = 4.

IF sy-subrc <> 0.

ENDIF.

IF NOT i_t_ger IS INITIAL.

LOOP AT i_t_ger INTO wa_t_ger.

CALL FUNCTION 'Z_DE_ISU_DET_INSTA_FOR_DEVICE'

EXPORTING

x_equnr = wa_t_ger-equnr

x_date = sy-datum

IMPORTING

y_tplnr = ws_tplnr

y_anlage = ws_anlage

EXCEPTIONS

no_data_found = 1

no_device_found = 2

dlrypnt_not_found = 3

full_insta_not_found = 4

devloc_not_found = 5

OTHERS = 6.

IF sy-subrc <> 0.

ENDIF.

IF NOT ws_tplnr IS INITIAL AND NOT ws_anlage IS INITIAL.

wa_inst_dev-tplnr = ws_tplnr.

wa_inst_dev-anlage = ws_anlage.

APPEND wa_inst_dev TO i_inst_dev.

CLEAR wa_inst_dev.

ENDIF.

ENDLOOP.

SORT i_inst_dev BY tplnr.

DELETE ADJACENT DUPLICATES FROM i_inst_dev COMPARING tplnr

anlage.

IF NOT i_inst_dev[] IS INITIAL.

LOOP AT i_inst_dev INTO wa_inst_dev.

wa_inst-tplnr = wa_inst_dev-tplnr.

IF sy-tabix EQ 1.

MODIFY record_tab FROM wa_inst INDEX ws_index.

ELSE.

APPEND wa_inst TO i_final_data.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

ENDLOOP.

IF NOT i_final_data[] IS INITIAL.

LOOP AT i_final_data INTO wa_final_data.

record_tab-string = wa_final_data.

APPEND record_tab.

CLEAR wa_final_data.

ENDLOOP.

CALL FUNCTION 'F4UT_OPTIMIZE_COLWIDTH'

TABLES

shlp_tab = shlp_tab

record_tab = record_tab

CHANGING

shlp = shlp

callcontrol = callcontrol.

ENDIF.

ENDIF.

ENDIF.

ENDFUNCTION.

callcontrol-step SELONE

callcontrol-step PRESEL1

callcontrol-step PRESEL

After this restrction Pop-up appears.

callcontrol-step SELECT

callcontrol-step DISP

After the control step = DISP it will display the values.

So can be return as per the requirement in any of this call control.

Regards,

Prakash.