Ansicht
Dokumentation

CL_PFCG_ROLE_FACTORY - Rollen API - Factory Klasse

CL_PFCG_ROLE_FACTORY - Rollen API - Factory Klasse

Addresses (Business Address Services)   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Diese Entwicklung stellt Interfacemethoden zum Lesen und Bearbeiten von Berechtigungsdaten in Einzelrollen bereit und schafft damit die Grundlage für Funktionen zur Massenpflege. Aufgrund der Veröffentlichung per Interface können auch externe Anwendungen die Methoden verwenden.
Die folgenden Erläuterungen geben eine Übersicht über die vorhandenen Methoden sowie Anleitungen für deren Gebrauch und richten sich in erster Linie an Entwickler von Funktionen zur Berechtigungsdatenpflege. Reine Endanwender können auf die Lektüre dieses Texts verzichten. Ihnen wird stattdessen empfohlen, die Transaktion PFCGMASSVAL kennenzulernen (Hinweis 2177996 plus Folgekorrekturen und Funktionserweiterungen in den dort referenzierten Hinweisen), in der die vorgestellten Methoden genutzt werden.
Der vorliegende Hinweis stellt per Interface IF_PFCG_ROLE_AUTHORIZATION ausschließlich Methoden zur Behandlung gewöhnlicher Berechtigungsfeldwerte bereit. Hinweis 2166856 ergänzt im gleichen Interface Methoden für Orgebenenwerte. Diese Erweiterungen sind auch per Korrekturanleitungen verfügbar.

I. Voraussetzungen

Alle Methoden des Interfaces IF_PFCG_ROLE_AUTHORIZATION sind Instanzmethoden und benötigen daher vor ihrem Aufruf pro Rolle eine Instanz zur implementierenden Klasse CL_PFCG_ROLE. Zur Erzeugung je einer Instanz pro Rolle stehen zwei Methoden in der Klasse CL_PFCG_ROLE_FACTORY zur Verfügung:

  • RETRIEVE für reine Lesezugriffe
  • RETRIEVE_FOR_UPDATE für Änderungsoperationen


Beiden Methoden wird in Tabelle IT_PFCG_ROLE die Liste der zu behandelnden Rollen übergeben. Tabelle ET_NODE_ROOT gibt die Objektreferenzen derjenigen Rollen zurück, deren Instanzerzeugung gelungen ist. Darauf beziehen sich die nachfolgenden Aufrufe der Interfacemethoden, die in den Abschnitten II und III erläutert werden. In folgenden Fällen schlägt die Instanzerzeugung fehl:

  • Die Rolle existiert nicht oder hat keine Typdefinition (Eintrag mit FLAG_TYPE = COLL_AGR in Tabelle AGR_FLAGS). Nicht existierende Rollen werden in Tabelle ET_PFCG_ROLE_NOT_EXIST an den Aufrufer zurückgegeben. Diese Tabelle enthält keine existierenden Rollen ohne Typdefinition. Für solche Rollen werden lediglich Fehlernachrichten erzeugt.
  • Der ausführende Benutzer hat keine Berechtigung zum Anzeigen (RETRIEVE) oder Ändern (RETRIEVE_FOR_UPDATE) der Rolle (Objekt S_USER_AGR, ACTVT = 03 oder 02). Alle Rollen, für die die jeweilige Berechtigung fehlt, enthält die Tabelle ET_PFCG_ROLE_NOT_AUTHORIZED.
  • Nur RETRIEVE_FOR_UPDATE: Die logische Sperre (ENQUEUE-Sperre) kann nicht gesetzt werden, weil die Rolle bereits bearbeitet wird. In diesem Fall wird die Rolle in die Tabelle ET_PFCG_ROLE_NOT_LOCKED eingetragen. Sofern die Einstellung "Automatische Aufzeichnung von Änderungen" in Transaktion SCC4 aktiv ist (siehe Hinweis 1723881) werden in Tabelle ET_PFCG_ROLE_NOT_RECORDED alle Rollen gesammelt, deren Aufzeichnung notwendig aber aufgrund von Auftragskonflikten oder fehlenden Berechtigungen nicht möglich ist (siehe auch Abschnitt V).

Um möglichst effiziente Datenbankselektionen zur Massenbearbeitung von Rollen durchführen zu können, bieten die Schnittstellen von RETRIEVE und RETRIEVE_FOR_UPDATE die optionale Tabelle IT_NODES_PREFETCH an. Sofern zum Zeitpunkt der Instanzerzeugung der Anwendung bereits bekannt ist, welche Teilmengen von Berechtigungsdaten benötigt werden, sollte deren Selektion sofort erfolgen, um die Zahl der Datenbankzugriffe zu minimieren. In diesem Fall übergibt der Aufrufer an IT_NODES_PREFETCH mittels einer internen Tabelle mit der gleichen Struktur eine Liste von bis zu drei Konstanten, die die gewünschten Teilmengen der Berechtigungsdaten repräsentieren:

  • IF_PFCG_ROLE=>GC_NODE_AUTH_AUTHS: Liste der Berechtigungen (Datenbanktabelle AGR_1250)
  • IF_PFCG_ROLE=>GC_NODE_AUTH_VALUES: Berechtigungsfeldwerte (Datenbanktabelle AGR_1251)
  • IF_PFCG_ROLE=>GC_NODE_ORG_VALUES: Organisationsebenenwerte (Datenbanktabelle AGR_1252)

Die Vorabselektion ist umso sinnvoller, je mehr Rollen pro Durchführung einer Anwendung bearbeitet werden sollen. Für jede Datenbanktabelle genügt ein einziger Zugriff, um die Einträge für die komplette Rollenliste zu lesen. Verzichtet man auf die Vorabselektion, übernehmen die Instanzmethoden das Lesen der Berechtigungsdaten. In diesem Fall ist jedoch für jede Rolle ein separater Datenbankzugriff erforderlich.

II. Berechtigungsdaten lesen

Die Berechtigungsdaten einer Einzelrolle sind technisch auf die drei Datenbanktabellen AGR_1250 (Liste der Berechtigungen), AGR_1251 (Berechtigungsfeldwerte) und AGR_1252 (Orgebenenwerte) aufgeteilt. Dementsprechend wurden drei Interfacemethoden zum Lesen der jeweiligen Teilinformation angelegt. Ihre erfolgreiche Ausführung setzt jeweils die Anzeigeberechtigung zur Rolle voraus. Für Sammelrollen verlaufen die Aufrufe ergebnislos, weil dieser Rollentyp definitionsgemäß keine Berechtigungsdaten hat.

  • IF_PFCG_ROLE_AUTHORIZATION~GET_AUTHS: Selektion der Berechtigungsliste einer Einzelrolle
Die Berechtigungsinformationen werden in Tabelle ET_AUTH_AUTHS an den Aufrufer zurückgegeben. Aufgrund der dialogfreien Methodenausführung kommt die Struktur von ET_AUTH_AUTHS mit deutlich weniger Feldern aus als die Datenbanktabelle AGR_1250:
  • OBJECT: Name des Berechtigungsobjekts

  • AUTH: Berechtigungsnummer

  • ST_MAINT: Pflegestatus der Berechtigung (S = Standard, G = Gepflegt, M = Verändert, U = Manuell)

  • ST_ACTIV: Aktivstatus der Berechtigung (X = Inaktiv)

  • ST_UPD: Aktualisierungsstatus der Berechtigung (O = Alt, N = Neu, C = Aktualisiert)

Die Methode liefert stets die komplette Berechtigungsliste. Eine Einschränkung auf Berechtigungen zu bestimmten Objekten ist nicht möglich.
  • IF_PFCG_ROLE_AUTHORIZATION~GET_VALUES_FOR_AUTH: Selektion der Feldwerte einer einzelnen Berechtigung
Im Importparameter IS_AUTH, der die gleiche Struktur aufweist wie die Tabelle ET_AUTH_AUTHS der Methode IF_PFCG_ROLE_AUTHORIZATION~GET_AUTHS, spezifiziert der Aufrufer die gewünschte Berechtigung durch Angaben in den Feldern OBJECT und AUTH. Einträge in den Statusfeldern sind unnötig, weil Objekt und Berechtigungsnummer eine Berechtigung eindeutig bestimmen.
Die Rückgabe der Berechtigungsfeldwerte findet in Tabelle ET_AUTH_VALUES statt. Diese enthält folgende Felder:
  • FIELD: Name des Berechtigungsfeldes

  • LOW: Unterer Wert des Werteintervalls

  • HIGH: Oberer Wert des Werteintervalls

  • ST_MAINT: Pflegestatus des Feldes (S = Standard, G = Gepflegt, M = Verändert, U = Manuell)

  • CHANGE_MODE: Art der Feldwertänderung (I = Hinzufügen, D = Löschen); beim Lesen bedeutungslos und daher nicht gefüllt

  • KEY_HANDLE: Optionaler externer Zeilenschlüssel zwecks eindeutiger Zuordnung zwischen Werteintervall und Fehlernachricht

  • IF_PFCG_ROLE_AUTHORIZATION~GET_ORG_VALUES: Selektion der Werte aller Orgebenen (verfügbar nach Einspielen von Hinweis 2166856)
Tabelle ET_ORG_VALUES übergibt die Orgebenenwerte an den Aufrufer. Die Tabellenstruktur ist analog zu der von ET_AUTH_VALUES (siehe oben) mit Ausnahme des Feldes für den Pflegestatus, den es für in Rollen global gültige Orgebenen nicht gibt:
  • VARBL: Name der Organisationsvariable

  • LOW: Unterer Wert des Werteintervalls

  • HIGH: Oberer Wert des Werteintervalls

  • CHANGE_MODE: Art der Feldwertänderung (I = Hinzufügen, D = Löschen); beim Lesen bedeutungslos und daher nicht gefüllt

  • KEY_HANDLE: Optionaler externer Zeilenschlüssel zwecks eindeutiger Zuordnung zwischen Werteintervall und Fehlernachricht

Die Methode liefert stets die komplette Werteliste aller Orgebenen. Eine Einschränkung auf bestimmte Orgebenen ist nicht möglich.
Sofern der Aufrufer den Importparameter IV_GET_ORG_FIELDS auf X setzt, erhält er zusätzlich in Tabelle ET_ORG_FIELDS die Liste der in der Rolle vorkommenden Orgebenen.

Alle drei Methoden haben den optionalen Importparameter IV_REQUEST_BEFORE_IMAGE. Er ist von Bedeutung, wenn vor der Datenbanksicherung von Berechtigungsdatenänderungen (siehe unten) die ursprünglichen Werte erneut gelesen werden sollen. In diesem Fall müssen die Methodenaufrufe jeweils mit IV_REQUEST_BEFORE_IMAGE = X erfolgen.

Berechtigungsdaten ändern

Die folgenden Methoden dienen der dialogfreien Pflege gewöhnlicher Berechtigungsfeldwerte und Orgebenen. Ihre Ausführung erfordert den vorherigen Aufruf von CL_PFCG_ROLE_FACTORY=>RETRIEVE_FOR_UPDATE (siehe Abschnitt I) und unterliegt einigen Bedingungen und Einschränkungen, die die folgenden Erläuterungen detailliert beschreiben.
Grundsätzlich nicht ausführbar sind die Methoden in folgenden Fällen:

  • Die zu bearbeitende Rolle ist eine Sammelrolle.
  • Die Datenbasis zur Bearbeitung der Berechtigungen ist veraltet, weil nach dem letzten Sichern der Berechtigungsdaten Anwendungen im Rollenmenü geändert wurden. Um die Bearbeitung zu ermöglichen, müssen die Berechtigungsdaten abgemischt werden.

Selbstverständlich verlangen alle Methoden die Änderungsberechtigung zur Rolle (Objekt S_USER_AGR, ACTVT = 02). Sofern Sie mit CL_PFCG_ROLE_FACTORY=>RETRIEVE_FOR_UPDATE (siehe oben) die richtige Methode zur Instanzerzeugung verwenden, fallen jedoch fehlende Änderungsberechtigungen bereits vorher auf.

  • IF_PFCG_ROLE_AUTHORIZATION~SET_VALUES_FOR_AUTH: Änderung der Feldwerte einer einzelnen Berechtigung
Im Importparameter IS_AUTH, der die gleiche Struktur aufweist wie die Tabelle ET_AUTH_AUTHS der Methode IF_PFCG_ROLE_AUTHORIZATION~GET_AUTHS, spezifiziert der Aufrufer die zu ändernde Berechtigung durch Angaben in den Feldern OBJECT und AUTH. Einträge in den Statusfeldern sind unnötig, weil Objekt und Berechtigungsnummer eine Berechtigung eindeutig bestimmen.
Die in IS_AUTH angegebene Berechtigung kann nur bearbeitet werden, wenn keines der folgenden Ausschlusskriterien zutrifft:
  • Die Berechtigung kommt in der zu bearbeitenden Rolle nicht vor.

  • Das Berechtigungsobjekt ist im aktuellen System nicht gültig.

  • Es handelt sich um eine Standardberechtigung eines der Anwendungsstartberechtigungsobjekte S_TCODE, S_SERVICE, S_RFC oder S_START. Solche Berechtigungen werden vom Abmischvorgang des Profilgenerators automatisch erzeugt und dürfen durch keinen anderen Prozess geändert werden.

  • Die Inhalte der Berechtigungsfelder können nur mit Hilfe eines objektspezifischen Dialogs, nicht jedoch dialogfrei gepflegt werden. Ein Beispiel ist das Objekt S_TABU_LIN.
    (Um Werte von Berechtigungen mit objektspezifischen Pflegedialogen zu ändern, steht die im nächsten Punkt beschriebene Methode IF_PFCG_ROLE_AUTHORIZATION~REPLACE_VALUES_FOR_ONE_AUTH zur Verfügung.)

Die Tabelle IT_AUTH_VALUES mit der gleichen Struktur wie Tabelle ET_AUTH_VALUES in Methode IF_PFCG_ROLE_AUTHORIZATION~GET_VALUES_FOR_AUTH enthält die gewünschten Feldwertänderungen zur in IS_AUTH genannten Berechtigung. Datensätze, in denen einer der folgenden Fehlerfälle vorliegt, sind ungültig und werden von der Bearbeitung ausgeschlossen:
  • Das in FIELD angegebene Berechtigungsfeld ist leer oder nicht Bestandteil der Berechtigungsobjektdefinition.

  • Das Berechtigungsfeld ist wegen fehlender Datenelement- oder Domänendefinition ungültig.

  • Für die untere Intervallgrenze LOW wurde kein Wert angegeben.

  • Die Änderungsart im Feld CHANGE_MODE wurde falsch definiert. Es muss entweder D (Löschen) oder I (Hinzufügen) eingetragen werden. Abgesehen vom Leerzeichen gilt die Angabe eines anderen Zeichens als so schwerer Anwendungsfehler, dass die Methodenausführung mit einer Ausnahme abbricht.
    Ein Leerzeichen kann verwendet werden, wenn für einen Datensatz lediglich die Gültigkeit des Berechtigungsobjekts und -felds geprüft werden soll, ohne anschließend eine Änderung durchzuführen.

  • Ein zu löschender Datensatz existiert nicht.

  • Ein hinzuzufügender Datensatz existiert bereits.

  • In einem hinzuzufügenden Datensatz ist der Wert mindestens einer Intervallgrenze länger, als es die Berechtigungsfelddefinition zulässt.

  • Für ein Feld mit Domänenfestwerten soll ein Werteintervall hinzugefügt werden.

  • Für ein Feld mit Domänenfestwerten soll ein ungültiger Wert hinzugefügt werden.

  • Im Feld ACTVT soll ein Wert hinzugefügt werden, der für das Berechtigungsobjekt nicht zugelassen ist.

  • Der ausführende Benutzer hat nicht die erforderliche Berechtigung zu einem der Objekte S_USER_VAL oder S_USER_TCD (Pflege von S_TCODE-Berechtigungen im Status "Manuell").

  • Die dialogfreie Pflege von Berechtigungen zum Objekt S_START ist grundsätzlich nicht möglich. Anders als für eine Standardberechtigung (siehe oben) beendet die Methode den Versuch, eine manuelle S_START-Berechtigung zu bearbeiten, sogar mit einer Ausnahme.

Um eine eigene Auswertung durchzuführen, kann sich der Aufrufer das Ergebnis der Feldwertänderungen in Tabelle ET_AUTH_VALUES zurückgeben lassen. Die Tabelle enthält alle Einträge, die in IT_AUTH_VALUES an die Methode übergeben wurden. Allerdings haben fehlerhafte Datensätze, die hätten gelöscht werden sollen, anstelle des Indikators D ein Leerzeichen im Feld CHANGE_MODE, während in Datensätzen, die nicht hinzugefügt werden konnten, das Kennzeichen I durch F ersetzt worden ist.
Die Importparameter sind so voreingestellt, dass die Methode keine Werte in Orgebenenfeldern ändert. Entsprechende Einträge in Tabelle IT_AUTH_VALUES werden ignoriert. Falls der Aufrufer die individuelle Pflege von Orgebenen ausdrücklich wünscht, muss er den optionalen Parameter IV_INDIVIDUAL_ORG_MAINT = X setzen.
Erfolgreiche Feldwertänderungen können die Änderung des Pflegestatus sowohl auf Feld- als auch auf Berechtigungsebene zur Folge haben. Diese Statusänderungen werden von der Methode berücksichtigt.
  • IF_PFCG_ROLE_AUTHORIZATION~REPLACE_VALUES_FOR_ONE_AUTH: Feldwerteänderung für eine komplette Berechtigung mit objektspezifischem Pflegedialog (verfügbar nach Einspielen von Hinweis 2300015)
Ebenso wie beim Aufruf der Methode IF_PFCG_ROLE_AUTHORIZATION~SET_VALUES_FOR_AUTH spezifiziert der Verwender im Importparameter IS_AUTH die zu ändernde Berechtigung durch Angaben in den Feldern OBJECT und AUTH. Die Ausschlusskriterien für die Bearbeitung der Berechtigung sind ebenfalls ähnlich:
  • Die Berechtigung kommt in der zu bearbeitenden Rolle nicht vor.

  • Das Berechtigungsobjekt existiert im aktuellen System nicht.

  • Das Berechtigungsobjekt verwendet einen Standardpflegedialog, weil keine Definition eines Spezialdialogs in Tabelle USOBJEXIT vorliegt.

  • Es handelt sich um eine Standardberechtigung eines der Anwendungsstartberechtigungsobjekts S_SERVICE oder S_START. Solche Berechtigungen werden vom Abmischvorgang des Profilgenerators automatisch erzeugt und dürfen durch keinen anderen Prozess geändert werden.

Mit der in Tabelle IT_AUTH_VALUES übergebenen Werteliste legt der Aufrufer fest, welchen Inhalt die Berechtigung nach der Änderung haben soll. Die existierenden Berechtigungswerte werden vollständig durch die Werte in IT_AUTH_VALUES ersetzt. Die Methode berechnet selbstständig die hinzuzufügenden und zu löschenden Datensätze, so dass Angaben im Tabellenfeld CHANGE_MODE nicht erforderlich sind und ignoriert werden. Sofern mindestens ein Datensatz nicht geändert werden kann, scheitert die komplette Aktualisierung des Berechtigungsinhalts. Dies passiert in folgenden Fällen:
  • Das in FIELD angegebene Berechtigungsfeld ist leer oder nicht Bestandteil der Berechtigungsobjektdefinition.

  • Das Berechtigungsfeld ist wegen fehlender Datenelement- oder Domänendefinition ungültig.

  • Für die untere Intervallgrenze LOW wurde kein Wert angegeben.

  • In einem hinzuzufügenden Datensatz ist der Wert mindestens einer Intervallgrenze länger, als es die Berechtigungsfelddefinition zulässt.

  • Im Feld ACTVT soll ein Wert hinzugefügt werden, der für das Berechtigungsobjekt nicht zugelassen ist.

  • Der ausführende Benutzer hat nicht alle notwendigen Berechtigungen zum Objekt S_USER_VAL. Prüfungen auf S_USER_TCD kommen nicht vor, weil S_TCODE den Standardpflegedialog verwendet.

  • Die dialogfreie Pflege von Berechtigungen zum Objekt S_START ist grundsätzlich nicht möglich. Anders als für eine Standardberechtigung (siehe oben) beendet die Methode den Versuch, eine manuelle S_START-Berechtigung zu bearbeiten, sogar mit einer Ausnahme.

Orgebenen innerhalb der zu aktualisierenden Berechtigung werden grundsätzlich individuell gepflegt, so dass diese Felder nach erfolgreicher Aktualisierung den Pflegestatus "Verändert" haben. Die Anpassung der Pflegestatus aller anderen Felder und der gesamten Berechtigung funktioniert genau so wie in Methode IF_PFCG_ROLE_AUTHORIZATION~SET_VALUES_FOR_AUTH.
Aufgrund des Ausschließlichkeitsprinzips ("Alles oder Nichts") benötigt IF_PFCG_ROLE_AUTHORIZATION~REPLACE_VALUES_FOR_ONE_AUTH keine Ergebnistabelle, um über den Änderungserfolg individueller Datensätze Auskunft zu geben.
  • IF_PFCG_ROLE_AUTHORIZATION~SET_ORG_VALUES: Änderung von Orgebenenwerten (verfügbar nach Einspielen von Hinweis 2166856)
In Tabelle IT_ORG_VALUES mit der gleichen Struktur wie Tabelle ET_ORG_VALUES in Methode IF_PFCG_ROLE_AUTHORIZATION~GET_ORG_VALUES übergibt der Aufrufer die gewünschten Änderungen der Orgebenenwerte. Die für Tabelle IT_AUTH_VALUES zur Methode IF_PFCG_ROLE_AUTHORIZATION~SET_VALUES_FOR_AUTH in den Aufzählungspunkten 2 bis 9 genannten Ausschlusskriterien gelten für die Datensätze in Tabelle IT_ORG_VALUES völlig analog. Zusätzlich sind folgende Einschränkungen zu beachten:
  • Die in VARBL angegebene Orgebene ist ungültig oder in keiner einzigen Berechtigung der Rolle enthalten.

  • Der ausführende Benutzer hat nicht die erforderliche Berechtigung zum Objekt S_USER_VAL mit OBJECT = $ORGVALUE$ und AUTH_FIELD = [Name des Berechtigungsfelds].

Die Kennzeichnung fehlerhafter Datensätze in der Rückgabetabelle ET_ORG_VALUES erfolgt auf die gleiche Weise wie in Tabelle ET_AUTH_VALUES zur Methode IF_PFCG_ROLE_AUTHORIZATION~SET_VALUES_FOR_AUTH.
  • IF_PFCG_ROLE_AUTHORIZATION~SET_ACTIVE_AUTH_STATUS: Änderung des Aktivstatus einer Berechtigung (verfügbar ab SAP NetWeaver 7.50 nach Einspielen von Hinweis 2491175)
Wie in den Methoden zur Änderung von Feldwerten wird die zu bearbeitende Berechtigung durch Einträge in den Feldern OBJECT und AUTH des Aktualparameters zum Importparameter IS_AUTH festgelegt. In folgenden Fällen führt die Methode keine Änderung durch, sondern endet mit Fehlermeldungen oder einer Ausnahme:
  • Die Berechtigung kommt in der zu bearbeitenden Rolle nicht vor.

  • Das Berechtigungsobjekt existiert im aktuellen System nicht.

  • Der ausführende Benutzer hat nicht die erforderlichen Berechtigungen zu einem der Objekte S_USER_VAL oder S_USER_TCD, um sämtliche Feldwerte einschließlich der Berechtigungsvorschlagswerte zu pflegen.

  • Berechtigungen zum Objekt S_START sind auch in dieser Methode von der Bearbeitung ausgeschlossen und führen zu einer Ausnahme.

Den neuen Aktivstatus bestimmt der Aufrufer über den Importparameter IV_NEW_STATUS. Soll eine Berechtigung deaktiviert werden, muss die Methode mit IV_NEW_STATUS = X aufgerufen werden, im Falle der Aktivierung ist der Leerwert erforderlich (Voreinstellung). Bei Angabe anderer Werte bleibt die Berechtigung unverändert. Das gilt natürlich auch dann, wenn die Berechtigung den gewünschten Aktivstatus bereits hat. Sofern der Statuswechsel erfolgreich war, wird die aktualisierte Berechtigung über den Exportparameter ES_AUTH an den Aufrufer zurückgegeben.
  • IF_PFCG_ROLE_AUTHORIZATION~COPY_AUTH: Berechtigungskopie (verfügbar nach Einspielen von Hinweis 2421626)
Die Methode kopiert die über den Importparameter IS_AUTH angegebene Berechtigung (Felder OBJECT und AUTH), es sei denn, eines der folgenden Auschlusskriterien liegt vor:
  • Die zu kopierende Berechtigung kommt in der zu bearbeitenden Rolle nicht vor.

  • Das Berechtigungsobjekt existiert im aktuellen System nicht.

  • Es handelt sich um eine Standardberechtigung eines der Anwendungsstartberechtigungsobjekte S_TCODE, S_SERVICE, S_RFC oder S_START. Da eine solche Berechtigung nicht bearbeitet werden darf, ist eine Kopie sinnlos.

  • Die zu kopierende Berechtigung ist inkonsistent, weil ihre Feldzusammensetzung nicht der Berechtigungsobjektdefinition entspricht oder mindestens ein Feld ungültige Werte enthält.

  • Durch die Kopie würde die Maximalzahl von 100 Berechtigungen pro Objekt überschritten werden.

Weil die Kopie den effektiven Berechtigungsumfang einer Rolle nicht ändert, sind keine Berechtigungen zur Feldwertpflege erforderlich. Nach erfolgreichem Anlegen der Kopie kann der Aufrufer die Nummer der neuen Berechtigung über den Exportparameter ES_AUTH_COPY empfangen.

Zwei zusätzliche Methoden bieten die Möglichkeit, Berechtigungen im Pflegestatus "Manuell" neu anzulegen oder vollständig zu löschen. Die Einschränkung auf manuelle Berechtigungen ist notwendig, um keine Inkonsistenzen zwischen Menüapplikationen und Berechtigungsdaten zu erzeugen.

  • IF_PFCG_ROLE_AUTHORIZATION~ADD_MANUAL_AUTH: Anlegen einer Berechtigung im Status "Manuell"
Das Anlegen der Berechtigung gelingt unter folgenden Bedingungen:
  • Mittels Importparameter IV_OBJECT wird ein gültiges Berechtigungsobjekt übergeben.

  • Der ausführende Benutzer hat eine beliebige Berechtigung zu einem der Objekte S_USER_VAL, S_USER_TCD (Anlegen einer S_TCODE-Berechtigung) oder S_USER_STA (Anlegen einer S_START-Berechtigung).

  • Falls das Anlegen der Berechtigung bisher in der Rolle nicht existierende Orgebenen hinzufügt, sind jeweils beliebige Berechtigungen zum Objekt S_USER_VAL mit OBJECT = $ORGVALUE$ und AUTH_FIELD = [Name des Berechtigungsfelds] erforderlich.

  • Das Anlegen der Berechtigung führt nicht zur Überschreitung der Maximalzahl von 100 Berechtigungen pro Objekt.

Falls das Anlegen erfolgreich war, kann der Aufrufer die Berechtigungsinformation über den Exportparameter ES_AUTH_AUTHS (gleiche Struktur wie IS_AUTH in IF_PFCG_ROLE_AUTHORIZATION~GET_VALUES_FOR_AUTH) erhalten.
  • IF_PFCG_ROLE_AUTHORIZATION~DEL_MANUAL_AUTH: Löschen einer Berechtigung im Status "Manuell"
Die zu löschende Berechtigung wird in den Feldern OBJECT und AUTH des Importparameters IS_AUTH (gleiche Struktur wie IS_AUTH in IF_PFCG_ROLE_AUTHORIZATION~GET_VALUES_FOR_AUTH) spezifiziert. Sie muss in der Rolle vorhanden sein und den korrekten Pflegestatus aufweisen. Folgende Voraussetzungen kommen hinzu:
  • Der ausführende Benutzer hat ausreichende Berechtigungen zu einem der Objekte S_USER_VAL, S_USER_TCD (Löschen einer S_TCODE-Berechtigung) oder S_USER_STA (Löschen einer S_START-Berechtigung), um die Werte sämtlicher Berechtigungsfelder zu pflegen.

  • Werte von Orgebenen, die nach dem Löschen der Berechtigung in keiner anderen Berechtigung mehr vorkommen, werden ebenfalls gelöscht. Dafür sind jeweils ausreichende Berechtigungen zum Objekt S_USER_VAL mit OBJECT = $ORGVALUE$ und AUTH_FIELD = [Name des Berechtigungsfelds] erforderlich. Die gleiche Bedingung gilt für individuell gepflegte Orgebenenfelder.

Alle Methoden halten nach Durchführung der zulässigen Änderungen die vollständige, aktualisierte Berechtigungs- oder Orgebenenliste in internen Puffern, führen aber keine Datenbanksicherung durch.

IV. Sichern der Änderungen auf der Datenbank

Die Datenbanksicherung der mit den Interfacemethoden in Abschnitt III durchgeführten Änderungen wird mit der Methode CL_PFCG_ROLE_FACTORY=>DO_SAVE durchgeführt. Sie hat zwei optionale Importparameter:

  • IV_UPDATE_TASK: Verbuchungsmethode
Im Falle von IV_UPDATE_TASK = X (Voreinstellung) wird bei der nächsten COMMIT WORK-Anweisung ein asynchroner Verbuchungsprozess gestartet. Ein Aufruf mit einem Leerwert für IV_UPDATE_TASK sichert die Änderungen im gleichen Workprozess.
  • IV_CONTINUE_AT_END: Erhaltung der Instanzen und logischen Sperren
Gemäß Voreinstellung werden nach erfolgreicher Sicherung alle Instanzen und logischen Sperren automatisch gelöscht. Anwendungen, die beides für weitere Änderungen benötigen, rufen DO_SAVE mit IV_CONTINUE_AT_END = X auf, so dass lediglich die internen Puffer initialisiert werden, aber keine erneute Instanzerzeugung notwendig ist.
Falls eine Anwendung Änderungen mittels ROLLBACK WORK rückgängig macht, ist IV_CONTINUE_AT_END bedeutungslos. Dann werden Instanzen und Sperren immer gelöscht.

Die drei Exportparameter liefern Informationen über Erfolg und Zeitpunkt des Sicherungsvorgangs. EO_MSG_BUFFER wird in Abschnitt VII erklärt. Die beiden anderen Parameter haben folgende Bedeutung:

  • EV_REJECTED: Existenz technischer Fehler oder fehlgeschlagene automatische Rollenaufzeichnungen
Der Wert für EV_REJECTED zeigt dem Aufrufer an, ob das Sichern erfolgreich durchgeführt werden konnte. Im Falle interner technischer Fehler wird EV_REJECTED = X zurückgegeben und nicht gesichert. Gleiches gilt, falls die Einstellung "Automatische Aufzeichnung von Änderungen" in Transaktion SCC4 aktiv ist (siehe Hinweis 1723881), aber die Aufzeichnung mindestens einer Rolle gescheitert ist (siehe auch Abschnitt V).
  • ES_TIMESTAMP: Zeitstempel
Die Struktur von ES_TIMESTAMP enthält Datum, Uhrzeit (beides bezogen auf die Systemzeit) und den ausführenden Benutzer der Datensicherung. Falls diese scheitert, bleibt der Parameter leer.

Anmerkung: Eine Vorabprüfung auf technische Fehler ist mit der Methode CL_PFCG_ROLE_FACTORY=>DO_CHECK möglich. Sie besitzt ebenfalls den Exportparameter EV_REJECTED.

V. Einstellung in Transaktion SCC4 für Änderung und Transport mandantenabhängiger Customizing-Objekte

Seit Auslieferung der Lösung im Hinweis 1723881 besteht die Möglichkeit, die Einstellung in Transaktion SCC4 für Änderung und Transport mandantenabhängiger Customizing-Objekte auf Rollen anzuwenden. Hinweis 1723881 ist notwendig, um die Auswertung der SCC4-Einstellung zu aktivieren (siehe Abschnitt I des Hinweistexts), reicht aber noch nicht aus, um die SCC4-Einstellung auch in den oben beschriebenen Änderungsschnittstellen berücksichtigen zu können. Es muss zusätzlich Hinweis 2263899 eingebaut werden, um die Methoden zur Instanzerzeugung und Datensicherung anzupassen.

  • CL_PFCG_ROLE_FACTORY=>RETRIEVE_FOR_UPDATE
Die unterschiedlichen SCC4-Einstellungen beeinflussen die Instanzerzeugung wie folgt:
  • Änderungen ohne automatische Aufzeichnung

Die Auftragsnummern bereits existierender Aufzeichnungen werden bei der Instanzerzeugung in den Speicherbereich der zugehörigen Rollen geschrieben und können während der gesamten Lebensdauer der Instanz mit der Methode IF_PFCG_ROLE~GET_REQUEST (siehe unten) abgerufen werden. Auf die Instanzerzeugung selbst hat die Existenz einer Rollenaufzeichnung keinen Einfluss.
  • Automatische Aufzeichnung von Änderungen

Diese Einstellung macht die erfolgreiche Rollenaufzeichnung zur Voraussetzung für die Durchführung von Änderungen. Zum Zeitpunkt der Instanzerzeugung findet noch keine Aufzeichnung stattfinden, weil nicht feststeht, ob eine Rolle überhaupt geändert werden muss. Die Methode prüft jedoch, ob der ausführende Benutzer die Rolle aufzeichnen darf, sofern er noch keine eigene Aufzeichnung gemacht hat. Die Aufzeichnung einer Rolle ist nicht möglich, wenn sie oder ihre vererbenden Rollen bereits auf mehreren offenen Aufträgen stehen oder der ausführende Benutzer keine Transportberechtigung hat (Objekt S_USER_AGR, ACTVT = 21). Trifft einer dieser Fälle zu, wird die Rolle von der Instanzerzeugung ausgeschlossen und eine entsprechende Fehlernachricht erzeugt. Außerdem werden alle Rollen, die der ausführende Benutzer nicht aufzeichnen darf, über die Tabelle ET_PFCG_ROLE_NOT_RECORDED dem Aufrufer mitgeteilt.
  • Keine Änderungen erlaubt

Da diese Einstellung jede Rollenänderung verbietet, werden keine Instanzen erzeugt. Alle der Methode übergebenen Rollen werden in ET_PFCG_ROLE_NOT_RECORDED kopiert. Außerdem erzeugt die Methode für jede Rolle eine identische Fehlernachricht.
  • Änderungen ohne automatische Aufzeichnung, keine Transporte erlaubt

RETRIEVE_FOR_UPDATE arbeitet wie bei inaktiver SCC4-Einstellung. Prüfungen auf existierende Aufzeichnungen finden nicht statt.
  • CL_PFCG_ROLE_FACTORY=>DO_SAVE
Falls die Einstellung "Automatische Aufzeichnung von Änderungen" aktiv ist, sichert die Methode die Änderungen der Berechtigungsdaten nur dann, wenn zuvor alle betroffenen Rollen aufgezeichnet werden konnten. Scheitert die Aufzeichnung für mindestens eine Rolle, werden alle Datenbankänderungen abgelehnt; EV_REJECTED wird auf 'X' gesetzt.
Für noch nicht aufgezeichnete Rollen, die durch existierende Aufzeichnungen nicht schon auf bestimmte Aufträge festgelegt sind, wird automatisch ein neuer Customizing-Auftrag angelegt und als persönliche Einstellung des ausführenden Benutzers gesichert. Dieser Auftrag wird bis zu seiner Freigabe sowohl für die aktuellen Aufzeichnungen als auch für alle folgenden dialogfrei durchgeführten Aufzeichnungen des Benutzers verwendet.

Das Einspielen des Hinweises 2263899 genügt bereits, um die korrekte Verwendung der SCC4-Einstellung zu gewährleisten. Zusätzliche Änderungen im Quelltext der rufenden Anwendung werden dafür nicht benötigt. In vielen Fällen kann es jedoch hilfreich sein, dass die Anwendung die SCC4-Einstellung selbst ermittelt, damit sie flexibel damit umgehen kann. Zu diesem Zweck bietet die Korrektur in Hinweis 2263899 drei neue, öffentliche Methoden an:

  • CL_SPCG_TOOLS_PUBLIC=>CHECK_CUST_SETTING: Lesen der SCC4-Einstellung
Mit dieser Methode können Sie schon vor der Instanzerzeugung die SCC4-Einstellung ermitteln und darauf reagieren, etwa durch Ausgabe einer Systemnachricht. Die drei EXPORT-Parameter der Methode haben folgende Bedeutung:
  • EV_NO_CHANGE

Dieser Parameter wird im Falle der Einstellung "Keine Änderungen erlaubt" auf 'X' gesetzt. In allen anderen Fällen bleibt er leer.
  • EV_SCC4_REC_SET

Falls eine andere Einstellung als "Keine Änderungen erlaubt" aktiv ist, enthält der Parameter einen der folgenden Rückgabewerte:
CL_SPCG_TOOLS_PUBLIC=>CO_SCC4_NO_AUTO_REC = 'NO_AUTO_REC': Änderungen ohne automatische Aufzeichnung
CL_SPCG_TOOLS_PUBLIC=>CO_SCC4_AUTO_REC = 'AUTO_REC': Automatische Aufzeichnung von Änderungen
CL_SPCG_TOOLS_PUBLIC=>CO_SCC4_NO_RECORD = 'NO_RECORDING': Änderungen ohne automatische Aufzeichnung, keine Transporte erlaubt
  • ES_MSG

Für alle vier SCC4-Einstellungen liefert diese Struktur die Parameter zur entsprechenden Systemnachricht. Bei "Keine Änderungen erlaubt" ist der Meldungstyp 'E', bei "Änderungen ohne automatische Aufzeichnung, keine Transporte erlaubt" der Meldungstyp 'W' voreingestellt (Feld ES_MSG-MSGTY).
Falls die SCC4-Einstellung inaktiv ist, bleiben alle drei EXPORT-Parameter leer.
  • CL_PFCG_ROLE_FACTORY=>ADD_ROLES_TO_REQUEST: Aufzeichnung zu ändernder Rollen
Diese Methode gibt Anwendungen die Möglichkeit, bereits vor der Datenbanksicherung erforderliche Rollenaufzeichnungen durchzuführen. Die Methode stellt selbstständig fest, welche Rollen aufgezeichnet werden müssen. Der Aufrufer kann keine Rollen übergeben, die aufgezeichnet werden sollen.
Zur Steuerung der Aufzeichnungen stehen folgende IMPORT- und CHANGING-Parameter zur Verfügung:
  • CV_REQUEST: Customizing-Auftrag

Dieser Parameter ermöglicht die Übergabe eines Customizing-Auftrags durch den Aufrufer sowie die Rückgabe eines Auftrags an den Aufrufer. Ein vom Aufrufer übergebener Auftrag wird zur Aufzeichnung aller Rollen verwendet, deren Aufträge frei gewählt werden können, weil sie nicht durch existierende Aufzeichnungen bereits festgelegt sind. Falls Rollen mit freier Auftragswahl aufgezeichnet werden müssen, ohne dass der Aufrufer einen Auftrag übergeben hat, wird in Abhängigkeit von der Einstellung des Parameters IV_NO_DIALOG (siehe unten) entweder ein neuer Auftrag dialogfrei angelegt oder vom ausführenden Benutzer per Dialogfenster ausgewählt. Diesen Auftrag teilt CV_REQUEST dem Aufrufer mit.
  • IV_WITH_PROF: Aufzeichnung der generierten Berechtigungsprofile

Bei IV_WITH_PROF = 'X' (Voreinstellung) werden die generierten Berechtigungsprofile der erfolgreich aufgezeichneten Rollen dem Auftrag hinzugefügt.
  • IV_WITH_PERS: Aufzeichnung der Personalisierungsdaten

Bei IV_WITH_PERS = 'X' werden die Personalisierungsdaten der erfolgreich aufgezeichneten Rollen dem Auftrag hinzugefügt.
  • IV_NO_DIALOG: Auftragsauswahl per Dialog

Sofern die Aufzeichnung von Rollen mit freier Auftragswahl erfolgen muss, der Aufrufer unter CV_REQUEST (siehe oben) aber keinen Auftrag angegeben hat, wird bei IV_NO_DIALOG = 'X' (Voreinstellung) automatisch ein neuer Auftrag angelegt und als persönliche Einstellung des ausführenden Benutzers gesichert. Der Methodenaufruf mit dem Leerwert für IV_NO_DIALOG ermöglicht die Auftragsauswahl per Dialogfenster. Ein Fehler oder Abbruch dieser Auswahl beendet den kompletten Aufzeichnungsvorgang.
Die EXPORT-Parameter geben Auskunft über abgebrochene oder gescheiterte Aufzeichnungen. Die Erläuterung des Parameters EO_MSG_BUFFER wird hier ausgelassen und folgt in Abschnitt VII.
  • EV_REJECTED: Aufzeichnungsproblem aufgetreten

Falls die Aufzeichnung mindestens einer Rolle scheitert, wird EV_REJECTED = 'X' gesetzt.
  • ES_DIALOG_ERROR: Nachricht über abgebrochene oder gescheiterte Auftragsauswahl im Dialog

