读书人

两种Search Help的合拢使用 : Databa

发布时间: 2013-03-01 18:33:02 作者: rapoo

两种Search Help的合并使用 : Database View + Search Help Exit

案例:要在As03的Aseet number的Search help中加一些自定义的字段进行查找,自定义的字段在A表NLU中,可以通过将表ANLA和ANLU合并做成一个VIEW来实现,但有2个查找字段Actual NBV(NBVA)和Estimation NBV(NBVE)不存在任何一个表中,是通过表ANLC计算出来的,这里就得要通过Search Help Exit来实现

  1. 首先完成ANLA+ANLU的VIEW ZANLAU,该View不包含字段NBVA和NBVE,

两种Search Help的合拢使用 : Database View + Search Help Exit

  1. 建立Search help ZANLU分配View给选择方法及在参数后添加NBVA和NBVB字段,最后给一个SEARCH HELP EXIT函数

两种Search Help的合拢使用 : Database View + Search Help Exit

  1. 编写Search help exit程序ZF4IF_SHLP_EXIT_AS03

FUNCTION zf4if_shlp_exit_as03.*"----------------------------------*"*"Local Interface:*"  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  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'.   "聚合search help专用*   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.    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'.             "显示之前数据已经得到在表RECORD_TAB中,可以增改得到的数据,或增加自定义的选择字段进行筛选,如此例就是用database View得到数据,再用自定义的2个字段—atabase View中不存在该两字段,是算出来的数据)来筛选。。。*   PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB*                           CHANGING SHLP CALLCONTROL.    DATA: g_bukrs TYPE ddshiface-value.    DATA: BEGIN OF gt_anln1 OCCURS 0,            anln1 TYPE anla-anln1,          END OF gt_anln1.    DATA: gt_anlc TYPE TABLE OF anlc WITH HEADER LINE.    DATA: BEGIN OF gt_nbv OCCURS 0,      bukrs TYPE bukrs,      anln1 TYPE anln1,      znbva TYPE anep-anbtr,   "Actual      znbve TYPE anep-anbtr,   "Estimation    END OF gt_nbv.    DATA: wa_anlcv TYPE anlcv.**    CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'    EXPORTING      parameter               = 'BUKRS'*       OFF_RESULT              = 0*       LEN_RESULT              = 0*       FIELDNAME               = ' '     IMPORTING       value                   = g_bukrs    TABLES      shlp_tab                = shlp_tab      record_tab              = record_tab*       SELOPT_TAB              =*      RESULTS_TAB              = GT_ANLN1[]    CHANGING      shlp                    = shlp      callcontrol             = callcontrol    EXCEPTIONS      parameter_unknown       = 1      OTHERS                  = 2      .     CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'      EXPORTING        parameter               = 'ANLN1'*       OFF_RESULT              = 0*       LEN_RESULT              = 0*       FIELDNAME               = ' '*     IMPORTING*       VALUE                   =      TABLES        shlp_tab                = shlp_tab        record_tab              = record_tab*       SELOPT_TAB              =       results_tab              = gt_anln1[]      CHANGING        shlp                    = shlp        callcontrol             = callcontrol     EXCEPTIONS       parameter_unknown       = 1       OTHERS                  = 2              .    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    ENDIF.     "Caution: there're some asset don't exist in ANLC, so GT_ANLC may be lack of some asset, should add back.    SELECT * INTO TABLE gt_anlc      FROM anlc      FOR ALL ENTRIES IN gt_anln1      WHERE bukrs = g_bukrs        AND anln1 = gt_anln1-anln1. *   data: gt_anlc_01 type table of anlc WITH HEADER LINE. "Actual*   data: gt_anlc_02 type table of anlc WITH HEADER LINE. "Estimation    DATA: gf_anlc_exist TYPE c .    DATA: gf_01_exist   TYPE c.    DELETE gt_anlc[] WHERE afabe EQ '03'.    SORT gt_anlc BY bukrs anln1 gjahr DESCENDING afabe.     LOOP AT gt_anln1.      CLEAR gt_nbv.      gt_nbv-bukrs = g_bukrs.      MOVE-CORRESPONDING gt_anln1 TO gt_nbv.      CLEAR gf_anlc_exist.      CLEAR gf_01_exist.       LOOP AT gt_anlc WHERE bukrs = g_bukrs                        AND anln1 = gt_anln1-anln1.        gf_anlc_exist = 'X'.         IF gt_anlc-afabe EQ '01'.          IF gf_01_exist EQ 'X'.            APPEND gt_nbv.            EXIT.          ENDIF.          gf_01_exist = 'X'.           CLEAR wa_anlcv.          CALL FUNCTION 'FI_AA_VALUES_CALCULATE'            EXPORTING              i_anlc  = gt_anlc            IMPORTING              e_anlcv = wa_anlcv.           gt_nbv-znbva = wa_anlcv-lfd_bchwrt.         ELSEIF gt_anlc-afabe EQ '02'.          CLEAR wa_anlcv.          CALL FUNCTION 'FI_AA_VALUES_CALCULATE'            EXPORTING              i_anlc  = gt_anlc            IMPORTING              e_anlcv = wa_anlcv.           gt_nbv-znbve = wa_anlcv-lfd_bchwrt.           APPEND gt_nbv.          EXIT.        ENDIF.      ENDLOOP.       IF gf_anlc_exist EQ ''.        APPEND gt_nbv.        CLEAR gt_nbv.      ENDIF.     ENDLOOP. *    " add back the asset that don't exist in table ANLC*    DATA: l_tabix TYPE i.*    LOOP AT gt_anln1.*      l_tabix = sy-tabix.*      READ TABLE gt_nbv WITH KEY  bukrs = gt_anln1-bukrs*                                  anln1 = gt_anln1-anln1.*      IF sy-subrc NE 0.*        MOVE-CORRESPONDING gt_anln1 TO gt_nbv.*        INSERT  gt_nbv INDEX l_tabix.*      ENDIF.*    ENDLOOP.      "get the NBV select condition    DATA: gr_nbva TYPE RANGE OF znbva WITH HEADER LINE .    DATA: gr_nbve TYPE RANGE OF znbve WITH HEADER LINE .    DATA: wa_selopt LIKE LINE OF shlp-selopt.    LOOP AT shlp-selopt INTO wa_selopt.      CASE wa_selopt-shlpfield.        WHEN 'ZNBVA'.          MOVE-CORRESPONDING wa_selopt TO gr_nbva.          APPEND gr_nbva.        WHEN 'ZNBVE'.          MOVE-CORRESPONDING wa_selopt TO gr_nbve.          APPEND gr_nbve.      ENDCASE.    ENDLOOP.     LOOP AT gt_nbv.      IF gt_nbv-znbva NOT IN gr_nbva OR gt_nbv-znbve NOT IN gr_nbve.        DELETE record_tab INDEX sy-tabix.        DELETE gt_nbv     INDEX sy-tabix.        CONTINUE.      ENDIF.    ENDLOOP.      CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'      EXPORTING        parameter               = 'ZNBVA'*       OFF_SOURCE              = 0*       LEN_SOURCE              = 0*       VALUE                   =       fieldname               = 'ZNBVA'      TABLES        shlp_tab                = shlp_tab        record_tab              = record_tab       source_tab               = gt_nbv      CHANGING        shlp                    = shlp        callcontrol             = callcontrol*     EXCEPTIONS*       PARAMETER_UNKNOWN       = 1*       OTHERS                  = 2              .    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    ENDIF.      CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'    EXPORTING      parameter               = 'ZNBVE'*       OFF_SOURCE              = 0*       LEN_SOURCE              = 0*       VALUE                   =      fieldname               = 'ZNBVE'    TABLES      shlp_tab                = shlp_tab      record_tab              = record_tab      source_tab               = gt_nbv    CHANGING      shlp                    = shlp      callcontrol             = callcontrol*     EXCEPTIONS*       PARAMETER_UNKNOWN       = 1*       OTHERS                  = 2      .    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    ENDIF.      EXIT.  ENDIF.ENDFUNCTION.

读书人网 >其他数据库

热点推荐