FUNCTION ZF4IF_SHLP_EXIT_BANZU_TEST. *"---------------------------------------------------------------------- *"*"本地接口: *" TABLES *" SHLP_TAB TYPE SHLP_DESCT *" RECORD_TAB STRUCTURE SEAHLPRES *" CHANGING *" VALUE(SHLP) TYPE SHLP_DESCR *" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL *"---------------------------------------------------------------------- * EXIT immediately, if you do not want to handle this step DATA: BEGIN OF GT_TAB OCCURS 0, KUNNR TYPE ZSD15-KUNNR, MATNR TYPE ZSD15-MATNR, SPRAS TYPE ZSD15-SPRAS, MAKTX TYPE MAKT-MAKTX, END OF GT_TAB. DATA R_KUNNR TYPE RANGE OF ZSD15-KUNNR WITH HEADER LINE. DATA R_MATNR TYPE RANGE OF ZSD15-MATNR WITH HEADER LINE. DATA R_SPRAS TYPE RANGE OF ZSD15-SPRAS WITH HEADER LINE. DATA R_MAKTX TYPE RANGE OF MAKT-MAKTX WITH HEADER LINE. IF CALLCONTROL-STEP <> 'SELONE' AND CALLCONTROL-STEP <> 'SELECT' AND " AND SO ON CALLCONTROL-STEP <> 'DISP'. EXIT. ENDIF. *"---------------------------------------------------------------------- * 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'. * PERFORM PRESEL .......... 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'. * PERFORM STEP_SELECT TABLES RECORD_TAB SHLP_TAB * CHANGING SHLP CALLCONTROL RC. * IF RC = 0. * CALLCONTROL-STEP = 'DISP'. * ELSE. * CALLCONTROL-STEP = 'EXIT'. * ENDIF. LOOP AT SHLP-SELOPT INTO DATA(WA_SELOPT) . . CASE WA_SELOPT-shlpfield. WHEN 'KUNNR'. MOVE-CORRESPONDING wa_selopt TO R_KUNNR. APPEND R_KUNNR . WHEN 'MATNR'. MOVE-CORRESPONDING wa_selopt TO R_MATNR. APPEND R_MATNR. WHEN 'SPRAS' . MOVE-CORRESPONDING wa_selopt TO R_SPRAS. APPEND R_SPRAS . WHEN 'MAKTX' . MOVE-CORRESPONDING wa_selopt TO R_MAKTX. APPEND R_SPRAS. WHEN OTHERS. ENDCASE. ENDLOOP. SELECT KUNNR ZSD15~MATNR zsd15~SPRAS MAKTX FROM ZSD15 INNER JOIN MAKT ON ZSD15~MATNR = MAKT~MATNR UP TO 100 ROWS INTO CORRESPONDING FIELDS OF TABLE GT_TAB WHERE KUNNR IN R_KUNNR AND zsd15~MATNR IN R_MATNR AND zsd15~SPRAS IN R_spras AND MAKTX IN R_MAKTX. * * CALL FUNCTION 'F4UT_PARAMETER_ALLOCATE' * EXPORTING * PARAMETER = 'ZHS' ** DEALLOCATE = '1' * TABLES * SHLP_TAB = SHLP_TAB * RECORD_TAB = RECORD_TAB * source_tab = GT_TAB * CHANGING * SHLP = SHLP * CALLCONTROL = CALLCONTROL. callcontrol-step = 'DISP'. CALL FUNCTION 'F4UT_RESULTS_MAP' TABLES shlp_tab = shlp_tab record_tab = record_tab source_tab = GT_TAB CHANGING shlp = shlp callcontrol = callcontrol . 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. * callcontrol-step = 'DISP'. SORT RECORD_TAB . DELETE ADJACENT DUPLICATES FROM RECORD_TAB COMPARING ALL FIELDS . "zsecond. EXIT. ENDIF. ENDFUNCTION.
![](https://images2018.cnblogs.com/blog/1245662/201808/1245662-20180804161709840-2124324760.png)