STMS via Coding aktualisieren Thema ist als GELÖST markiert

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

STMS via Coding aktualisieren

Beitrag von ichse18577 (ForumUser / 38 / 14 / 3 ) » 15. Nov 2019 10:00

Hallo zusammen,

kennt jemand eine Möglichkeit (Fuba oder Klasse) um die STMS via Coding zu aktualisieren?

Gruß Ichse


Re: STMS via Coding aktualisieren

Beitrag von a-dead-trousers (Top Expert / 3300 / 90 / 840 ) » 15. Nov 2019 12:02

Was bitte willst du in der STMS (um Gotteswillen!) und vorallem wie aktualisieren?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: STMS via Coding aktualisieren

Beitrag von DeathAndPain (Top Expert / 1184 / 132 / 256 ) » 15. Nov 2019 12:45

Na, das ist doch der Schritt, der gemacht werden muss, bevor der Code dann alles, was neu hinzugekommen ist, automatisch und ohne dass einer nochmal draufschaut durchtransportiert. 😁

Re: STMS via Coding aktualisieren

Beitrag von DeathAndPain (Top Expert / 1184 / 132 / 256 ) » 15. Nov 2019 12:47

Um die Frage des Threaderstellers zu beantworten: Das kriegt man sicherlich per programmiertem Batch Input hin (Transaktion SHDB, damit eine Aufzeichnung der STMS erstellen, in der man auffrischt, dann von der SHDB passenden Code generieren lassen und den dann ins eigene Programm einbauen).

Zur Sinnhaftigkeit des Unterfangens äußere ich mich nicht. 😁

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ichse18577 (18. Nov 2019 09:51)


Re: STMS via Coding aktualisieren

Beitrag von ewx (Top Expert / 4088 / 179 / 403 ) » 15. Nov 2019 12:53

Vielleicht hilft dir schon der Schalter "Update Display automatically" in den Einstellungen der STMS?
Menü: Extras - Personal Settings

Re: STMS via Coding aktualisieren

Beitrag von ichse18577 (ForumUser / 38 / 14 / 3 ) » 15. Nov 2019 14:52

Im allgemeinen geht es darum, dass ich ein virtuelles System anlegen möchte via Coding und danach die STMS aktualisieren muss.
Im weiteren Programmverlauf werde ich nämlich Aufträge in meine neu angelegte Queue anhängen und dazu sollte die STMS aktuell sein.

Re: STMS via Coding aktualisieren

Beitrag von ichse18577 (ForumUser / 38 / 14 / 3 ) » 18. Nov 2019 09:50

Danke an DeathAndPain

der Batch Input war die Lösung die ich letztlich benutzt habe.
Wen es interessiert so sieht dann mein Coding aus:

Code: Alles auswählen.


  DATA: lt_bdc TYPE TABLE OF bdcdata,
        ls_bdc LIKE LINE OF lt_bdc,
        ls_options TYPE ctu_params.

  ls_options-dismode = 'N'.

**********************************************************************
*STMS via Batch Input starten
**********************************************************************

  "Start
  ls_bdc-program = 'SAPLTMSU'.
  ls_bdc-dynpro = 0100.
  ls_bdc-dynbegin = 'X'.
  ls_bdc-fnam = ''.
  ls_bdc-fval = ''.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  ls_bdc-program = ''.
  ls_bdc-dynpro = '' .
  ls_bdc-dynbegin = ''.
  ls_bdc-fnam = 'BDC_CURSOR'.
  ls_bdc-fval = 'WTMSU-SYSNAM'.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  ls_bdc-program = ''.
  ls_bdc-dynpro = ''.
  ls_bdc-dynbegin = ''.
  ls_bdc-fnam = 'BDC_OKCODE'.
  ls_bdc-fval = '=IMPO'.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  ls_bdc-program = 'SAPMSSY0'.
  ls_bdc-dynpro = 0120.
  ls_bdc-dynbegin = 'X'.
  ls_bdc-fnam = ''.
  ls_bdc-fval = ''.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  ls_bdc-program = ''.
  ls_bdc-dynpro = ''.
  ls_bdc-dynbegin = ''.
  ls_bdc-fnam = 'BDC_CURSOR'.
  ls_bdc-fval = '02/03'.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  ls_bdc-program = ''.
  ls_bdc-dynpro = ''.
  ls_bdc-dynbegin = ''.
  ls_bdc-fnam = 'BDC_OKCODE'.
  ls_bdc-fval = '=REFR'.
  APPEND ls_bdc TO lt_bdc.
  CLEAR ls_bdc.

  CALL TRANSACTION 'STMS' USING lt_bdc OPTIONS FROM ls_options.

ich habe das Ganze einfach in eine eigene Klasse gepackt um die Wiederverwendbarkeit zu gewährleisten und es funktioniert auch einwandfrei

Gruß Ichse

Folgende Benutzer bedankten sich beim Autor ichse18577 für den Beitrag:
hga (18. Nov 2019 13:17)


Re: STMS via Coding aktualisieren

Beitrag von DeathAndPain (Top Expert / 1184 / 132 / 256 ) » 18. Nov 2019 14:14

Für den MODE hat der CALL TRANSACTION einen eigenen Parameter, dafür hättest Du nicht extra eine Optionsstruktur ls_options deklarieren und füllen brauchen. Beim CALL TRANSACTION direkt MODE 'N' anzugeben ist kürzer und übersichtlicher. Ich würde dort auch UPDATE 'S' angeben, damit der Kram direkt verbucht wird.

Außerdem empfehle ich, direkt im Anschluss noch ein CLEAR lt_bdc. anzugeben. Zu oft ist es mir passiert, dass ich später noch einen weiteren Batch Input ausführen wollte und in der Tabelle noch der alte Kram drinstand, an den der neue dann drangehängt wurde. Kann natürlich nicht passieren, wenn Du den Code in eine eigene Unterroutine packst, in der lt_bdc lokal deklariert ist und die nach dem CALL TRANSACTION endet.

Die APPENDs kannst Du übrigens kürzer gestalten, indem Du Dir das Include BDCRECX1 anschaust. Das wird vom Standard benutzt. Bei allen meinen Arbeitgebern habe ich mir davon eine Kopie ZDCRECX2 gemacht, in der ich alles rausgeschmissen habe, was ich für einfache Onlineverbuchung per CALL TRANSACTION nicht brauche (insbesondere die ganzen Selektionsbildbefehle). In ZDCRECX2 muss nur ein DATA für die Felder BDCDATA und GROUP drinstehen und die ganzen Formroutinen aus BDCRECX1. Dann kannst Du die Batchtabelle so elegant mit Routinenaufrufen aufbauen, wie der von der SHDB generierte Code das macht. Damit kannst Du dann Code zur Sofortverbuchung oder zur Erzeugung von Batchmappen schreiben, die später per SM35 verbucht werden sollen. Der Code ist derselbe; der Unterschied besteht nur darin, ob Du nach dem Aufbau Deiner Batchtabelle (bei Dir: lt_bdc, bei ZDCRECX2: bdcdata) CALL TRANSACTION oder PERFORM BDC_TRANSACTION schreibst. In letzterem Fall musst Du vorher auch noch ein PERFORM OPEN_GROUP und hinterher ein PERFORM CLOSE_GROUP schreiben. (Die ganzen Formroutinen stehen alle im Include ZDCRECX2, das Du Dir wie oben beschrieben aus dem Include BDCRECX1 erzeugst.)

Re: STMS via Coding aktualisieren

Beitrag von ewx (Top Expert / 4088 / 179 / 403 ) » 18. Nov 2019 15:14

Mit VALUE nochmal kürzer, übersichtlicher und eleganter:

Code: Alles auswählen.

DATA(bdc) = VALUE bdcdata_tab(
  ( program  = 'SAPLTMSU'    dynpro   = '0100'    dynbegin = 'X' )
  ( fnam     = 'BDC_CURSOR'  fval     = 'WTMSU-SYSNAM' )
  ( fnam     = 'BDC_OKCODE'  fval     = '=IMPO' )
  ( program  = 'SAPMSSY0'    dynpro   = '0120'    dynbegin = 'X' )
  ( fnam     = 'BDC_CURSOR'  fval     = '02/03' )
  ( fnam     = 'BDC_OKCODE'  fval     = '=REFR' )
 ).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Somani (18. Nov 2019 17:00)


