调用SM30代码

DATA:LT_SELLIST LIKE TABLE OF VIMSELLIST WITH HEADER LINE.

CALL FUNCTION 'VIEW_MAINTENANCE_CALL'

      EXPORTING
       ACTION       'U'
       VIEW_NAME    P_NAME
      TABLES

       DBA_SELLIST LT_SELLIST.


源码:

FUNCTION view_maintenance_call.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(ACTION)
*"     VALUE(CORR_NUMBER) LIKE  E070-TRKORR DEFAULT '          '
*"     VALUE(GENERATE_MAINT_TOOL_IF_MISSING) DEFAULT ' '
*"     VALUE(SHOW_SELECTION_POPUP) DEFAULT ' '
*"     VALUE(VIEW_NAME) LIKE  DD02V-TABNAME
*"     VALUE(NO_WARNING_FOR_CLIENTINDEP) DEFAULT ' '
*"     VALUE(RFC_DESTINATION_FOR_UPGRADE) LIKE  RFCDES-RFCDEST DEFAULT
*"       ' '
*"     VALUE(CLIENT_FOR_UPGRADE) LIKE  SY-MANDT DEFAULT ' '
*"     VALUE(VARIANT_FOR_SELECTION) LIKE  TVIMV-VARIANT DEFAULT ' '
*"     VALUE(COMPLEX_SELCONDS_USED) LIKE  TVDIR-FLAG DEFAULT ' '
*"     VALUE(CHECK_DDIC_MAINFLAG) DEFAULT ' '
*"     VALUE(SUPPRESS_WA_POPUP) TYPE  XFELD DEFAULT SPACE
*"  TABLES
*"      DBA_SELLIST STRUCTURE  VIMSELLIST OPTIONAL
*"      EXCL_CUA_FUNCT STRUCTURE  VIMEXCLFUN OPTIONAL
*"  EXCEPTIONS
*"      CLIENT_REFERENCE
*"      FOREIGN_LOCK
*"      INVALID_ACTION
*"      NO_CLIENTINDEPENDENT_AUTH
*"      NO_DATABASE_FUNCTION
*"      NO_EDITOR_FUNCTION
*"      NO_SHOW_AUTH
*"      NO_TVDIR_ENTRY
*"      NO_UPD_AUTH
*"      ONLY_SHOW_ALLOWED
*"      SYSTEM_FAILURE
*"      UNKNOWN_FIELD_IN_DBA_SELLIST
*"      VIEW_NOT_FOUND
*"      MAINTENANCE_PROHIBITED
*"----------------------------------------------------------------------

