SAP-Benutzer über RFC oder Webservice von außen verwalten

Alle Fragen rund um Basisthemen
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

SAP-Benutzer über RFC oder Webservice von außen verwalten

Beitrag von CodingBoy (ForumUser / 1 / 0 / 0 ) »
Hallo,

wir setzen in unserem Konzern ein zentrales Workflow-Managment-System ein, welches unter anderem Prozesse beherbergt, die für die Vergabe von Rechten/Rollen Genehmigungsverfahren abbildet. Diese Prozesse sollen in naherer Zukunft erweitert werden.

Ich möchte gerne aus dem Workflow-Managment-System heraus SAP-Benutzer anlegen, löschen und Berechtigungsrollen zuweisen können. Auch wäre es hilfreich pro UserID sich die Benutzerrollen zurückgeben lassen zu können.

Ich habe schonmal in der Transaktion "BAPI" nachgesehen, allerdings scheint mir hier noch die passende Sicht drauf zu fehlen.

Gibt es solche Funktionalitäten in SAP, um es fernzusteuern? Wo kann man die finden?

Ein Gruß

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: SAP-Benutzer über RFC oder Webservice von außen verwalten

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin.
Eine elegante Methode zum User kopieren/Ändern/Anlegen bieten die BAPI Funktionsbausteine:
BAPI_USER_CREATE1
BAPI_USER_GETDETAIL
BAPI_USER_CHANGE
als Alternative zur ZBV
https://help.sap.com/doc/saphelp_tm80/8 ... ameset.htm
Man kann genau festlegen, welche User kopiert werden sollen und das Ganze auch als Job laufen lassen.
Rollen kopieren ginge dann separat mit BAPI_USER_ACTGROUPS_ASSIGN.

Beispiel USER COPY System A nach System B per RFC ohne Rollen.

Könnte man natürlich auch mit einem Referenz-User und Neuanlage im Zielsystem durchführen.

So haben wir beim Go-Live die User angelegt.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZCOPY_USER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zcopy_user2.
TABLES: sscrfields,usr02.

TYPE-POOLS: icon.
* Info Destinationen
DATA: des1_info TYPE rfcsi,
      des2_info TYPE rfcsi.


  SELECTION-SCREEN FUNCTION KEY 1.

  SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.
  PARAMETERS p_des1 TYPE rfcdes-rfcdest OBLIGATORY DEFAULT 'NONE'.
  SELECTION-SCREEN END OF BLOCK b.

  SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-002.
  PARAMETERS p_des2 TYPE rfcdes-rfcdest OBLIGATORY DEFAULT 'NONE'.
  SELECTION-SCREEN END OF BLOCK a.

  SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-003.
  PARAMETERS password TYPE bapipwd OBLIGATORY LOWER CASE DEFAULT 'Berlin4$'.
  SELECT-OPTIONS bname FOR usr02-bname NO INTERVALS.
  SELECTION-SCREEN END OF BLOCK c.




  LOOP AT bname.
    PERFORM copy_user USING bname-low.
  ENDLOOP.


  EXIT.

*&---------------------------------------------------------------------*
*&      Form  write_for_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM write_for_display.
  DATA: t1(80),t2(80).
  DATA: info LIKE rfcsi,
        msg_text(80) TYPE c. "Message text

  FORMAT COLOR COL_HEADING.
  WRITE: / '*** STATUS RFC-Erreichbarkeit ***' , AT sy-linsz space.
  ULINE.
  FORMAT COLOR OFF.

  CLEAR msg_text.
  CALL FUNCTION 'RFC_PING'
    DESTINATION p_des2
    EXCEPTIONS
      communication_failure = 1  MESSAGE msg_text
      system_failure        = 2  MESSAGE msg_text.


  t1 = p_des2.
  CONDENSE t1.

  IF msg_text IS INITIAL.
    CONCATENATE 'Destination :' t1 'erreichbar.' INTO t2 SEPARATED BY space.
    FORMAT INTENSIFIED OFF.

    WRITE: / icon_led_green AS ICON,
                t2 COLOR COL_POSITIVE.

  ELSE.
    CONCATENATE 'Destination :' t1 'nicht erreichbar.' INTO t2 SEPARATED BY space.
    FORMAT INTENSIFIED OFF.

    WRITE: /      icon_led_red AS ICON,
                  t2 COLOR COL_NEGATIVE.

  ENDIF.

  CLEAR msg_text.
  CALL FUNCTION 'RFC_PING'
    DESTINATION p_des1
    EXCEPTIONS
      communication_failure = 1  MESSAGE msg_text
      system_failure        = 2  MESSAGE msg_text.


  t1 = p_des1.
  CONDENSE t1.

  IF msg_text IS INITIAL.
    CONCATENATE 'Destination :' t1 'erreichbar.' INTO t2 SEPARATED BY space.
    FORMAT INTENSIFIED OFF.

    WRITE: / icon_led_green AS ICON,
                t2 COLOR COL_POSITIVE.

  ELSE.
    CONCATENATE 'Destination :' t1 'nicht erreichbar.' INTO t2 SEPARATED BY space.
    FORMAT INTENSIFIED OFF.

    WRITE: /      icon_led_red AS ICON,
                  t2 COLOR COL_NEGATIVE.

  ENDIF.

ENDFORM.                    "write_for_display


INITIALIZATION.

  sscrfields-functxt_01 = '@38@ Check RFC-Desitinations'.

AT SELECTION-SCREEN.
  IF sy-ucomm = 'FC01'." n = 1 up to 5
* Teste Erreichbarkeit

    PERFORM write_for_display.

    CALL FUNCTION 'C14A_POPUP_LIST_DISPLAY'
      EXPORTING
        i_callback                    = 'WRITE_FOR_DISPLAY'
        i_callback_program            = sy-repid
        i_title                       = 'RFC-Verbindungen'
        i_col                         = 4
        i_row                         = 4
        i_width                       = 84
        i_height                      = 10
*   I_TEXT_WIDTH                  =
*   I_FLG_SHOW_PRINT_BUTTON       = ESP1_FALSE
     EXCEPTIONS
       no_callback_specified         = 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.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  copy_user
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM copy_user USING uname TYPE usr02-bname.
  DATA  msg_text(80) TYPE c. "Message text
  DATA  dummy(80) TYPE c. "Message text

* Input
  DATA username TYPE bapibname-bapibname.

* Output
  DATA:
  logondata LIKE bapilogond,
  defaults LIKE	bapidefaul,
  address LIKE bapiaddr3,
  company LIKE bapiuscomp,
  snc LIKE bapisncu,
  ref_user LIKE bapirefus,
  alias LIKE bapialias,
  uclass TYPE bapiuclass,
  lastmodified TYPE bapimoddat,
  islocked TYPE bapislockd.

*Tables
  DATA:
  parameter TYPE TABLE OF bapiparam,
  profiles TYPE TABLE OF bapiprof,
  activitygroups TYPE TABLE OF bapiagr,
  return TYPE TABLE OF bapiret2,
  addtel TYPE TABLE OF bapiadtel,
  addfax TYPE TABLE OF bapiadfax,
  addttx TYPE TABLE OF bapiadttx,
  addtlx TYPE TABLE OF bapiadtlx,
  addsmtp TYPE TABLE OF bapiadsmtp,
  addrml TYPE TABLE OF bapiadrml,
  addx400 TYPE TABLE OF bapiadx400,
  addrfc TYPE TABLE OF bapiadrfc,
  addprt TYPE TABLE OF bapiadprt,
  addssf TYPE TABLE OF bapiadssf,
  adduri TYPE TABLE OF bapiaduri,
  addpag TYPE TABLE OF bapiadpag,
  addcomrem TYPE TABLE OF bapicomrem,
  parameter1 TYPE TABLE OF bapiparam1,
  groups TYPE TABLE OF bapigroups,
  uclasssys TYPE TABLE OF bapiuclasssys,
  extidhead TYPE TABLE OF bapiusextidhead,
  extidpart TYPE TABLE OF bapiusextidpart,
  systems TYPE TABLE OF bapircvsys.

* RC
  DATA lret1 TYPE bapiret2.

  username = uname.

  CALL FUNCTION 'BAPI_USER_GET_DETAIL' DESTINATION p_des2
    EXPORTING
      username             = username
*       CACHE_RESULTS        = 'X'
   IMPORTING
     logondata            = logondata
     defaults             = defaults
     address              = address
     company              = company
     snc                  = snc
     ref_user             = ref_user
     alias                = alias
     uclass               = uclass
     lastmodified         = lastmodified
     islocked             = islocked
    TABLES
     parameter            = parameter
     profiles             = profiles
     activitygroups       = activitygroups
     return               = return
     addtel               = addtel
     addfax               = addfax
     addttx               = addttx
     addtlx               = addtlx
     addsmtp              = addsmtp
     addrml               = addrml
     addx400              = addx400
     addrfc               = addrfc
     addprt               = addprt
     addssf               = addssf
     adduri               = adduri
     addpag               = addpag
     addcomrem            = addcomrem
     parameter1           = parameter1
     groups               = groups
     uclasssys            = uclasssys
     extidhead            = extidhead
     extidpart            = extidpart
     systems              = systems
  EXCEPTIONS
    communication_failure = 1  MESSAGE msg_text
    system_failure        = 2  MESSAGE msg_text.

  IF sy-subrc NE 0.
    EXIT.
  ENDIF.

  LOOP AT return INTO lret1.
	message i398(00) into dummy  with lret1-MESSAGE ' ' ' ' ' ' .
  ENDLOOP.


  CLEAR lret1.
  LOOP AT return INTO lret1 WHERE type = 'E'.
    EXIT.
  ENDLOOP.

  CHECK lret1 IS INITIAL.


  CLEAR logondata-class.
  DELETE parameter  WHERE parid(1) = 'Z' OR parid(1) = 'Y'.
  DELETE parameter1 WHERE parid(1) = 'Z' OR parid(1) = 'Y'.

  CALL FUNCTION 'BAPI_USER_CREATE1' DESTINATION p_des1
    EXPORTING
      username                      = username
*   NAME_IN                       =
      logondata                     = logondata
      password                      = password
      defaults                      = defaults
      address                       = address
     company                       = company
     snc                           = snc
     ref_user                      = ref_user
     alias                         = alias
*   EX_ADDRESS                    =
      uclass                        = uclass
    force_system_assignment       = 'X'
*   SELF_REGISTER                 = ' '
   TABLES
       parameter            = parameter
       return               = return
       addtel               = addtel
       addfax               = addfax
       addttx               = addttx
       addtlx               = addtlx
       addsmtp              = addsmtp
       addrml               = addrml
       addx400              = addx400
       addrfc               = addrfc
       addprt               = addprt
       addssf               = addssf
       adduri               = adduri
       addpag               = addpag
       addcomrem            = addcomrem
*       groups               = groups
       parameter1           = parameter1
       extidhead            = extidhead
       extidpart            = extidpart
    EXCEPTIONS
      communication_failure = 1  MESSAGE msg_text
      system_failure        = 2  MESSAGE msg_text.


  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

  LOOP AT return INTO lret1.
	message i398(00) into dummy  with lret1-MESSAGE ' ' ' ' ' ' .
  ENDLOOP.


ENDFORM.                
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: SAP-Benutzer über RFC oder Webservice von außen verwalten

Beitrag von Shortcut IT (ForumUser / 52 / 2 / 18 ) »
Hallo,

wer das nicht selbst entwickeln / programmieren möchte, kann sich gerne einmal unser Produkt "Shortcut for SAP systems" ansehen, das u.a. für das Kopieren von Benutzern zwischen Systemen / Mandanten eine universell verwendbare Lösung anbietet. Dazu muss nichts in den SAP-Systemen installiert werden (keine Transporte o.ä.), man kann sofort loslegen. Gerade bei anstehenden Mandanten- oder Systemkopien können damit auf einfachste Art und Weise Benutzer gesichert und nach Kopie wieder zurückgespielt werden - auch selektiv für bestimmte User (z.B. die Systemuser, Testuser, das Projektteam etc.).
Ein Blog-Artikel dazu: https://www.shortcut-it.com/blog/index. ... ying-users

Eine frohe Adventszeit!

Shortcut IT

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1264
Views
Objekte verwalten
von tevan100 » 25.10.2017 14:38 • Verfasst in ABAP Objects®
1
Antw.
1604
Views
Verwalten von Bankkrediten
von nocrap » 16.10.2008 17:49 • Verfasst in Financials
0
Antw.
1625
Views
6
Antw.
3189
Views
Texte Verwalten im Mahnlauf
von Michi Müller » 16.12.2004 16:54 • Verfasst in Financials
13
Antw.
6598
Views
Tabelleneinträge als Objekte verwalten
von ralf.wenzel » 17.05.2014 09:49 • Verfasst in ABAP Objects®

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 12 Stunden von black_adept gelöst 23 / 3701
User Exit EXIT_RQCPRM10_001
vor 13 Stunden von a-dead-trousers 2 / 267
Trennen Strasse und Hausnummer
vor 19 Stunden von payten 13 / 10605
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1317

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 12 Stunden von black_adept gelöst 23 / 3701
User Exit EXIT_RQCPRM10_001
vor 13 Stunden von a-dead-trousers 2 / 267
Trennen Strasse und Hausnummer
vor 19 Stunden von payten 13 / 10605
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1317

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2858
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9449