Transaktionsvariante / Berechtigungsprüfung

TAGS: ME23N ME53N ZAPM_ME23N ZAPM_ME53N SHD0 SE93 SE97

Ziel:

Es sollen Kundeneigene Transaktionen zur Anzeige von Bestellung und Bedarfsanforderung erstellt werden. Damit haben die Anforderer die Möglichkeit, Belege zur Anforderung anzusehen.

Dafür soll die ME23n / ME53n mit eingeschränkten Funktionen zur Verfügung stehen. Die Anforderer dürfen nicht über eine Hintertüre auf andere Belege umschalten können.

Lösung:

Es werden Transaktionsvarianten angelegt. Dabei werden alle Menüpunkte des Dynpros, die nicht verwendet werden sollen, ausgeblendet.

Die Anforderer bekommen die Berechtigung zur Ausführung der Transaktionen ZAPM_Mxxxx. Die Berechtigung zum Ausführen der Transaktion ME23n und ME53n wird nicht erteilt.

Stolpersteine:

Die Berechtigungsprüfung schlägt fehl. Nach ausführen von ZAPM_ME23N wird auch die Transaktion ME23N durch das System geprüft und verhindert die Verwendung. Das Vorgehen und die Lösung dieses Problems wird hier beschrieben.

Zitat aus https://de.alt.comp.sap-r3.narkive.com/4ahRvuOG/me23n-mit-weniger-buttons-berechtigungen

wir haben für die Bestellabwicklung eine umfangreiche Eigenentwicklung
im Einsatz.
Ein einer Stelle wir dabei in die Transaktion ME23N abgesprungen. Der
User soll jedoch nur die eine Bestellung (oder maximal seine eigenen
Bestellungen) aus der er abgesprungen ist ansehen können. Über die
Buttons „Belegansicht ein“ bzw. „andere Bestellung“ hat er jedoch die
Möglich sich auch andere Bestellungen anzeigen zu lassen, dies ist
nicht gewünscht.
Der eine Lösungsansatz von uns war, eigene Berechtigungsrollen zu
definieren.
Aber zum einen müßten wir dann ja für fast jeden User hierzu eine
eigene Rolle anlegen, in dem die Kostenstelle definiert ist, für die
er die Transaktion ME23N nützen dürfte und zum anderen müßten wir
schauen, ob es Möglich ist per UserExit in der Berechtigunsprüfung der
ME23N diese Berechtigung auf die Kostenstelle überhaupt zu prüfen. Die
andere Überlegung ist dann eben in der ME23N diese beiden Buttons
Belegansicht ein“ bzw. „andere Bestellung“ die im Status definiert
sind auszublenden. Hat hier jemand Erfahrung, lässt sich sowas über
eine Transktionsvariante realieseren oder sonst eine andere Idee?
Vielen Dank!


versuch’s mal mit einer Transaktionsvariante der ME23N über die
Transaktion SHD0 (null, nicht o). Hier kannst du diverses ausblenden. In
eurer Eigenentwicklung müsstet ihr dann diese Variante anspringen.


Vielen Dank, haben wir zwischenzeitlich auch rausbekommen. Hat soweit
auch geklappt nur haben wir dann gleich wieder gemerkt wie schlecht
SAP Dokumentiert.
Wir rufen dann die Transaktionsvariante per call transaction auf und
fallen prompt auf die Nase, da wir entsprechend noch die
Transaktionsberechtigung für die ME23N entzogen hatten, da bei call
transaction ja laut Doku die Transaktionbsberechtigung nicht geprüft
wird. Nach langem suchen haben wir dann rausbekommen, dass neuerdings
dies doch getan wird. Ein Eintrag über die SE97 mit „nicht prüfen“ ist
nicht ausreichend und die Prüfung kann nur dadurch wieder abgeschaltet
werden, in dem man in der Tabelle TCDCOUPLES entsprechende Einträge
sperrt. Will man also eine Transaktion per call transaktion aufrufen,
aber ansosnten nicht die Transaktionsberechtigung dafür vergeben, muß
man in dieser Tabelle den Eintrag, in dem die Felder „TCode“ und
„Called“ den gleichen Wert haben (hier also „ME23N“) löschen.

SHD0

Anlegen einer Transaktionsvariante

Button NEU

Man gelangt direkt in die ME23n.

Rücksprung

Hier auf Menüfunktionen

Menüpunkt markieren und mit Button deaktivieren

SE93

Transaktion zuordnen

SE97

Falls keine Berechtigung zur Ausführung der Transaktion besteht: (kritische Berechtigung)

Ausführen des Reports TASAUTH.

Im Include TASA1E01 Zeile 117 oder 124 Breakpoint bei der Authorisierungsprüfung setzen und im Debugger den Rückgabewert sy-subr = 1 setzen.

Dann die rufende Transaktion (hier die Kundeneigene Transaktion ZAPM_ME23N) angeben und F8 drücken.

Eine neue Zeile anlegen und dort die gerufene Transaktion eintragen mit Prüfkennz. = NEIN.

Tabelle TCDCOUPLES

Ein Eintrag über die SE97 mit „nicht prüfen“ ist nicht ausreichend und die Prüfung kann nur dadurch wieder abgeschaltet werden, in dem man in der Tabelle TCDCOUPLES entsprechende Einträge sperrt. Will man also eine Transaktion per call transaktion aufrufen, aber ansosnten nicht die Transaktionsberechtigung dafür vergeben, muß man in dieser Tabelle den Eintrag, in dem die Felder „TCode“ und „Called“ den gleichen Wert haben (hier also „ME23N“) löschen.

Zeile mit „rufender Transaktionscode“ = ME23N und

„gerufener Transaktionscode“ = ME23N löschen.

Zeile mit ME53N dito.

noch zu liefernde Menge zum Geschäftsjahr

Bild

Es soll eine Liste von Bestellungen, zu denen es zum Geschäftsjahr noch offene Bestellpositionen gibt, ausgegeben werden. Eine Auswertung über die SAP-Standart-Transaktionen ME2… führt wegen komplexer Selektionen zu Ressourcenengpässen. Dieser Report hier bietet auf Grundlage von schlanken Abfragen eine Lösung, Daten auszuwerten.

Report ZMM_OFFENE_WE_DATUM

 

Der Report kann sowohl eine ALV-Liste ausgegeben als auch die Daten in eine Datei schreiben. Um möglichst performant zu sein, wird keine ALV-Liste aufgebaut wenn das Feld für die Ablagedatei gefüllt ist. Dadurch wird vermieden, dass intern noch Mal extra Speicher für die Bildschirmausgabe gebraucht wird.

In der Selektion werden bereits die Löschvormerkungen zur Bestellposition und zum Bestellauftrag berücksichtigt.

Hieraus entsteht eine Text-Datei, die in Excel eingelesen werden kann.

Ausgabe als ALV-Liste

Weiterlesen

Wanderurlaub in Limburg NL – Wandern, Wanderungen und Wandertouren mit kultureller Vielfalt, Wiesen, Bäche, Schlösser, Burgen

Wandern in Limburg? Wanderurlaub mit kultureller Vielfalt, tollen Landschaften mit blühenden Wiesen, plätschernden Bächen sowie Schlössern und Burgen laden dazu ein.

Quelle: Wanderurlaub in Limburg NL – Wandern, Wanderungen und Wandertouren mit kultureller Vielfalt, Wiesen, Bäche, Schlösser, Burgen

Umzug von Joomla auf WordPress

Die Inhalte der Seite www.up-tendyra.de/~peter finden sich jetzt an der Stelle www.up-tendyra.de wieder.

Gleichzeitig wurde eine „alte“ Joomla-Installation durch ein aktuelles WordPress ersetzt. Die Migration von Joomla nach WordPress konnte durch das Plugin „FG Joomla to WordPress“ relativ einfach durchgeführt werden. Kommentare und Statistiken habe ich nicht übernommen.

 

Änderungsbelege für Kundeneigene Tabellen

Anlegen von Änderungsbelegen für eine Kundeneigene Tabelle in CDHDR & CDPOS

 

