2008 Jan 24 5:35 PM
When a search help is executed you get a result (that appears in the internal table record_tab that satisfies your selection criteria. If, without leaving the search help, you enter a new selection it can return an entirely different set of records. That is the normal behavior and what users expect.
However, I do some processing in the CALLCONTROL-STEP = 'DISP' that pares down the result set in record_tab based on the users authorization. When I return to another selection it operates on the pared down result set in record_tab and does not make another selection. i.e. record_tab is not refereshed for the new selection. I am clearly doing something wrong.
This is the specific case: Users are limited to customers in their specific sales group defined in KNVV-VKGRP. I use an exit in search help DEBIS to check whether the user is authorized for the sales group. A user is authorized for users in group 001 and 042. There first selection is from sales group 001. It returns 50 records. They decide that they chose the wrong group so they select sales group 042. It returns 0 records. However, had they selected from group 042 from the outset they would have had two hits. The second pass is working on the selection set from the first pass. (or so it seems)
Any thoughts?
2008 Jan 24 5:41 PM
Hi Corwin
<REMOVED BY MODERATOR>
FUNCTION z_shlp_exit_bpartner_reltyp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
DATA: rc LIKE sy-subrc,
dialog_canceled TYPE c,
lc_bp_shlp_badi TYPE funcname VALUE 'BUP_SHLP_EXIT_BADI'.
TYPES: BEGIN OF ls_view.
INCLUDE STRUCTURE but050.
TYPES: END OF ls_view.
DATA: lt_view TYPE STANDARD TABLE OF ls_view,
wa_view TYPE ls_view.
DATA: wa_shlp LIKE LINE OF shlp-fielddescr.
CALL FUNCTION 'F4UT_OPTIMIZE_COLWIDTH'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*------ Rolle auf jeden Fall als Mußfeld ------------------------------
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*"----------------------------------------------------------------------
* STEP SELONE (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
* This step is only called for collective searchhelps. It may be used
* to reduce the amount of elementary searchhelps given in SHLP_TAB.
* The compound searchhelp is given in SHLP.
* If you do not change CALLCONTROL-STEP, the next step is the
* dialog, to select one of the elementary searchhelps.
* If you want to skip this dialog, you have to return the selected
* elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
* either to 'PRESEL' or to 'SELECT'.
IF callcontrol-step = 'SELONE'.
* PERFORM SELONE .........
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
IF callcontrol-step = 'PRESEL'.
*--... Datendeklartionen.
CLASS cl_exithandler DEFINITION LOAD.
DATA: lv_exit_object TYPE REF TO if_ex_bupa_augrp, "#EC NEEDED
ls_auth_selopt TYPE ddshselopt,
lt_auth_selopt TYPE TABLE OF ddshselopt WITH DEFAULT KEY.
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
* Call "AUGRP" badi
CALL FUNCTION 'FUNCTION_EXISTS'
EXPORTING
funcname = lc_bp_shlp_badi
EXCEPTIONS
function_not_exist = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CALL FUNCTION lc_bp_shlp_badi
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
rc = sy-subrc.
ENDIF.
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP SELECT (Select values)
*"----------------------------------------------------------------------
* This step may be used to overtake the data selection completely.
* To skip the standard seletion, you should return 'DISP' as following
* step in CALLCONTROL-STEP.
* Normally RECORD_TAB should be filled after this step.
* Standard function module F4UT_RESULTS_MAP may be very helpfull in this
* step.
IF callcontrol-step = 'SELECT'.
DATA: BEGIN OF ls_result,
partner LIKE but000-partner,
weekday LIKE crmm_tour_i-weekdayfrom,
terr_id LIKE crmm_territory-terr_id,
mc_name1 LIKE but000-mc_name1,
mc_name2 LIKE but000-mc_name2,
reltyp LIKE but050-reltyp,
partner2 LIKE but000_td-partner,
city LIKE adrc-city1,
post_code1 LIKE adrc-post_code1,
tel_number LIKE adrc-tel_number,
region LIKE adrc-region,
END OF ls_result.
* Local Variables
DATA: lv_resultcount TYPE i,
lv_adrno TYPE but020-addrnumber,
lv_name1 TYPE but000-mc_name1,
lv_name2 TYPE but000-mc_name2,
lv_pc TYPE adrc-post_code1,
lv_tele TYPE adrc-tel_number,
lv_guid TYPE but000-partner_guid,
lv_last TYPE adrc-name1,
lv_first TYPE adrc-name2,
lv_region TYPE adrc-region,
lv_city1 TYPE adrc-city1,
lv_trguid TYPE crmm_territory-terr_guid.
* Local Tables
DATA: ls_ddshselop TYPE ddshselopt,
lt_ddshselops TYPE ddshselops,
lt_result LIKE STANDARD TABLE OF ls_result,
wa_result LIKE ls_result.
* Ranges
RANGES: lr_reltyp FOR but050-reltyp,
lr_partner FOR but000-partner,
lr_name1 FOR but000-mc_name1,
lr_name2 FOR but000-mc_name2,
lr_region FOR adrc-region,
lr_city FOR adrc-city1,
lr_tele FOR adrc-tel_number,
lr_pc FOR adrc-post_code1.
SELECT rltyp FROM z_bupar_td INTO TABLE lt_view.
lt_ddshselops = shlp-selopt.
LOOP AT lt_ddshselops INTO ls_ddshselop.
CASE ls_ddshselop-shlpfield.
WHEN 'RELTYP'.
MOVE-CORRESPONDING ls_ddshselop TO lr_reltyp.
APPEND lr_reltyp.
WHEN 'PARTNER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_partner.
APPEND lr_partner.
WHEN 'MC_NAME1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name1.
APPEND lr_name1.
WHEN 'MC_NAME2'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name2.
APPEND lr_name2.
WHEN 'REGION'.
MOVE-CORRESPONDING ls_ddshselop TO lr_region.
APPEND lr_region.
WHEN 'CITY'.
MOVE-CORRESPONDING ls_ddshselop TO lr_city.
APPEND lr_city.
WHEN 'TEL_NUMBER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_tele.
APPEND lr_tele.
WHEN 'POST_CODE1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_pc.
APPEND lr_pc.
ENDCASE.
ENDLOOP.
SELECT * FROM but050 INTO TABLE lt_view
WHERE reltyp IN lr_reltyp
AND partner1 IN lr_partner.
LOOP AT lt_view INTO wa_view.
wa_result-partner = wa_view-partner1.
wa_result-reltyp = wa_view-reltyp.
*___ adress details
SELECT SINGLE addrnumber FROM but020 INTO lv_adrno
WHERE partner EQ wa_result-partner.
SELECT SINGLE post_code1 tel_number name1 name2 region city1 FROM adrc
INTO (lv_pc , lv_tele, lv_last, lv_first, lv_region, lv_city1)
WHERE addrnumber EQ lv_adrno AND region IN lr_region
AND city1 IN lr_city AND tel_number IN lr_tele
AND post_code1 IN lr_pc.
*___ names
SELECT SINGLE mc_name1 mc_name2 FROM but000
INTO (lv_name1 , lv_name2)
WHERE partner IN lr_partner
AND mc_name1 IN lr_name1
AND mc_name2 IN lr_name2.
*___ CRM patner guid
SELECT SINGLE partner_guid FROM but000
INTO lv_guid
WHERE partner EQ wa_result-partner.
*___ Territory guid
SELECT SINGLE terr_guid FROM crmm_territory_v
INTO lv_trguid
WHERE guid EQ lv_guid.
SELECT SINGLE terr_id FROM crmm_territory
INTO wa_result-terr_id
WHERE terr_guid EQ lv_trguid.
*__ weekfrom
SELECT SINGLE weekdayfrom FROM crmm_tour_i
INTO wa_result-weekday
WHERE guid EQ lv_guid.
wa_result-post_code1 = lv_pc.
wa_result-tel_number = lv_tele.
wa_result-mc_name1 = lv_name1.
wa_result-mc_name2 = lv_name2.
wa_result-partner2 = lv_first.
wa_result-region = lv_region.
wa_result-city = lv_city1.
APPEND wa_result TO lt_result.
lv_resultcount = lv_resultcount + 1.
IF lv_resultcount GE callcontrol-maxrecords.
EXIT.
ENDIF.
CLEAR: lv_pc,lv_tele,lv_name1,lv_name2,lv_first,lv_region,lv_city1.
CLEAR: wa_view, wa_result.
ENDLOOP.
* Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_result
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
IF rc = 0.
callcontrol-step = 'DISP'.
ELSE.
callcontrol-step = 'EXIT'.
ENDIF.
EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.
*"----------------------------------------------------------------------
* STEP DISP (Display values)
*"----------------------------------------------------------------------
* This step is called, before the selected data is displayed.
* You can e.g. modify or reduce the data in RECORD_TAB
* according to the users authority.
* If you want to get the standard display dialog afterwards, you
* should not change CALLCONTROL-STEP.
* If you want to overtake the dialog on you own, you must return
* the following values in CALLCONTROL-STEP:
* - "RETURN" if one line was selected. The selected line must be
* the only record left in RECORD_TAB. The corresponding fields of
* this line are entered into the screen.
* - "EXIT" if the values request should be aborted
* - "PRESEL" if you want to return to the selection dialog
* Standard function modules F4UT_PARAMETER_VALUE_GET and
* F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
IF callcontrol-step = 'DISP'.
* PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
* CHANGING SHLP CALLCONTROL.
EXIT.
ENDIF.
ENDFUNCTION.
Edited by: Alvaro Tejada Galindo on Jan 24, 2008 4:32 PM
Hi Corwin
<REMOVED BY MODERATOR>
FUNCTION z_shlp_exit_bpartner_reltyp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
DATA: rc LIKE sy-subrc,
dialog_canceled TYPE c,
lc_bp_shlp_badi TYPE funcname VALUE 'BUP_SHLP_EXIT_BADI'.
TYPES: BEGIN OF ls_view.
INCLUDE STRUCTURE but050.
TYPES: END OF ls_view.
DATA: lt_view TYPE STANDARD TABLE OF ls_view,
wa_view TYPE ls_view.
DATA: wa_shlp LIKE LINE OF shlp-fielddescr.
CALL FUNCTION 'F4UT_OPTIMIZE_COLWIDTH'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*------ Rolle auf jeden Fall als Mußfeld ------------------------------
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*"----------------------------------------------------------------------
* STEP SELONE (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
* This step is only called for collective searchhelps. It may be used
* to reduce the amount of elementary searchhelps given in SHLP_TAB.
* The compound searchhelp is given in SHLP.
* If you do not change CALLCONTROL-STEP, the next step is the
* dialog, to select one of the elementary searchhelps.
* If you want to skip this dialog, you have to return the selected
* elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
* either to 'PRESEL' or to 'SELECT'.
IF callcontrol-step = 'SELONE'.
* PERFORM SELONE .........
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
IF callcontrol-step = 'PRESEL'.
*--... Datendeklartionen.
CLASS cl_exithandler DEFINITION LOAD.
DATA: lv_exit_object TYPE REF TO if_ex_bupa_augrp, "#EC NEEDED
ls_auth_selopt TYPE ddshselopt,
lt_auth_selopt TYPE TABLE OF ddshselopt WITH DEFAULT KEY.
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
* Call "AUGRP" badi
CALL FUNCTION 'FUNCTION_EXISTS'
EXPORTING
funcname = lc_bp_shlp_badi
EXCEPTIONS
function_not_exist = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CALL FUNCTION lc_bp_shlp_badi
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
rc = sy-subrc.
ENDIF.
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP SELECT (Select values)
*"----------------------------------------------------------------------
* This step may be used to overtake the data selection completely.
* To skip the standard seletion, you should return 'DISP' as following
* step in CALLCONTROL-STEP.
* Normally RECORD_TAB should be filled after this step.
* Standard function module F4UT_RESULTS_MAP may be very helpfull in this
* step.
IF callcontrol-step = 'SELECT'.
DATA: BEGIN OF ls_result,
partner LIKE but000-partner,
weekday LIKE crmm_tour_i-weekdayfrom,
terr_id LIKE crmm_territory-terr_id,
mc_name1 LIKE but000-mc_name1,
mc_name2 LIKE but000-mc_name2,
reltyp LIKE but050-reltyp,
partner2 LIKE but000_td-partner,
city LIKE adrc-city1,
post_code1 LIKE adrc-post_code1,
tel_number LIKE adrc-tel_number,
region LIKE adrc-region,
END OF ls_result.
* Local Variables
DATA: lv_resultcount TYPE i,
lv_adrno TYPE but020-addrnumber,
lv_name1 TYPE but000-mc_name1,
lv_name2 TYPE but000-mc_name2,
lv_pc TYPE adrc-post_code1,
lv_tele TYPE adrc-tel_number,
lv_guid TYPE but000-partner_guid,
lv_last TYPE adrc-name1,
lv_first TYPE adrc-name2,
lv_region TYPE adrc-region,
lv_city1 TYPE adrc-city1,
lv_trguid TYPE crmm_territory-terr_guid.
* Local Tables
DATA: ls_ddshselop TYPE ddshselopt,
lt_ddshselops TYPE ddshselops,
lt_result LIKE STANDARD TABLE OF ls_result,
wa_result LIKE ls_result.
* Ranges
RANGES: lr_reltyp FOR but050-reltyp,
lr_partner FOR but000-partner,
lr_name1 FOR but000-mc_name1,
lr_name2 FOR but000-mc_name2,
lr_region FOR adrc-region,
lr_city FOR adrc-city1,
lr_tele FOR adrc-tel_number,
lr_pc FOR adrc-post_code1.
SELECT rltyp FROM z_bupar_td INTO TABLE lt_view.
lt_ddshselops = shlp-selopt.
LOOP AT lt_ddshselops INTO ls_ddshselop.
CASE ls_ddshselop-shlpfield.
WHEN 'RELTYP'.
MOVE-CORRESPONDING ls_ddshselop TO lr_reltyp.
APPEND lr_reltyp.
WHEN 'PARTNER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_partner.
APPEND lr_partner.
WHEN 'MC_NAME1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name1.
APPEND lr_name1.
WHEN 'MC_NAME2'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name2.
APPEND lr_name2.
WHEN 'REGION'.
MOVE-CORRESPONDING ls_ddshselop TO lr_region.
APPEND lr_region.
WHEN 'CITY'.
MOVE-CORRESPONDING ls_ddshselop TO lr_city.
APPEND lr_city.
WHEN 'TEL_NUMBER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_tele.
APPEND lr_tele.
WHEN 'POST_CODE1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_pc.
APPEND lr_pc.
ENDCASE.
ENDLOOP.
SELECT * FROM but050 INTO TABLE lt_view
WHERE reltyp IN lr_reltyp
AND partner1 IN lr_partner.
LOOP AT lt_view INTO wa_view.
wa_result-partner = wa_view-partner1.
wa_result-reltyp = wa_view-reltyp.
*___ adress details
SELECT SINGLE addrnumber FROM but020 INTO lv_adrno
WHERE partner EQ wa_result-partner.
SELECT SINGLE post_code1 tel_number name1 name2 region city1 FROM adrc
INTO (lv_pc , lv_tele, lv_last, lv_first, lv_region, lv_city1)
WHERE addrnumber EQ lv_adrno AND region IN lr_region
AND city1 IN lr_city AND tel_number IN lr_tele
AND post_code1 IN lr_pc.
*___ names
SELECT SINGLE mc_name1 mc_name2 FROM but000
INTO (lv_name1 , lv_name2)
WHERE partner IN lr_partner
AND mc_name1 IN lr_name1
AND mc_name2 IN lr_name2.
*___ CRM patner guid
SELECT SINGLE partner_guid FROM but000
INTO lv_guid
WHERE partner EQ wa_result-partner.
*___ Territory guid
SELECT SINGLE terr_guid FROM crmm_territory_v
INTO lv_trguid
WHERE guid EQ lv_guid.
SELECT SINGLE terr_id FROM crmm_territory
INTO wa_result-terr_id
WHERE terr_guid EQ lv_trguid.
*__ weekfrom
SELECT SINGLE weekdayfrom FROM crmm_tour_i
INTO wa_result-weekday
WHERE guid EQ lv_guid.
wa_result-post_code1 = lv_pc.
wa_result-tel_number = lv_tele.
wa_result-mc_name1 = lv_name1.
wa_result-mc_name2 = lv_name2.
wa_result-partner2 = lv_first.
wa_result-region = lv_region.
wa_result-city = lv_city1.
APPEND wa_result TO lt_result.
lv_resultcount = lv_resultcount + 1.
IF lv_resultcount GE callcontrol-maxrecords.
EXIT.
ENDIF.
CLEAR: lv_pc,lv_tele,lv_name1,lv_name2,lv_first,lv_region,lv_city1.
CLEAR: wa_view, wa_result.
ENDLOOP.
* Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_result
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
IF rc = 0.
callcontrol-step = 'DISP'.
ELSE.
callcontrol-step = 'EXIT'.
ENDIF.
EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.
*"----------------------------------------------------------------------
* STEP DISP (Display values)
*"----------------------------------------------------------------------
* This step is called, before the selected data is displayed.
* You can e.g. modify or reduce the data in RECORD_TAB
* according to the users authority.
* If you want to get the standard display dialog afterwards, you
* should not change CALLCONTROL-STEP.
* If you want to overtake the dialog on you own, you must return
* the following values in CALLCONTROL-STEP:
* - "RETURN" if one line was selected. The selected line must be
* the only record left in RECORD_TAB. The corresponding fields of
* this line are entered into the screen.
* - "EXIT" if the values request should be aborted
* - "PRESEL" if you want to return to the selection dialog
* Standard function modules F4UT_PARAMETER_VALUE_GET and
* F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
IF callcontrol-step = 'DISP'.
* PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
* CHANGING SHLP CALLCONTROL.
EXIT.
ENDIF.
ENDFUNCTION.
Edited by: Alvaro Tejada Galindo on Jan 24, 2008 4:32 PM
2008 Jan 24 5:41 PM
Hi Corwin
<REMOVED BY MODERATOR>
FUNCTION z_shlp_exit_bpartner_reltyp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
DATA: rc LIKE sy-subrc,
dialog_canceled TYPE c,
lc_bp_shlp_badi TYPE funcname VALUE 'BUP_SHLP_EXIT_BADI'.
TYPES: BEGIN OF ls_view.
INCLUDE STRUCTURE but050.
TYPES: END OF ls_view.
DATA: lt_view TYPE STANDARD TABLE OF ls_view,
wa_view TYPE ls_view.
DATA: wa_shlp LIKE LINE OF shlp-fielddescr.
CALL FUNCTION 'F4UT_OPTIMIZE_COLWIDTH'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*------ Rolle auf jeden Fall als Mußfeld ------------------------------
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
*"----------------------------------------------------------------------
* STEP SELONE (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
* This step is only called for collective searchhelps. It may be used
* to reduce the amount of elementary searchhelps given in SHLP_TAB.
* The compound searchhelp is given in SHLP.
* If you do not change CALLCONTROL-STEP, the next step is the
* dialog, to select one of the elementary searchhelps.
* If you want to skip this dialog, you have to return the selected
* elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
* either to 'PRESEL' or to 'SELECT'.
IF callcontrol-step = 'SELONE'.
* PERFORM SELONE .........
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP PRESEL (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
IF callcontrol-step = 'PRESEL'.
*--... Datendeklartionen.
CLASS cl_exithandler DEFINITION LOAD.
DATA: lv_exit_object TYPE REF TO if_ex_bupa_augrp, "#EC NEEDED
ls_auth_selopt TYPE ddshselopt,
lt_auth_selopt TYPE TABLE OF ddshselopt WITH DEFAULT KEY.
CALL FUNCTION 'F4UT_PARAMETER_REQUIRED'
EXPORTING
parameter_required = 'RELTYP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
* Call "AUGRP" badi
CALL FUNCTION 'FUNCTION_EXISTS'
EXPORTING
funcname = lc_bp_shlp_badi
EXCEPTIONS
function_not_exist = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CALL FUNCTION lc_bp_shlp_badi
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
CHANGING
shlp = shlp
callcontrol = callcontrol.
rc = sy-subrc.
ENDIF.
EXIT.
ENDIF.
*"----------------------------------------------------------------------
* STEP SELECT (Select values)
*"----------------------------------------------------------------------
* This step may be used to overtake the data selection completely.
* To skip the standard seletion, you should return 'DISP' as following
* step in CALLCONTROL-STEP.
* Normally RECORD_TAB should be filled after this step.
* Standard function module F4UT_RESULTS_MAP may be very helpfull in this
* step.
IF callcontrol-step = 'SELECT'.
DATA: BEGIN OF ls_result,
partner LIKE but000-partner,
weekday LIKE crmm_tour_i-weekdayfrom,
terr_id LIKE crmm_territory-terr_id,
mc_name1 LIKE but000-mc_name1,
mc_name2 LIKE but000-mc_name2,
reltyp LIKE but050-reltyp,
partner2 LIKE but000_td-partner,
city LIKE adrc-city1,
post_code1 LIKE adrc-post_code1,
tel_number LIKE adrc-tel_number,
region LIKE adrc-region,
END OF ls_result.
* Local Variables
DATA: lv_resultcount TYPE i,
lv_adrno TYPE but020-addrnumber,
lv_name1 TYPE but000-mc_name1,
lv_name2 TYPE but000-mc_name2,
lv_pc TYPE adrc-post_code1,
lv_tele TYPE adrc-tel_number,
lv_guid TYPE but000-partner_guid,
lv_last TYPE adrc-name1,
lv_first TYPE adrc-name2,
lv_region TYPE adrc-region,
lv_city1 TYPE adrc-city1,
lv_trguid TYPE crmm_territory-terr_guid.
* Local Tables
DATA: ls_ddshselop TYPE ddshselopt,
lt_ddshselops TYPE ddshselops,
lt_result LIKE STANDARD TABLE OF ls_result,
wa_result LIKE ls_result.
* Ranges
RANGES: lr_reltyp FOR but050-reltyp,
lr_partner FOR but000-partner,
lr_name1 FOR but000-mc_name1,
lr_name2 FOR but000-mc_name2,
lr_region FOR adrc-region,
lr_city FOR adrc-city1,
lr_tele FOR adrc-tel_number,
lr_pc FOR adrc-post_code1.
SELECT rltyp FROM z_bupar_td INTO TABLE lt_view.
lt_ddshselops = shlp-selopt.
LOOP AT lt_ddshselops INTO ls_ddshselop.
CASE ls_ddshselop-shlpfield.
WHEN 'RELTYP'.
MOVE-CORRESPONDING ls_ddshselop TO lr_reltyp.
APPEND lr_reltyp.
WHEN 'PARTNER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_partner.
APPEND lr_partner.
WHEN 'MC_NAME1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name1.
APPEND lr_name1.
WHEN 'MC_NAME2'.
MOVE-CORRESPONDING ls_ddshselop TO lr_name2.
APPEND lr_name2.
WHEN 'REGION'.
MOVE-CORRESPONDING ls_ddshselop TO lr_region.
APPEND lr_region.
WHEN 'CITY'.
MOVE-CORRESPONDING ls_ddshselop TO lr_city.
APPEND lr_city.
WHEN 'TEL_NUMBER'.
MOVE-CORRESPONDING ls_ddshselop TO lr_tele.
APPEND lr_tele.
WHEN 'POST_CODE1'.
MOVE-CORRESPONDING ls_ddshselop TO lr_pc.
APPEND lr_pc.
ENDCASE.
ENDLOOP.
SELECT * FROM but050 INTO TABLE lt_view
WHERE reltyp IN lr_reltyp
AND partner1 IN lr_partner.
LOOP AT lt_view INTO wa_view.
wa_result-partner = wa_view-partner1.
wa_result-reltyp = wa_view-reltyp.
*___ adress details
SELECT SINGLE addrnumber FROM but020 INTO lv_adrno
WHERE partner EQ wa_result-partner.
SELECT SINGLE post_code1 tel_number name1 name2 region city1 FROM adrc
INTO (lv_pc , lv_tele, lv_last, lv_first, lv_region, lv_city1)
WHERE addrnumber EQ lv_adrno AND region IN lr_region
AND city1 IN lr_city AND tel_number IN lr_tele
AND post_code1 IN lr_pc.
*___ names
SELECT SINGLE mc_name1 mc_name2 FROM but000
INTO (lv_name1 , lv_name2)
WHERE partner IN lr_partner
AND mc_name1 IN lr_name1
AND mc_name2 IN lr_name2.
*___ CRM patner guid
SELECT SINGLE partner_guid FROM but000
INTO lv_guid
WHERE partner EQ wa_result-partner.
*___ Territory guid
SELECT SINGLE terr_guid FROM crmm_territory_v
INTO lv_trguid
WHERE guid EQ lv_guid.
SELECT SINGLE terr_id FROM crmm_territory
INTO wa_result-terr_id
WHERE terr_guid EQ lv_trguid.
*__ weekfrom
SELECT SINGLE weekdayfrom FROM crmm_tour_i
INTO wa_result-weekday
WHERE guid EQ lv_guid.
wa_result-post_code1 = lv_pc.
wa_result-tel_number = lv_tele.
wa_result-mc_name1 = lv_name1.
wa_result-mc_name2 = lv_name2.
wa_result-partner2 = lv_first.
wa_result-region = lv_region.
wa_result-city = lv_city1.
APPEND wa_result TO lt_result.
lv_resultcount = lv_resultcount + 1.
IF lv_resultcount GE callcontrol-maxrecords.
EXIT.
ENDIF.
CLEAR: lv_pc,lv_tele,lv_name1,lv_name2,lv_first,lv_region,lv_city1.
CLEAR: wa_view, wa_result.
ENDLOOP.
* Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_result
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
IF rc = 0.
callcontrol-step = 'DISP'.
ELSE.
callcontrol-step = 'EXIT'.
ENDIF.
EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.
*"----------------------------------------------------------------------
* STEP DISP (Display values)
*"----------------------------------------------------------------------
* This step is called, before the selected data is displayed.
* You can e.g. modify or reduce the data in RECORD_TAB
* according to the users authority.
* If you want to get the standard display dialog afterwards, you
* should not change CALLCONTROL-STEP.
* If you want to overtake the dialog on you own, you must return
* the following values in CALLCONTROL-STEP:
* - "RETURN" if one line was selected. The selected line must be
* the only record left in RECORD_TAB. The corresponding fields of
* this line are entered into the screen.
* - "EXIT" if the values request should be aborted
* - "PRESEL" if you want to return to the selection dialog
* Standard function modules F4UT_PARAMETER_VALUE_GET and
* F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
IF callcontrol-step = 'DISP'.
* PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
* CHANGING SHLP CALLCONTROL.
EXIT.
ENDIF.
ENDFUNCTION.
Edited by: Alvaro Tejada Galindo on Jan 24, 2008 4:32 PM
2008 Jan 24 10:06 PM
I think that I have found part of the answer. Guidance welcome on dealing with this correctly.
When record_tab is filled the first time (in this particular case) the first three characters of the string are blank. This corresponds to the client (MANDT) in the selection method (view). I am selecting the customer number based on the offset and first pass is okay. However, on the next pass these first three characters are no more.
My suspicion is that I am going to have to use the values for the structure in SHLP_TAB and some SAP function modules F4UT* etc. to manage my data.
Guidance is welcome.
2008 Jan 24 10:33 PM
Hi Corwin
Your derivation was right.. the FM "F4UT_RESULTS_MAP" is the main thingee..
this is the structure I needed in the search help to be shown....
DATA: BEGIN OF ls_result,
partner LIKE but000-partner,
weekday LIKE crmm_tour_i-weekdayfrom,
terr_id LIKE crmm_territory-terr_id,
mc_name1 LIKE but000-mc_name1,
mc_name2 LIKE but000-mc_name2,
reltyp LIKE but050-reltyp,
partner2 LIKE but000_td-partner,
city LIKE adrc-city1,
post_code1 LIKE adrc-post_code1,
tel_number LIKE adrc-tel_number,
region LIKE adrc-region,
END OF ls_result.
DATA: ls_ddshselop TYPE ddshselopt,
lt_ddshselops TYPE ddshselops,
lt_result LIKE STANDARD TABLE OF ls_result,
wa_result LIKE ls_result.
Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_result *"<<<< will hold the data, to be shown..
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
2008 Apr 21 8:50 PM
Hi Corwin,
I have similar issue with search help exit. Did it work for you? Can you pass me sample code ?
Thanks
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |