2006 Oct 09 5:54 PM
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
2006 Oct 09 5:56 PM
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.
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |