Maschinelle Kopieren von Rollen funktioniert nicht

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Maschinelle Kopieren von Rollen funktioniert nicht

Beitrag von Adalan (ForumUser / 2 / 1 / 0 ) »
Hakllo zusammen,
folgendes Phänomen habe ich zur Zeit. Über eine LSMW will ich Rollen kopieren. Mit dem Ergebnis das die neue Rolle(n) leer und unbrauchbar sind. Mir "Leer" meine ich, es sind nur die "Hüllen" vorhanden ohne irgendwelche Objekte,Transaktionen etc.
Selbst ein kleiner Call-Transaktionreport führt zum gleichen Ergebnis ( siehe Coding am Ende ). Geht man den Weg jedoch im Dialog Schritt für Schritt , wird die Rolle ordentlich kopiert !!!
Kennt jemand dieses Phänomen ?

Testreport :
Report zrollen_neu no standard page heading line-size 255.

include bdcrecx1.

start-of-selection.

perform open_group.

perform bdc_dynpro using 'SAPLPRGN_TREE' '0121'.
perform bdc_field using 'BDC_CURSOR'
'AGR_NAME_NEU'.
perform bdc_field using 'BDC_OKCODE'
'=COPY'.
perform bdc_field using 'AGR_NAME_NEU'
'BAG:1:FIAR:45XX:DIS_DEBI_ALL'. "QUELL-ROLLE !!
perform bdc_dynpro using 'SAPLPRGN_COPY_COLL' '0500'.
perform bdc_field using 'BDC_CURSOR'
'P_DEST'.
perform bdc_field using 'BDC_OKCODE'
'=ALL'.
perform bdc_field using 'P_SOURCE'
'BAG:1:FIAR:45XX:DIS_DEBI_ALL'. "QUELL-ROLLE !!

perform bdc_field using 'P_DEST'
'BAG:1:FIAR:33XX:DIS_DEBI_ALL-b'. "ZIEL-ROLLE !!

perform bdc_transaction using 'PFCG'.

perform close_group.

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


Re: Maschinelle Kopieren von Rollen funktioniert nicht

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Adalan,

nach dem Kopieren einer Rolle muss dazu normalerweise noch ein Profil generiert werden. Das Profil beinhaltet alle in der Rolle benötigten Berechtigungsobjekte. Das Generieren findet automatisch statt, wenn die Rolle manuell über PFCG kopiert wird. Beim Abspielen der Batch-Input-Mappe nach deinem Beispiel wird das Generieren scheinbar nicht ausgeführt.

Ich habe es mit dem Transaktionsrecorder ausprobiert: wenn man das Kopieren der Rollen über PFCG aufzeichnet und beim Abspielen das Kennzeichen "Weiter nach Commit" setzt, dann funktioniert es. Du müsstest also entweder einen Weg finden dem Include bdcrecx1 mitzuteilen, dass du die Mappe nach dem Commit weiter ausführen möchtest, oder Du baust das Programm um und baust dort folgenden code ein:

Code: Alles auswählen.

* Konfig-Struktur für Batchinput
DATA OPT TYPE CTU_PARAMS.

*Batch-Input-Mappe erstellen --> BDCDATA
...

* Parameter für Batchinput setzen
...
" verhindern, daß der Transaktionsaufruf nach einem COMMIT endet
  opt-racommit = 'X'. 

CALL TRANSACTION 'PFCG' USING bdcdata options from opt.

Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
Adalan

schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Maschinelle Kopieren von Rollen funktioniert nicht

Beitrag von Adalan (ForumUser / 2 / 1 / 0 ) »
Hallo Alexander,

ich versteh nicht ganz was dann genau passiert , wenn es heisst "weiter nach commit". Muss man das genannte generieren auch noch "irgendwie" anstoßen ?
Ansonsten werde ich die Sache gleich mal ausprobieren.

Re: Maschinelle Kopieren von Rollen funktioniert nicht

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
[quote="Adalan"
ich versteh nicht ganz was dann genau passiert , wenn es heisst "weiter nach commit". Muss man das genannte generieren auch noch "irgendwie" anstoßen ?
[/quote]

irgendwo zwischen dem Kopieren der Rollen und dem Generieren der Profile wird aus der Transaktion PFCG ein COMMIT-Befehl abgesetzt. Der normale Batch-Input-Lauf geht davon aus, dass seine Arbeit bei einem COMMIT erledigt ist und spielt keine weiteren Befehle mehr ab. Um dieses Verhalten zu umgehen gibt es einen Schalter den man setzen kann. Wenn Du eine Transaktion mit dem Recorder aufzeichnest (SHDB), so wirst du die Option "Weiter nach commit" finden. Damit kannst du die Transaktion bis zum Ende aufzeichnen, auch wenn zwischendurch mal ein COMMIT abgesetzt wird. Führst du die somit aufgezeichnete Mappe mit
CALL TRANSACTION xxxx USING bdcdata aus, so musst du ebenfalls einen Parameter mitgeben der aussagt, dass der Batch nach einem COMMIT weiter ausgeführt werden soll.

Was deinen Fall angeht, so wird die Transaktion PFCG über die Funktion bdc_transaction aus dem Include bdcrecx1 ausgeführt. Leider sieht diese Funktion dort nicht die Möglichkeit das benötigte Kennzeichen zu übergeben, zumindest habe ich es nicht gefunden.

Probier es bitte mit diesem Code hier. Es ist vielleicht nicht optimal, wir würden aber erkennen können, ob der Fehler tatsächlich aus dieser Commit-Problematik stammt:

Code: Alles auswählen.

REPORT zrollen_neu NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE bdcrecx1.

START-OF-SELECTION.

  PERFORM open_group.

  PERFORM bdc_dynpro USING 'SAPLPRGN_TREE' '0121'.

  PERFORM bdc_field USING 'BDC_CURSOR'
  'AGR_NAME_NEU'.

  PERFORM bdc_field USING 'BDC_OKCODE'
  '=COPY'.

  PERFORM bdc_field USING 'AGR_NAME_NEU'
  'BAG:1:FIAR:45XX:DIS_DEBI_ALL'. "QUELL-ROLLE !!

  PERFORM bdc_dynpro USING 'SAPLPRGN_COPY_COLL' '0500'.

  PERFORM bdc_field USING 'BDC_CURSOR'
  'P_DEST'.

  PERFORM bdc_field USING 'BDC_OKCODE'
  '=ALL'.

  PERFORM bdc_field USING 'P_SOURCE'
  'BAG:1:FIAR:45XX:DIS_DEBI_ALL'. "QUELL-ROLLE !!

  PERFORM bdc_field USING 'P_DEST'
  'BAG:1:FIAR:33XX:DIS_DEBI_ALL-b'. "ZIEL-ROLLE !!

  PERFORM zbdc_transaction USING 'PFCG'.

  PERFORM close_group.

*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM zbdc_transaction USING tcode.
  DATA: l_mstring(480).
  DATA: l_subrc LIKE sy-subrc.
  DATA opt TYPE ctu_params.

  opt-racommit = 'X'.
  opt-dismode = ctumode.
  opt-updmode = cupdate.

* batch input session
  IF session = 'X'.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        tcode     = tcode
      TABLES
        dynprotab = bdcdata.
    IF smalllog <> 'X'.
      WRITE: / 'BDC_INSERT'(i03),
               tcode,
               'returncode:'(i05),
               sy-subrc,
               'RECORD:',
               sy-index.
    ENDIF.
* call transaction using
  ELSE.
    REFRESH messtab.
    CALL TRANSACTION tcode USING bdcdata
*                     mode   ctumode
*                     update cupdate
                     OPTIONS FROM opt
                     MESSAGES INTO messtab.
    l_subrc = sy-subrc.
    IF smalllog <> 'X'.
      WRITE: / 'CALL_TRANSACTION',
               tcode,
               'returncode:'(i05),
               l_subrc,
               'RECORD:',
               sy-index.
      LOOP AT messtab.
        SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
                                  AND   arbgb = messtab-msgid
                                  AND   msgnr = messtab-msgnr.
        IF sy-subrc = 0.
          l_mstring = t100-text.
          IF l_mstring CS '&1'.
            REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
          ELSE.
            REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
            REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
          ENDIF.
          CONDENSE l_mstring.
          WRITE: / messtab-msgtyp, l_mstring(250).
        ELSE.
          WRITE: / messtab.
        ENDIF.
      ENDLOOP.
      SKIP.
    ENDIF.
** Erzeugen fehlermappe ************************************************
    IF l_subrc <> 0 AND e_group <> space.
      IF e_group_opened = ' '.
        CALL FUNCTION 'BDC_OPEN_GROUP'
          EXPORTING
            client   = sy-mandt
            group    = e_group
            user     = e_user
            keep     = e_keep
            holddate = e_hdate.
        e_group_opened = 'X'.
      ENDIF.
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode     = tcode
        TABLES
          dynprotab = bdcdata.
    ENDIF.
  ENDIF.
  REFRESH bdcdata.
ENDFORM.                    "zbdc_transaction
schöne Grüße
Alexander

ECC 6.0 EHP 7

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1721
Views
maschinelle Zahlung per Bankeinzug?
von hakan_gueven@yahoo.de » 07.05.2008 09:51 • Verfasst in Financials
5
Antw.
2080
Views
Maschinelle Änderung von Varianten
von KlausB » 02.03.2009 17:31 • Verfasst in ABAP® Core
56
Antw.
7606
Views
Maschinelle Lohnsteuerberechnung für 2019
von cgreiner » 27.11.2018 20:44 • Verfasst in ABAP® für Anfänger
4
Antw.
11972
Views
maschinelle Buchung mehr als 999 Positionen
von schnaku » 13.02.2009 11:26 • Verfasst in Financials
5
Antw.
4109
Views
Instanzen kopieren, ohne Referencen zu kopieren
von markudo » 25.04.2008 09:16 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742