Falls mittels IV_NO_DIALOG die Auftragsauswahl im Dialog eingeschaltet, diese jedoch durch einen Fehler beendet oder vom Benutzer abgebrochen wurde, enthält die Struktur ES_DIALOG_ERROR die Parameter der entsprechenden Systemnachricht.
  • ET_PFCG_ROLES_NOT_REC: Nicht aufgezeichnete Rollen

Diese Tabelle teilt dem Aufrufer mit, welche Rollen geändert werden sollen, aber nicht aufgezeichnet und damit nicht gesichert werden können. Eine Rolle wird nicht in die Tabelle eingetragen, wenn lediglich die Aufzeichnung optionaler Transportbestandteile (Berechtigungsprofile oder Personalisierungsdaten) gescheitert ist.
Die Verwendung von CL_PFCG_ROLE_FACTORY=>ADD_ROLES_TO_REQUEST ist insbesondere dann sinnvoll, wenn Ihre Anwendung bei fehlgeschlagenen Aufzeichnungen nicht die komplette Datensicherung abbrechen möchte. In diesem Fall kann man den Inhalt der Tabelle ET_PFCG_ROLES_NOT_REC verwenden, um vor dem Sichern die nicht aufgezeichneten Rollen von der weiteren Bearbeitung auszuschließen. Dazu ruft Ihre Anwendung die folgenden Methoden in der angegebenen Reihenfolge auf:
  • CL_PFCG_ROLE_FACTORY=>RETRIEVE_FOR_UPDATE

Die nach Rollen sortierte Tabelle ET_NODE_ROOT mit den Objektreferenzen verwenden Sie zum Aufruf der Änderungsschnittstellen (siehe oben).
  • CL_PFCG_ROLE_FACTORY=>ADD_ROLES_TO_REQUEST

  • IF_PFCG_ROLE~CANCEL

Die nicht aufgezeichneten Rollen in ET_PFCG_ROLES_NOT_REC selektieren Sie in Tabelle ET_NODE_ROOT und rufen mit den entsprechenden Referenzen IF_PFCG_ROLE~CANCEL auf, um das Änderungskennzeichen zurückzunehmen (Die Instanzen bleiben erhalten!).
  • CL_PFCG_ROLE_FACTORY=>DO_SAVE

Die Datensicherung umfasst nur noch die erfolgreich aufgezeichneten Rollen und verläuft daher störungsfrei.
Beachten Sie, dass der Aufruf von CL_PFCG_ROLE_FACTORY=>ADD_ROLES_TO_REQUEST sofort endet, wenn die SCC4-Einstellung inaktiv ist oder auf "Änderungen ohne automatische Aufzeichnung, keine Transporte erlaubt" steht. In diesen Fällen wird eine Ausnahme der Klasse CX_PFCG_ROLE_SCC4 ausgelöst.
  • IF_PFCG_ROLE~GET_REQUEST: Lesen des Auftrags einer aufgezeichneten Rolle
Um Anwendungen die Möglichkeit zu geben, die Aufträge neuer oder bereits existierender Aufzeichnungen selbst anzuzeigen, steht diese Instanzmethode zur Verfügung. Falls eine Rolle aufgezeichnet ist, enthält EV_REQUEST die Auftragsnummer. Wird EV_OWN_RECORD = 'X' zurückgegeben, dann hat der ausführende Benutzer eine eigene Aufzeichnung unter dem Auftrag in EV_REQUEST. Andernfalls bleibt EV_OWN_RECORD leer. Voraussetzung zum Abrufen dieser Informationen ist die Anzeigeberechtigung zur Rolle.
Ein Aufruf von IF_PFCG_ROLE~GET_REQUEST endet ergebnislos, falls die SCC4-Einstellung nicht aktiv ist oder auf "Änderungen ohne automatische Aufzeichnung, keine Transporte erlaubt steht", weil in diesen Fällen bei der Instanzerzeugung nicht auf existierende Aufzeichnungen geprüft wird und während der Rollenbearbeitung keine Aufzeichnungen stattfinden.

VI. Ende der Anwendung ohne Datenbanksicherung

Um vollständig die Instanzen zu löschen und logische Sperren zu lösen, verwendet man die Methode CL_PFCG_ROLE_FACTORY=>CLEANUP. Ihr übergibt man in Tabelle IT_PFCG_ROLE die ursprüngliche Rollenliste. Die Methode stellt selbstständig fest, für welche Rollen Instanzen existieren. Ein Aufruf von CL_PFCG_ROLE_FACTORY=>CLEANUP ist nicht erforderlich, wenn eine ändernde Anwendung mit einer Datenbanksicherung abgeschlossen wird. Diese hebt implizit Instanzen und Sperren auf (siehe Abschnitt IV).

VII. Fehlerprotokoll

Alle in den vorigen Abschnitten genannten Methoden haben als Exportparameter die Referenzvariable EO_MSG_BUFFER zum Interface IF_SPCG_MSG_BUFFER mit der implementierenden Klasse CL_SPCG_MSG_BUFFER. Deren Instanz wird ebenfalls in CL_PFCG_ROLE_FACTORY=>RETRIEVE oder CL_PFCG_ROLE_FACTORY=>RETRIEVE_FOR_UPDATE erzeugt. Somit können nach jedem Methodenaufruf die aufgetretenen Fehlernachrichten mit Hilfe der Interfacemethode GET_MESSAGES abgerufen werden. Der Aufrufer muss lediglich eine lokale Referenzvariable zu IF_SPCG_MSG_BUFFER sowie eine lokale Tabelle vom Typ IF_SPCG_MSG_BUFFER=>TT_MESSAGES zwecks Nachrichtenrückgabe deklarieren.
Bei Angabe eines Rollennamens im optionalen Importparameter IV_ROLE liefert GET_MESSAGES nur Nachrichten bezüglich dieser Rolle.

SAP empfiehlt dringend, nach jedem Aufruf einer Änderungsmethode aus Abschnitt III mit GET_MESSAGES vorhandene Fehlernachrichten abzurufen, um stets deren Bezug zum aktuellen Änderungswunsch herstellen zu können.






ROGBILLS - Synchronize billing plans   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 47937 Date: 20240426 Time: 081609     sap01-206 ( 795 ms )