SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

List contents of an authorization profile



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Security and Monitoring
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Sat Nov 17, 2007 7:26 pm    Post subject: List contents of an authorization profile Reply with quote

List contents of an authorization profile with hierarchy, objects and fields; example of recursive calls of form routines

Code:
REPORT ZZBGS092 LINE-COUNT 50 LINE-SIZE 132.
*----------------------------------------------------------------------*
* Description: Program generating an overview of profiles and authori- *
*              zations. The list is build as a tree list, with         *
*              splitting up composite profiles in single profiles.     *
*              Single profiles are split into authorization.           *
*              Authorization are printed with the both object name and *
*              Auth name.                                              *
*                                                                      *
* Implementing:The program uses recursion. Due to the amount of data   *
*              it was nessesary to keep the data in internal tables    *
*              filled and released as stack tables.                    *
*                                                                      *
* Customizing: None.                                                   *
*                                                                      *
* Change of    None.                                                   *
* release:                                                             *
*                                                                      *
* SAP Releases:2.2x - 3.0x                                             *
*                                                                      *
* Programmer:  Benny G. Sørensen                                       *
* Date:        September 1996                                          *
*                                                                      *
* Submitting:  By transaction SA38 or by batch job scheduling.         *
*                                                                      *
* Authori- :   None                                                    *
* zation                                                               *
*                                                                      *
* Parametre:   P_mandt : Client                                        *
*              P_user  : Userid                                        *
*              P_modbe : Userid for creator                            *
*              P_profn : Profile                                       *
*                                                                      *
* Select-options :                                                     *
*-------------------------------Corrections----------------------------*
* Date        Userid     Correction                                    *
* 21-12-1996  BGS        Bug: Missing refresh of Ustack and Pstack     *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Tables:                                                              *
*----------------------------------------------------------------------*
TABLES: USR10      "User master authorization profil
       ,USR12      "User master authorization values
       ,USR11      "Usermaster text for profiles (USR10)
       ,USR13      "Korttekster til authorizations
       ,TOBJ       "Objects
       ,USR04      "User
       ,USR03      "User
       .
SELECT-OPTIONS P_MANDT FOR USR10-MANDT DEFAULT SY-MANDT.
PARAMETERS:    P_USER  LIKE USR04-BNAME DEFAULT SY-UNAME.
SELECT-OPTIONS P_MODBE FOR USR10-MODBE.
SELECT-OPTIONS P_PROFN FOR USR10-PROFN.
SELECT-OPTIONS P_AKTPS FOR USR10-AKTPS DEFAULT 'A'.
SELECT-OPTIONS P_TYP   FOR USR10-TYP.
PARAMETERS:    P_SHWAUT AS CHECKBOX DEFAULT 'X'.
PARAMETERS:    P_SHWVAL AS CHECKBOX DEFAULT 'X'.

*----------------------------------------------------------------------*
* CONSTANTS                                                            *
*----------------------------------------------------------------------*
DATA: _ADDPOS     TYPE I VALUE 4
     ,_SINGLEPROF VALUE 'S'
     ,_COLECTPROF VALUE 'C'
     ,_AKTIVATED  VALUE 'A'
     ,_INWORK     VALUE 'P'
     ,_FINESEL    VALUE 'F'
     ,_ROUGHSEL   VALUE 'R'
     ,_AUTHLNG    LIKE SY-FDPOS VALUE 12
     ,_PROFLNG    LIKE SY-FDPOS VALUE 12
     ,_OBJLNG     LIKE SY-FDPOS VALUE 10
     ,_FLDLNG     LIKE SY-FDPOS VALUE 10
     ,_MAXCPF     TYPE I VALUE 300
     ,_MAXPRO     TYPE I VALUE 170
     ,_MAXUSR     TYPE I VALUE 300
     ,OK          TYPE I VALUE 0
     .
*----------------------------------------------------------------------*
* Variables                                                            *
*----------------------------------------------------------------------*
DATA: W_OFF       TYPE I
     ,W_NRAUT     TYPE I
     ,W_STACK     TYPE P
     ,W_COLUMN    TYPE P
     ,W_ROWS      TYPE I
     .

FIELD-SYMBOLS: <TEXT>.

*----------------------------------------------------------------------*
* Internal tables                                                      *
*----------------------------------------------------------------------*
DATA:   MAXSET TYPE I VALUE 100.
DATA:   BEGIN OF TABSET OCCURS 30,   
          SFIELD LIKE TOBJ-FIEL1,
          VON(18),
          BIS(18),
        END OF TABSET.

DATA: BEGIN OF TUSR10 OCCURS 0.        "Selected profiles
        INCLUDE STRUCTURE USR10.
DATA: END OF TUSR10.

DATA: BEGIN OF USTACK OCCURS 0.        "Stacked profiles
        INCLUDE STRUCTURE USR10.
DATA:   NUMBER  TYPE P
       ,COLUMN  TYPE P.
DATA: END OF USTACK.

DATA: BEGIN OF PSTACK OCCURS 30,       "Stacked profiles/authorizations
        MANDT   LIKE USR10-MANDT
       ,PROFN   LIKE USR10-PROFN
       ,OBJCT   LIKE USR12-OBJCT
       ,AUTH    LIKE USR12-AUTH
       ,AKTPS   LIKE USR10-AKTPS
       ,NUMBER  TYPE P
       ,COLUMN  TYPE P
     ,END OF PSTACK.

DATA: BEGIN OF PROFILE.
        INCLUDE STRUCTURE USR10.
DATA: END OF PROFILE.

DATA:   BEGIN OF TABUSR OCCURS 30,    "Int. Tab.
          PROFILE LIKE USR10-PROFN,
          SAMPROF(1),
          PTEXT   LIKE USR11-PTEXT,
        END OF TABUSR.

*----------------------------------------------------------------------*
* Event: TOP-OF-PAGE                                                   *
*----------------------------------------------------------------------*
TOP-OF-PAGE.
  WRITE:/02 SY-ULINE.
  IF P_USER NE SPACE.
    WRITE:/02 'For brugerid: ', USR04-BNAME, USR03-NAME1.
    WRITE:/02 SY-ULINE.
  ENDIF.
  WRITE:/02(80) SPACE               COLOR COL_HEADING
       ,/01(16) 'Compositeprofile'  COLOR 1
       , 21(13) 'Singleprofile'     COLOR 2
       , 41(13) 'Authorization'     COLOR 6
       , 61(12) 'Object'            COLOR 5
       , 81     'PF6 = Retur'       COLOR 7
       .
  WRITE:/02 SY-ULINE.

*----------------------------------------------------------------------*
* Event: INITALIZATION                                                 *
*----------------------------------------------------------------------*
INITIALIZATION.


*----------------------------------------------------------------------*
* Event: START-OF-SELECTION                                            *
* Read and process all profiles wether nor it is a composite or single *
* profile. Select only active profiles and only profiles in user selec-*
* tions.                                                               *
*----------------------------------------------------------------------*
START-OF-SELECTION.
DATA: USRFILL TYPE I
     ,RC      LIKE SY-SUBRC.

   W_STACK = 0.
   REFRESH: PSTACK, USTACK.

   DESCRIBE TABLE P_PROFN LINES W_ROWS.
   CONDENSE P_USER.              "If P_USER entered by user, select
                                 "only that users allocated profiles
   IF P_USER NE SPACE AND W_ROWS = 0.
     PERFORM GET_USER_PROFILES.
   ENDIF.

   SELECT * FROM USR10 CLIENT SPECIFIED INTO TABLE TUSR10
     WHERE MANDT IN P_MANDT
       AND AKTPS IN P_AKTPS
       AND MODBE IN P_MODBE
       AND PROFN IN P_PROFN
       AND TYP   IN P_TYP.

   COMMIT WORK.
   IF SY-SUBRC = OK.
     LOOP AT TUSR10.
       CLEAR: USTACK, PSTACK.
       REFRESH: PSTACK, USTACK.
       MOVE-CORRESPONDING TUSR10 TO USTACK.
       ADD 1 TO W_STACK.
       USTACK-NUMBER = W_STACK.
       USTACK-COLUMN = 2.
       APPEND USTACK.

       PERFORM SPLIT_AUTHS_INTO_ITEMS.  "Recursive form

       DELETE USTACK INDEX W_STACK.
       CLEAR USTACK.
       SUBTRACT 1 FROM W_STACK.
       COMMIT WORK.
       NEW-PAGE.
     ENDLOOP.
   ELSE.
     WRITE:/02 'No Profiles matching criteria found'(020)
           COLOR COL_HEADING.
   ENDIF.

*----------------------------------------------------------------------*
* EVENT: AT PF                                                         *
*----------------------------------------------------------------------*
AT PF6.
  LEAVE TO TRANSACTION 'ZAUT'.

*----------------------------------------------------------------------*
* EVENT: END-OF-SELECTION                                              *
*----------------------------------------------------------------------*
END-OF-SELECTION.
  Write:/02(80) sy-uline.
  WRITE:/02(80) 'Profile list finished' COLOR COL_HEADING.

*----------------------------------------------------------------------*
* FORM: If the parameter P_USER  is entered, only profiles for this    *
* user are selected and only for one specified client                  *
*----------------------------------------------------------------------*
FORM GET_USER_PROFILES.
  PERFORM READ_USR04 USING P_USER RC USRFILL.
  IF RC NE OK.
     MESSAGE ID 'FT' TYPE 'E' NUMBER '001'
             WITH 'User does not exists in client ' P_MANDT-LOW.
  ENDIF.

  REFRESH P_PROFN.                    "Get all profiles attached
  LOOP AT TABUSR.                     "to the user and save it
     P_PROFN-SIGN   = 'I'.            "in the internal table
     P_PROFN-OPTION = 'EQ'.           "P_PROFN.
     P_PROFN-LOW    = TABUSR-PROFILE. "
     APPEND P_PROFN.                  "
  ENDLOOP.                            "
ENDFORM.