*----------------------------------------------------------------------*
* Datenvereinbarungen                                                  *
*----------------------------------------------------------------------*
  DATAact_level LIKE authb-actvt,    "Aktion zur Berecht.-prüfg.
        oc_action TYPE xuval,
        only_show_allowed TYPE c,      "flag: only show allowed
        countx TYPE i,                 "Zähler für Ankreuzfelder
        u(1TYPE VALUE 'U',         "Ändern
        s(1TYPE VALUE 'S',         "Anzeigen, Subset
        t(1TYPE VALUE 'T',         "Transport
        x(1TYPE VALUE 'X',         "gesetztes Flag
        r(1TYPE VALUE 'R',         "read-only
        all_substflds_initial(1TYPE c"Flag: alle Subset-Felder leer
        i_action(1TYPE crc LIKE sy-subrc,
        text(70)  TYPE c,                 "#EC NEEDED                   "SW
        msgv1 LIKE sy-msgv1msgv2 LIKE sy-msgv2msgv3 LIKE sy-msgv3,
        msgv4 LIKE sy-msgv4old_rc LIKE sy-subrc.

  DATABEGIN OF header OCCURS 1.
          INCLUDE STRUCTURE vimdesc.
  DATAEND OF header.

  DATABEGIN OF namtab OCCURS 50.
          INCLUDE STRUCTURE vimnamtab.
  DATAEND OF namtab.

  DATArangetab TYPE TABLE OF vimsellist INITIAL SIZE 50
         WITH HEADER LINE,
        oc_rangetab TYPE TABLE OF vimsellist INITIAL SIZE 50.

  DATAorg_crit_inst TYPE vimty_oc_typelockuser TYPE sy-uname.

  TRANSLATEaction TO UPPER CASE,                        "#EC SYNTCHAR
             view_name TO UPPER CASE.                     "#EC SYNTCHAR
*----------------------------------------------------------------------*
* Prüfen, ob gültige Eingabe erfolgte und ACT_LEVEL setzen
*----------------------------------------------------------------------*
  i_action action.
  CASE action.
    WHEN uMOVE '02' TO act_level.
    WHEN vim_direct_upgradeMOVE '02' TO act_leveli_action u.
    WHEN tMOVE '02' TO act_level"auth_check for corr_maint like upd
    WHEN sMOVE '03' TO act_level.
    WHEN OTHERSMESSAGE a001 RAISING invalid_action.
  ENDCASE.
*---------------------------------------------------------------------*
* ggf. temporäre Pflegeobjekte erzeugen.                              *
*---------------------------------------------------------------------*
* IF GENERATE_MAINT_TOOL_IF_MISSING NE SPACE.
*   PERFORM GENERATE_TEMPORAL_OBJECTS USING VIEW_NAME.
* ENDIF.

*----------------------------------------------------------------------*
* Funktionsbaustein zum Füllen der Kontrollblocktabellen rufen         *
*----------------------------------------------------------------------*
  REFRESH namtab.
  CLEAR   namtab.
  REFRESH header.
  CLEAR   header.
  REFRESH rangetab.
  CLEAR   rangetab.
  CALL FUNCTION 'VIEW_GET_DDIC_INFO'
    EXPORTING
      viewname              view_name
      variant_for_selection variant_for_selection
    TABLES
      x_header              header
      x_namtab              namtab
      sellist               rangetab
    EXCEPTIONS
      no_tvdir_entry        3
      table_not_found       5.
*----------------------------------------------------------------------*
* ggf. Ausnahmen behandeln                                             *
*----------------------------------------------------------------------*
  CASE sy-subrc.
    WHEN 3.
      MESSAGE e037 WITH view_name RAISING no_tvdir_entry.
*     PERFORM MESS_NO_TVDIR_ENTRY USING VIEW_NAME.
    WHEN 5.
      MESSAGE e028 WITH view_name RAISING view_not_found.
  ENDCASE.
  READ TABLE header INDEX 1.

*---------------------------------------------------------------------*
* DDIC Pflegekennzeichen                            MF 2000-11-07     *
*---------------------------------------------------------------------*

  IF check_ddic_mainflag 'X'.
    IF header-mainflag ' '.
      MESSAGE e792 WITH view_name RAISING maintenance_prohibited.
    ELSEIF header-mainflag 'N'.
      MESSAGE e789 WITH view_name RAISING maintenance_prohibited.
    ENDIF.
  ENDIF.

*---------------------------------------------------------------------*
* Berechtigungsprüfung                                                *
*---------------------------------------------------------------------*
  IF header-newgener EQ space"4.5A: support individual auth. check
    CLEAR only_show_allowed.
    CALL FUNCTION 'VIEW_AUTHORITY_CHECK'
         EXPORTING
              view_action                i_action
              view_name                  view_name
              no_warning_for_clientindep no_warning_for_clientindep
         CHANGING
              org_crit_inst              org_crit_inst
         EXCEPTIONS
              table_not_found                 5
              no_authority                    8
              no_clientindependent_authority  9
              no_linedependent_authority      10.
    CASE sy-subrc.
      WHEN 0.
      WHEN 5.
        MESSAGE e028 WITH view_name RAISING view_not_found.
      WHEN 9.
        MOVETO actionTO i_action,               "SW 1152640/1999
              TO only_show_allowed.
        MESSAGE ID 'TB' TYPE 'I' NUMBER 109       "no cli-indep auth
                RAISING no_clientindependent_auth.
      WHEN OR 10.
        IF act_level EQ '02'.          "no update authority
          CALL FUNCTION 'VIEW_AUTHORITY_CHECK'  "check show authority
               EXPORTING
                 view_action                s
                 view_name                  view_name
                 no_warning_for_clientindep no_warning_for_clientindep
               CHANGING
                 org_crit_inst              org_crit_inst
               EXCEPTIONS
                 no_authority               8
                 no_linedependent_authority 10.

          CASE sy-subrc.
            WHEN 0.                    "only show allowed
              MOVETO action,
                    s TO i_action,     "UF2136609/1998
                    '03' TO act_levelTO only_show_allowed.
              MESSAGE i051 RAISING only_show_allowed.
            WHEN 8.
* no authority respecting to S_TABU_DIS
              MESSAGE e052 RAISING no_upd_auth.
            WHEN 10.
* no authority respecting to S_TABU_LIN
              IF old_rc 10.
* no authority respecting to S_TABU_LIN
                MESSAGE e756 RAISING no_upd_auth
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* Sie haben keine zeilenbezogene Pflegeeberechtigung für diese Tabelle
              ELSE.
                MESSAGE e755 RAISING no_upd_auth
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*   Sie haben keine zeilenbezogene Anzeigeberechtigung für die Daten.
              ENDIF.
          ENDCASE.                     "sy-subrc from  2nd auth_check
        ELSE.                          "act_level <> 02
          IF sy-subrc 8.
* no authority respecting to S_TABU_DIS
            MESSAGE e053 RAISING no_show_auth.
          ELSE.                        "sy-subrc = 10
* no authority respecting to S_TABU_LIN
            MESSAGE e755 RAISING no_show_auth
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*   Sie haben keine zeilenbezogene Anzeigeberechtigung für diese Tabelle
          ENDIF.
        ENDIF.
    ENDCASE.
  ENDIF.
*----------------------------------------------------------------------*
*  Rangetab aus DDIC mit DBA_SELLIST aus Schnittstelle mischen
*----------------------------------------------------------------------*
  PERFORM vim_merge_sellists USING    dba_sellist[]
                                      namtab[]
                                      space
                             CHANGING header[]
                                      rangetab[]
                                      rc.
  IF rc 2.
    RAISE unknown_field_in_dba_sellist.
  ENDIF.
  READ TABLE header INDEX 1.
*----------------------------------------------------------------------*
* check whether rangetab is in agreement with authority
*----------------------------------------------------------------------*
  IF NOT org_crit_inst IS INITIAL AND NOT rangetab[] IS INITIAL.
    IF complex_selconds_used space.
      oc_action act_level.
      CALL METHOD org_crit_inst->check_oc_auth_vim_sellist
        EXPORTING
          sellist rangetab[]
          action  oc_action
        EXCEPTIONS
          no_auth 1.
      IF sy-subrc <> 0.
        IF act_level '02'.
          CALL METHOD org_crit_inst->check_oc_auth_vim_sellist
            EXPORTING
              sellist rangetab[]
              action  '03'
            EXCEPTIONS
              no_auth 1.
          CASE sy-subrc.
            WHEN 0.
              MOVETO action,
                    s TO i_action,     "UF2136609/1998
                    '03' TO oc_action,
                    '03' TO act_levelTO only_show_allowed.
              MESSAGE i051 RAISING only_show_allowed.
            WHEN 1.
              MOVEsy-msgv1 TO msgv1sy-msgv2 TO msgv2,
               sy-msgv3 TO msgv3sy-msgv4 TO sy-msgv4.
              MESSAGE e761(svWITH msgv1 msgv2 msgv3 msgv4
               RAISING no_upd_auth..
*   Sie haben keine Pflegeberechtigung für diese Selektion.
          ENDCASE.
        ELSE.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
           RAISING no_show_auth.
        ENDIF.
      ENDIF.
    ELSE.
      CALL METHOD org_crit_inst->set_to_be_checked2.
    ENDIF.
  ENDIF.
*----------------------------------------------------------------------*
* fill subset selection in RANGETAB from authority
* (authority object S_TABU_LIN)
*----------------------------------------------------------------------*
  IF NOT org_crit_inst IS INITIAL.
    CALL METHOD org_crit_inst->convert_oc_selections
      EXPORTING
        activity   act_level
      IMPORTING
        oc_vimsell oc_rangetab.

    PERFORM vim_merge_sellists USING    oc_rangetab
                                        namtab[]
                                        x
                               CHANGING header[]
                                        rangetab[]
                                        rc.
    IF rc 2.
      RAISE unknown_field_in_dba_sellist.
    ENDIF.
    READ TABLE header INDEX 1.
  ENDIF.
*----------------------------------------------------------------------*
* Datenbereichsgrenzen setzen                                          *
*----------------------------------------------------------------------*
  IF header-subsetflag EQ x.
*----------------------------------------------------------------------*
* prüfen, ob für alle Subsetfelder Werte fehlen                        *
*----------------------------------------------------------------------*
    PERFORM check_all_substfields TABLES rangetab
                                  CHANGING all_substflds_initial.
  ENDIF.
  IF all_substflds_initial EQ OR show_selection_popup EQ x.
*----------------------------------------------------------------------*
* Funktionsbaustein zur Eingabe der Datenbereichsgrenzen rufen         *
*----------------------------------------------------------------------*
    DO.
      CALL FUNCTION 'TABLE_RANGE_INPUT'
        EXPORTING
          table                view_name
          oc_inst              org_crit_inst
          suppress_wa_popup    suppress_wa_popup
          show_selection_popup show_selection_popup
        TABLES
          x_header             header
          x_namtab             namtab
          sellist              rangetab
        EXCEPTIONS
          no_input             2
          cancelled_by_user    12.
      IF sy-subrc EQ OR header-subsetflag NE x.
        EXIT.
      ENDIF.
      CASE sy-subrc.
        WHEN 2.
          IF header-subsetflag NE space.
            PERFORM check_all_substfields TABLES rangetab
                                  CHANGING all_substflds_initial.
            IF all_substflds_initial EQ spaceEXITENDIF.
          ELSE.
            EXIT.
          ENDIF.
        WHEN 12.
          CALL FUNCTION 'POPUP_TO_CONFIRM'                  "IG 962203
            EXPORTING
              titlebar               text-024
              diagnose_object        'SV_DIALOG_TEXT_2'
              text_question          text-026
              display_cancel_button  space
            IMPORTING
              answer                 answer.
          IF answer EQ '1'.
            MOVE 12 TO sy-subrc.
            EXIT.
          ENDIF.
      ENDCASE.
      MESSAGE s038.
    ENDDO.
    IF sy-subrc NE 12 AND header-selection NE x.
      DESCRIBE TABLE rangetab LINES countx.
      IF countx GT 0.
        MOVE TO header-selection.
        MODIFY header INDEX 1.
      ENDIF.
    ENDIF.
  ENDIF.
  IF sy-subrc NE 12.
*----------------------------------------------------------------------*
* View sperren                                                         *
*----------------------------------------------------------------------*
    IF i_action EQ OR i_action EQ AND header-existency NE r.
      CALL FUNCTION 'VIEW_ENQUEUE'
        EXPORTING
          view_name        view_name
          action           'E'
          enqueue_mode     'E'
          enqueue_range    header-subsetflag
        TABLES
          sellist          rangetab
        EXCEPTIONS
          foreign_lock     1
          system_failure   2
          table_not_found  5
          client_reference 7.
*----------------------------------------------------------------------*
* ggf. Ausnahmen behandeln                                             *
*----------------------------------------------------------------------*
      CASE sy-subrc.
        WHEN 1.
*SW: interne Meldung 0000293299 1995
*         message i049 with sy-msgv1 raising foreign_lock.
*         move: s to action.
*XB: Change to new function moduls POPUP_TO_DECIDE_LOCKED_DATA -Begin
*          text = text-101.
*          REPLACE '&' WITH sy-msgv1(12) INTO text.
*          CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
*            EXPORTING
*              titel          = text-100
*              diagnosetext1  = text
*              diagnosetext2  = text-102
*              textline1      = text-103
*              defaultoption  = 'Y'
*              cancel_display = space
*            IMPORTING
*              answer         = answer.
*          IF answer = 'A' OR answer = 'N'.
*            MESSAGE e049 WITH sy-msgv1 RAISING foreign_lock.
*          ELSEIF answer = 'J'.
*            MOVE: s TO action.
*          ENDIF.
          lockuser sy-msgv1(12).     "HCG sy-msgv1 lost at popup call
          CALL FUNCTION 'POPUP_TO_DECIDE_LOCKED_DATA'
            EXPORTING
              i_user               sy-msgv1(12)
*             I_START_COLUMN       = 9
*             I_START_ROW          = 9
            IMPORTING
              e_answer             answer.
          IF answer '2'.
*IG: internal message 305882 2005
*            MESSAGE e049 WITH lockuser RAISING foreign_lock.
            MESSAGE s049 WITH lockuser RAISING foreign_lock.
            EXIT.
          ELSEIF answer '1'.
            MOVETO action.
          ENDIF.
        WHEN 2.
          MESSAGE e050 WITH view_name RAISING system_failure.
        WHEN 5.
          MESSAGE e028 WITH view_name RAISING view_not_found.
        WHEN 7.
          MESSAGE e054 WITH sy-mandt RAISING client_reference.
      ENDCASE.
    ENDIF.
*----------------------------------------------------------------------*
* ggf. Funktionen ausschließen                                         *
*----------------------------------------------------------------------*
    IF only_show_allowed NE space.
      MOVE 'AEND' TO excl_cua_funct-functionAPPEND excl_cua_funct.
    ENDIF.
*----------------------------------------------------------------------*
* Funktionsbaustein für View-Pflege rufen                              *
*----------------------------------------------------------------------*
    CALL FUNCTION 'VIEW_MAINTENANCE'
      EXPORTING
        view_name                   view_name
        view_action                 action
        corr_number                 corr_number
        rfc_destination_for_upgrade rfc_destination_for_upgrade
        client_for_upgrade          client_for_upgrade
        complex_selconds_used       complex_selconds_used
        no_warning_for_clientindep  no_warning_for_clientindep
        oc_inst                     org_crit_inst
      TABLES
        x_header                    header
        x_namtab                    namtab
        dba_sellist                 rangetab
        excl_cua_funct              excl_cua_funct
      EXCEPTIONS
        no_database_function        2
        no_editor_function          3
        missing_corr_number         4.
*----------------------------------------------------------------------*
* ggf. Ausnahmen behandeln                                             *
*----------------------------------------------------------------------*
    CASE sy-subrc.
      WHEN 2.
        MESSAGE e022 RAISING no_database_function.
      WHEN 3.
        MESSAGE e023 RAISING no_editor_function.
    ENDCASE.
  ENDIF.                               "sy-subrc 12.
*----------------------------------------------------------------------*
* View entsperren
*----------------------------------------------------------------------*
  IF i_action EQ OR i_action EQ AND header-existency NE r.
    CALL FUNCTION 'VIEW_ENQUEUE'
      EXPORTING
        view_name        view_name
        action           'D'
        enqueue_mode     'E'
        enqueue_range    header-subsetflag
      TABLES
        sellist          rangetab
      EXCEPTIONS
        foreign_lock     1
        system_failure   2
        table_not_found  5
        client_reference 7.
*----------------------------------------------------------------------*
* ggf. Ausnahmen behandeln                                             *
*----------------------------------------------------------------------*
    CASE sy-subrc.
      WHEN 1.
        MESSAGE e049 WITH sy-msgv1 RAISING foreign_lock.
      WHEN 2.
        MESSAGE e050 WITH view_name RAISING system_failure.
      WHEN 5.
        MESSAGE e028 WITH view_name RAISING view_not_found.
      WHEN 7.
        MESSAGE e054 WITH sy-mandt RAISING client_reference.
    ENDCASE.
  ENDIF.

ENDFUNCTION.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值