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

Ä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

Text editieren, FuB READ_TEXT, EDIT_TEXT

Wer braucht das nicht auch mal. Einen Text editieren, der sich mit der Transaktion SO10 nicht editieren lassen will!

In diesem Beispiel wollen wir einen Text eines bestimmten objekt-Typs editieren. Die Transaktion SO10 scheint dafür aber nicht so ganz geeignet, da hiermit keine Texte bearbeitet werden können, die als Objekttyp etwas anderem als „TEXT“ zugeordnet sind. Mit einem kleinen Trick geht’s dann aber doch!

Zunächst suchen wir nach dem Objektschlüssel. Dieser ist je nach Anwendung an verschiedenen Stellen zu finden und ist sehr individuell. Das hier gezeigte Beispiel soll nur exemplarisch für alle anderen Fälle gelten.

Fall: automatische Rechnungseingangsverarbeitung, ein bestimmter Text enthält nicht plausible Zeichen.

Weiterlesen

Belegübersicht in Bestellung

In der Transaktion zur Bestellschreibung kann die Belegübersicht angezeigt werden. Dieses Fenster kann mit der Maus in der Breite verändert werden. Manchmal kommt es vor, das sich das Fenster danach nicht mehr vergrößern lässt. Man ist einfach nicht in der Lage, die Fensterkanten mit der Maus zu erreichen. Hierzu gibt es einen Hinweis 197012. Die Tabelle ESDUS enthält Einträge zu dynamischen Benutzereinstellungen. In diesem Fall hilft es, wenn die Einträge zum Vorgang gelöscht werden. Nach einem erneuten Aufruf der Transaktion ME21n ist die Belegübersicht wieder in den Originalzustand versetzt.

Alternativ können auch die Einträge zu

SAPLMEGUI/0000 Tree-Width und

Tree-Control Tree-Width

mit dem Wert 132 auf den Originalzustand zurückgesetzt werden.

alt

Auffinden eines BADIs

Auffinden eines BADIs

 Quelle: unbekannt

Follow the below steps to find out what all BADI’s are called when you press any button in any transaction.

1) Goto se24 (Display class cl_exithandler)

2) Double click on the method GET_INSTANCE.

3) Put a break point at Line no.25 (CASE sy-subrc).

Now

4) Execute SAP standard transaction

5) Press the required button for which you need to write an exit logic, the execution will stop at the break point.

6) Check the values of variable ‚exit_name‘, it will give you the BADI name called at that time.

7) This way you will find all the BADIs called on click of any button in any transaction.

This will solve your BADI finding problem in future as well !!

Mark if helpful

Regs,

Tushar Mundlik

/PSIIC/REPO_SERVICE

/PSIIC/CL_EX_REPO_SERVICE

Dynprofeld, PAI, Inhalt ändern

Für ein Dynpro soll der Inhalt eines Feldes manipuliert werden.

Es soll eine Suchhilfe für den Namen einer Datei auf dem Applikationsserver an ein Dynprofeld angedockt werden.
Das Besondere ist hier, dass der Frontendbenutzer keine Leserechte für das Verzeichnis bekommt. Um die Dateiauswahl mit dem SAP-Systemuser durchzuführen, bietet sich der FuB „F4_DXFILENAME_TOPRECURSION“ an.
Der FuB sorgt also für die Dateiauswahl. Nun müssen wir dessen Rückgabewert noch in das DYNPRO-Feld zurückschreiben. Dafür gibt es den FuB „C14Z_DYNP_WRITE_FIELD“. Der Aufrufzeitpunkt ist PAI. Das Unterprogramm sollte also im ProzessAfterInput aufgerufen werden.

Weiterlesen