*----------------------------------------------------------------------*
* FORM: Split_Auths_Into_Items                                         *
* This form is called recursivly until AUTHS only hold authorizations, *
* meaning when single profile type = S. Note that the printing position*
* are calculated depending on the hierarcy level.                      *
*----------------------------------------------------------------------*
FORM SPLIT_AUTHS_INTO_ITEMS.
DATA: COLUMN  TYPE P
     ,AUTHORIZATION(23) TYPE C
     ,RC LIKE SY-SUBRC.

  CLEAR W_COLUMN.
  READ TABLE USTACK INDEX W_STACK.
  MOVE-CORRESPONDING USTACK TO PROFILE.
  MOVE USTACK-COLUMN TO COLUMN.
  POSITION COLUMN.

  SELECT SINGLE * FROM USR11 CLIENT SPECIFIED
    WHERE  MANDT  = PROFILE-MANDT
      AND  LANGU  = SY-LANGU
      AND  PROFN  = PROFILE-PROFN
      AND  AKTPS  = PROFILE-AKTPS  .
  IF SY-SUBRC NE OK.
    CLEAR USR11.
    USR11-PTEXT = 'No description found'.
  ENDIF.

  CASE PROFILE-TYP.
    When 'C'.                         "Composite profile
      WRITE: PROFILE-PROFN COLOR 1
           , USR11-PTEXT COLOR COL_NORMAL, /.
      PERFORM FILL_TABPRO.
      LOOP AT PSTACK WHERE NUMBER = W_STACK.
        SELECT SINGLE * FROM USR10 CLIENT SPECIFIED
          WHERE MANDT = PSTACK-MANDT
            AND AKTPS = PSTACK-AKTPS
            AND PROFN = PSTACK-PROFN.

        IF SY-SUBRC = OK.
          W_COLUMN = PSTACK-COLUMN .
          CLEAR USTACK.
          MOVE-CORRESPONDING USR10 TO USTACK.
          ADD 1 TO W_STACK.
          USTACK-NUMBER = W_STACK.
          USTACK-COLUMN = W_COLUMN.
          APPEND USTACK.
          PERFORM SPLIT_AUTHS_INTO_ITEMS.
          DELETE USTACK INDEX W_STACK.
          LOOP AT PSTACK WHERE NUMBER = W_STACK.
            DELETE PSTACK.
          ENDLOOP.
          SUBTRACT 1 FROM W_STACK.
        ELSE.
          W_COLUMN = COLUMN + _ADDPOS.
          POSITION W_COLUMN.
          WRITE: PSTACK-PROFN COLOR 2, '%'.
        ENDIF.
      ENDLOOP.

    When 'S'.                         "Single profile
      WRITE: PROFILE-PROFN COLOR 2
            ,USR11-PTEXT COLOR COL_NORMAL, /.

      IF P_SHWAUT = 'X'.
        PERFORM FILL_TABPRO.
        LOOP AT PSTACK WHERE NUMBER = W_STACK.

          SELECT SINGLE * FROM  USR13 CLIENT SPECIFIED
            WHERE  MANDT  = PSTACK-MANDT
              AND  LANGU  = SY-LANGU
              AND  OBJCT  = PSTACK-OBJCT
              AND  AUTH   = PSTACK-AUTH
              AND  AKTPS  = PSTACK-AKTPS .
          IF SY-SUBRC NE OK.
            CLEAR USR13.
            USR13-ATEXT = 'No description found'.
          ENDIF.

          W_COLUMN = PSTACK-COLUMN.
          POSITION W_COLUMN.
          WRITE:  PSTACK-AUTH COLOR 6.
          W_COLUMN = COLUMN + _ADDPOS + _PROFLNG + 2.
          POSITION W_COLUMN.
          WRITE:   PSTACK-OBJCT COLOR 5
                 , USR13-ATEXT COLOR COL_NORMAL, /.
          IF P_SHWVAL = 'X'.
            PERFORM READ_USR12 USING PSTACK-OBJCT PSTACK-AUTH
                                     PSTACK-AKTPS RC.
            LOOP AT TABSET.
              POSITION W_COLUMN.
              WRITE: TABSET-SFIELD, TABSET-VON, TABSET-BIS,/.
            ENDLOOP.
          ENDIF.
        ENDLOOP.
      ENDIF.
    WHEN OTHERS.
      PERFORM ERRORHANDLING USING 21 TEXT-021.
  ENDCASE.
ENDFORM. "Split_Auths_Into_Items

*----------------------------------------------------------------------*
* FORM: ErrorHandling                                                  *
* If any error occurs the program terminates.                          *
*----------------------------------------------------------------------*
FORM ERRORHANDLING USING ERRORNUMBER ERRORTEXT.
  WRITE:/02 ERRORNUMBER, ERRORTEXT COLOR 7.
  stop.
Endform. "ErrorHandling

*---------------------------------------------------------------------*
* FORM FILL_TABPRO                                                    *
* The splitting up of AUTHS field depend on wether profile-typ is     *
* Composite or single profile. If Composite we split for each 12      *
* Character, if Single profile we split for each 22 character, because*
* an authorization id consist of both object and authorization Id.    *
*---------------------------------------------------------------------*
FORM FILL_TABPRO.

*   Composite profile consist only of single-profiles
    IF PROFILE-TYP = _COLECTPROF.
      CLEAR PSTACK.
      W_OFF = 2.
      W_NRAUT = PROFILE-NRAUT / 12.
      IF W_NRAUT > _MAXCPF. W_NRAUT = 0. ENDIF.
      DO W_NRAUT TIMES.
        ASSIGN PROFILE-AUTHS+W_OFF(_PROFLNG) TO <TEXT>.
        WRITE <TEXT> TO PSTACK-PROFN.
        PSTACK-NUMBER = W_STACK.
        PSTACK-MANDT  = PROFILE-MANDT.
        PSTACK-AKTPS  = PROFILE-AKTPS.
        PSTACK-COLUMN = USTACK-COLUMN + _ADDPOS.
        APPEND PSTACK.
        W_OFF = W_OFF + _PROFLNG.
      ENDDO.