Sollen Änderungsbelege für eine eigene Z-Tabelle fortgeschrieben werden, dann sollten folgende Schritte implementiert werden:

  1. Ausführen des Transaktionscodes SCDO : (Änderungsobjekt anlegen
  2. Button „Anlegen“ klicken

Es wird die Meldung „Änderungsbelegobjekt ZMM_BA_BOOK_CHG liegt nicht in Ihrem Namensraum, wollen Sie trotzdem das Objekt anlegen?“ angezeigt. Einfach „Ja“ klicken.

=> Es wird ein Transportauftrag angelegt. <=

3. Eintragen des Tabellennamens, von der man die Änderungsbelege erfassen möchte. Klicken des Button „Einträge einfügen“

4. Nun erscheint der folgende Bildschirm, drücken des Sichern-Buttons

5.Verbucher generieren

Es wird die Meldung „Änderungsbelegobjekt ZPM_TMAC_CHG liegt nicht in Ihrem Namensraum, wollen Sie trotzdem das Objekt generieren?“ angezeigt. Einfach Ja klicken.

6. Details vervollständigen und klicken des Buttons „Generieren“

  • Falls die eingetragene Funktionsgruppe nicht existiert, wird sie neu angelegt.
  • Präfix für den Funktionsbaustein, der durch die Generierung angelegt wird.

7. Generierungsinfo mit Details,, welche Objekte angelegt werden.

8. Nun auf „aktivieren“ klicken, dann erst werden die Objekte erzeugt!

9.Jetzt muss der generierte Funktionsbaustein noch in das eigene Programm eingebaut werden.
(Eine geeignete Stelle ist z.B. Im PAI eines Dynpro oder Userexit)

DATA: LT_ZMM_ICDTXT LIKE TABLE OF CDTXT.
DATA: XZMM_BA_BOOK TYPE TABLE OF ZZMM_BA_BOOK.
DATA: YZMM_BA_BOOK TYPE TABLE OF ZZMM_BA_BOOK.
* Änderungsbelege schreiben
CALL FUNCTION 'ZMM_BA_BOOK_CHG_WRITE_DOCUMENT'
EXPORTING
OBJECTID = 'ZMM_BA_BOOK_CHG'
TCODE = SY-TCODE
UTIME = SY-UZEIT
UDATE = SY-DATUM
USERNAME = SY-UNAME
* PLANNED_CHANGE_NUMBER = ' '
OBJECT_CHANGE_INDICATOR = 'U'
* PLANNED_OR_REAL_CHANGES = ' '
* NO_CHANGE_POINTERS = ' '
* UPD_ICDTXT_ZPM_TMAC_CHG = ' '
UPD_ZMM_BA_BOOK = 'U'
TABLES
ICDTXT_ZMM_BA_BOOK_CHG = LT_ZMM_ICDTXT
XZMM_BA_BOOK = XZMM_BA_BOOK „nachher Daten
YZMM_BA_BOOK = YZMM_BA_BOOK. „vorher Daten

10.Funktionsbausten testen (se37):

Die Tabelle XZMM_BA_BOOK wird mit den Daten übergeben, die vorher in den Tabellenfeldern enthalten waren.
Die Tabelle YZMM_BA_BOOK wird mit Daten der neuen Inhalte an den Funktionsbaustein übergeben.

11.Auswertung von Änderungsbelegen (Report CHANGEDOCU_READ)

Textstring in ABAP-Programmen finden.

Hier sind Standardfunktionen aufgelistet, mit denen Sie den Quellcode von Programmen komfortabel durchsuchen können.

Mit dem Programm RPR_ABAP_SOURCE_SCAN können Sie den Quelltext von mehreren Programmen durchsuchen.

Kurz und Schmerzlos ist die Transaktion EWK1.

Ebenfalls sehr sinnvoll ist das Programm RPINCL10, mit dem Programme sehr gezielt mit zwei Suchstrings durchsucht werden können.

Auch das Programm RSRSCAN1 leistet gute Dienste.

Quelle: http://www.tricktresor.de/blog/sourcecode-durchsuchen/

SAP QUERY InfoSet debuggen

Die Möglichkeit, das InfoSet einer QUERY zu debuggen, wird hier beschrieben.

Leider ist es nicht möglich, im InfoSet einen Beakpoint zu setzten. Glücklicherweise gibt es weitere Möglichkeiten, an den entscheidenen Stellen im Programmablauf, die Verarbeitung anzuhalten.

1. Möglichkeit: Solange das debuggen im Entwicklungssystem stattfinden soll, kann man einfach einen ABAP-Befehl einsetzen. Mit „BREAK (uname)“ an gewünschtem Verarbeitungsschritt hält die Verarbeitung an.

2. Möglichkeit: durch einschalten des Debuggers mit dem Transaktionscode „/h“. Nachdem die Query gestartet ist und die Selektionsparameter eingegen sind, sollte der OK-Code /h eingegeben werden.

image001

Nach dem Start der Query wird die Verarbeitung sofort angehalten und man befindet sich bereits im Debug-Modus. Nun legen wir einen neuen Watchpoint an. Dort legen wir den Focus auf eine Variable die während der Verarbeitung erwartungsgemäß einen Wert zugewiesen bekommt oder initiiert wird.image003

image005

Das könnte dann so aussehen:

image007