Re: STMS via Coding aktualisieren

Beitrag von DeathAndPain (Top Expert / 1184 / 132 / 256 ) » 18. Nov 2019 17:07

Sofern der auszuführende Batch komplett statisch ist und nicht partiell in Unterroutinen berechnet werden muss, mag das gehen. Aber - ohne es ausprobiert zu haben - kann man dann nicht auch gleich den DATA(bdc) weglassen und den ganzen VALUE-Block direkt an den CALL TRANSACTION übergeben? Oder ist das wie bei PERFORM, dass VALUE an der Stelle nicht unterstützt wird? Wobei es bei PERFORM ja einen gewissen Sinn macht, da es syntaktisch erlaubt ist, USING-Parameter in der Unterroutine zu ändern, was bei einem CALL TRANSACTION aber kein Problem sein sollte.

Die BDC_CURSOR-Einträge kann man übrigens so gut wie alle weglassen. Das ist extrem selten, dass die Cursorposition in einem Batch Input eine Rolle spielt. Der SHDB zeichnet sie bei jedem einzelnen Dynpro mit auf, aber das ist eigentlich immer das erste, was ich aus dem aus der Aufzeichnung generierten Code ersatzlos rausschmeiße wegen nutzlos. Dadurch wird das Ganze nochmal deutlich kürzer und übersichtlicher und auch ein bisschen schneller.

Re: STMS via Coding aktualisieren

Beitrag von ewx (Top Expert / 4088 / 179 / 403 ) » 18. Nov 2019 17:16

DeathAndPain hat geschrieben:
18. Nov 2019 17:07
Sofern der auszuführende Batch komplett statisch ist und nicht partiell in Unterroutinen berechnet werden muss, mag das gehen. Aber - ohne es ausprobiert zu haben - kann man dann nicht auch gleich den DATA(bdc) weglassen und den ganzen VALUE-Block direkt an den CALL TRANSACTION übergeben? Oder ist das wie bei PERFORM, dass VALUE an der Stelle nicht unterstützt wird? Wobei es bei PERFORM ja einen gewissen Sinn macht, da es syntaktisch erlaubt ist, USING-Parameter in der Unterroutine zu ändern, was bei einem CALL TRANSACTION aber kein Problem sein sollte.
Klar. Sofern Logik dahinter ist, ist eine Verwendung von Modulen (FORM oder METHOD) sinnvoller.
Der CALL TRANSACTION unterstütz den VALUE Befehl m.W. nicht...
DeathAndPain hat geschrieben:
18. Nov 2019 17:07
Die BDC_CURSOR-Einträge kann man übrigens so gut wie alle weglassen. Das ist extrem selten, dass die Cursorposition in einem Batch Input eine Rolle spielt. Der SHDB zeichnet sie bei jedem einzelnen Dynpro mit auf, aber das ist eigentlich immer das erste, was ich aus dem aus der Aufzeichnung generierten Code ersatzlos rausschmeiße wegen nutzlos. Dadurch wird das Ganze nochmal deutlich kürzer und übersichtlicher und auch ein bisschen schneller.
BDC_CURSOR ist dann wichtig, wenn du einen "Doppelklick" (F2) in einem TableControl aufnimmst. Durch den BDC_CURSOR weiß das Programm in welcher Zeile du dich befindest.

Seite 1 von 1

Aktuelle Forenbeiträge

Generische Objekte in der Massenverarbeitung
vor 14 Minuten von TravellingEntwickler 2 / 577
PopUp bei Fakturaerstellung
vor einer Stunde von TravellingEntwickler 1 / 13
Unterschiedliche Konditionen AB und Rechnungdruck
vor 6 Stunden von Sebastian82 1 / 34
Anzahlungsrechnung drucken
vor 6 Stunden von Sebastian82 1 / 30

Unbeantwortete Forenbeiträge

PopUp bei Fakturaerstellung
vor einer Stunde von TravellingEntwickler 1 / 13
Unterschiedliche Konditionen AB und Rechnungdruck
vor 6 Stunden von Sebastian82 1 / 34
Anzahlungsrechnung drucken
vor 6 Stunden von Sebastian82 1 / 30
Änderungsbelege für Kundenfelder im BP
vor 4 Tagen von GerryRe 1 / 1990