*   Single profile consist only of authorizations
    ELSE.
      IF PROFILE-TYP = _SINGLEPROF.
        CLEAR PSTACK.
        W_OFF = 2.
        W_NRAUT = PROFILE-NRAUT / 22.
        IF W_NRAUT > _MAXPRO. W_NRAUT = 0. ENDIF.
        DO W_NRAUT TIMES.
          ASSIGN PROFILE-AUTHS+W_OFF(_OBJLNG) TO <TEXT>.
          WRITE <TEXT> TO PSTACK-OBJCT.
          W_OFF = W_OFF + _OBJLNG.
          ASSIGN PROFILE-AUTHS+W_OFF(_AUTHLNG) TO <TEXT>.
          WRITE <TEXT> TO PSTACK-AUTH.
          W_OFF = W_OFF + _AUTHLNG.
          PSTACK-MANDT  = PROFILE-MANDT.
          PSTACK-AKTPS  = PROFILE-AKTPS.
          PSTACK-NUMBER = W_STACK.
          PSTACK-COLUMN = USTACK-COLUMN + _ADDPOS.
          APPEND PSTACK.
        ENDDO.
      ENDIF.
    ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
* FORM : Read_USR12                                                   *
*---------------------------------------------------------------------*
FORM READ_USR12 USING VALUE(OBJECT) VALUE(AUTH) VALUE(AKTPAS) RC.
  DATA: INTFLAG TYPE I VALUE 0,
        OFF     TYPE I,
        VTYP,
        LNG     TYPE I,
        CLNG(2),
        GLNG(2),
        SETFILL LIKE SY-TFILL.
FIELD-SYMBOLS: <TEXT>.
*
  CLEAR USR12.
  RC = 0.

  IF AKTPAS = _AKTIVATED OR AKTPAS = _INWORK.
    SELECT SINGLE * FROM USR12       "Expl. Aktiv- od. Pflegeversion
           WHERE OBJCT  = OBJECT
           AND   AUTH    = AUTH
           AND   AKTPS  = AKTPAS.
  ELSE.
    SELECT SINGLE * FROM USR12        "Wenn nicht, dann zuerst Pflege-
           WHERE OBJCT  = OBJECT
           AND   AUTH    = AUTH
           AND   AKTPS  = _INWORK.
    IF SY-SUBRC <> 0.
      SELECT SINGLE * FROM USR12      "Nicht vorh., dann Aktivv. lesen
             WHERE OBJCT  = OBJECT
             AND   AUTH    = AUTH
             AND   AKTPS  = _AKTIVATED.
    ENDIF.
  ENDIF.

  IF SY-SUBRC = 0.
        SETFILL = 0.
        REFRESH TABSET.
        CLEAR TABSET.
        OFF = 2.
* Werte aufschluesseln und in die int. Tab. tabset laden
        ASSIGN USR12-VALS+OFF(1) TO <TEXT>.
        WRITE <TEXT> TO VTYP.
* Var. Teil bis zum FF (= Endezeichen) lesen
        WHILE VTYP <> '  ' AND OFF < USR12-LNG.
          OFF = OFF + 1.
* vtyp steht fuer Schluessel, ob es sich um Feldnamen, Einzelwert,
* Anfang Intervall oder Ende Intervall handelt.
          CASE VTYP.
            WHEN 'F'.                 "Feldname
              OFF = OFF + 5.
              ASSIGN USR12-VALS+OFF(2) TO <TEXT>.
              WRITE <TEXT> TO CLNG.
              LNG = CLNG.
              OFF = OFF + 2.
              ASSIGN USR12-VALS+OFF(_FLDLNG) TO <TEXT>.
              WRITE <TEXT> TO TABSET-SFIELD.
              OFF = OFF + _FLDLNG.
            WHEN 'E'.                 "Einzelwert
              ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
              WRITE <TEXT> TO TABSET-VON.
              IF TABSET-VON = SPACE.
                TABSET-VON = ''' '''. 
              ENDIF.
              APPEND TABSET.
              SETFILL = SETFILL + 1.
              TABSET-VON = SPACE.
              TABSET-BIS = SPACE.
              OFF = OFF + LNG.
            WHEN 'G'.             
              ASSIGN USR12-VALS+OFF(2) TO <TEXT>.
              WRITE <TEXT> TO CLNG.
              GLNG = CLNG.
              OFF = OFF + 2.
              ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
              IF INTFLAG = 0.
                WRITE <TEXT> TO TABSET-VON.
                WRITE '*' TO TABSET-VON+GLNG.
              ELSE.
                WRITE <TEXT> TO TABSET-BIS.
                WRITE '*' TO TABSET-BIS+GLNG.
                INTFLAG = 0.
              ENDIF.
              APPEND TABSET.
              SETFILL = SETFILL + 1.
              TABSET-VON = SPACE.
              TABSET-BIS = SPACE.
              OFF = OFF + LNG.
            WHEN 'V'.                 
              INTFLAG = 1.
              ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
              WRITE <TEXT> TO TABSET-VON.
              IF TABSET-VON = SPACE. 
                TABSET-VON = ''' '''.
              ENDIF.
              OFF = OFF + LNG.
            WHEN 'B'.                 
              INTFLAG = 0.
              ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
              WRITE <TEXT> TO TABSET-BIS.
              IF TABSET-BIS = SPACE. 
                TABSET-BIS = ''' '''.
              ENDIF.
              APPEND TABSET.
              SETFILL = SETFILL + 1.
              TABSET-VON = SPACE.
              TABSET-BIS = SPACE.
              OFF = OFF + LNG.
          ENDCASE.
          ASSIGN USR12-VALS+OFF(1) TO <TEXT>.
          WRITE <TEXT> TO VTYP.
        ENDWHILE.
  ELSE.
    RC = SY-SUBRC.
  ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
* FORM : Read_USR04                                                   *
*---------------------------------------------------------------------*
FORM READ_USR04 USING VALUE(USER) RC USRFILL.
  CLEAR USR04.
  RC = 0.
  SELECT SINGLE * FROM USR04  CLIENT SPECIFIED
         WHERE  MANDT = P_MANDT-LOW
           AND  BNAME = USER.
  IF SY-SUBRC = 0.
    SELECT SINGLE * FROM USR03  CLIENT SPECIFIED
           WHERE  MANDT = P_MANDT-LOW
             AND  BNAME = USER.
    PERFORM FILL_TABUSR USING USRFILL.
  ELSE.
    REFRESH TABUSR.
    CLEAR TABUSR.
    USRFILL = 0.
    RC = 4.
  ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
* FORM : write_vline                                                  *
*---------------------------------------------------------------------*
FORM FILL_TABUSR USING USRFILL.
DATA: NRPRO TYPE I,
      OFF   TYPE I.
*
  REFRESH TABUSR.
  CLEAR TABUSR.
  USRFILL = 0.
  OFF = 2.
  NRPRO = USR04-NRPRO / 12.                             
  IF NRPRO > _MAXUSR. NRPRO = 0. ENDIF.
  DO NRPRO TIMES.
    ASSIGN USR04-PROFS+OFF(_PROFLNG) TO <TEXT>.
    WRITE <TEXT> TO TABUSR-PROFILE.
    APPEND TABUSR.
    USRFILL = USRFILL + 1.
    OFF = OFF + _PROFLNG.
  ENDDO.
ENDFORM.

*---------------------------------------------------------------------*
* FORM : write_vline                                                  *
*---------------------------------------------------------------------*
FORM WRITE_VLINE USING MODE POS.
    IF MODE NE 'T'.
      FORMAT INTENSIFIED.
    ENDIF.
    POSITION POS.
    WRITE: SY-VLINE.
    IF MODE NE 'T'.
      FORMAT RESET.
    ENDIF.
ENDFORM.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Security and Monitoring All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.