CL_PROGRESS_INDICATOR

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

CL_PROGRESS_INDICATOR

Beitrag von JohnLocklay (Specialist / 183 / 30 / 2 ) »
Moin Leute

Kleine Frage

ich benutzee die Klasse CL_PROGRESS_INDICATOR
um mir den Fortschritt eines Prozesses anzeigen zu lassen.

Code: Alles auswählen.


cl_progress_indicator=>progress_indicate(
        EXPORTING
          i_text               = | { lv_text } { lv_check } ( { sy-index } / { counter } ) |
          i_processed          = sy-index
          i_total              = counter
          i_output_immediately = abap_true
      ).

Jetzt habe ich die Anzeige
-> Durchlaufe Prüfung: Check1 (1 / 20)

Aber irgendwie wird mir diese Eieruhr davor nicht angezeigt.
Weiß jemand woran das Liegt?
Code once - Think twice

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


Re: CL_PROGRESS_INDICATOR

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Diese Klasse benutzt unter der Haube ja den Funktionsbaustein SAPGUI_PROGRESS_INDICATOR. Und der zeigt nur eine Eieruhr an, wenn der Zähler nicht Null ist.

Eigentlich sollte man bei Deinem Beispiel annehmen, dass dies nicht der Fall ist. Aber da Du (wie leider so viele Fragesteller) nur ein Fragment Deines Codes gepostet hast, aus dem nicht hervorgeht, woher Deine Variablen ihre Werte beziehen, kann ich Dir da auch keinen Tipp geben.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
JohnLocklay

Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: CL_PROGRESS_INDICATOR

Beitrag von a-dead-trousers (Top Expert / 4484 / 231 / 1205 ) »
Ich würde mal blind darauf tippen dass das SY-INDEX Schuld hat.
Da der Parameter "i_processed" als "per Referenz" definiert ist, führt jede Änderung von SY-INDEX in der Methode PROGRESS_INDICATE dazu, dass auch der Wert von "i_processed" mitgeändert wird.

Generell ist es nie gut, SY-Variablen im Coding "zu weit weg" vom Befehl der die Variablen setzt, zu verwenden.

Code: Alles auswählen.

READ TABLE lt_bla ASSIGNING <ls_bla> INDEX 1.
* SY-SUBRC wurde von READ TABLE gesetzt.
CALL METHOD lcl_class=>do_something.
* SY-SUBRC könnte, muss aber nicht, innerhalb der Methode verändert worden sein.
IF sy-subrc EQ 0. "Ich will jetzt wissen ob der READ TABLE gutgegangen ist.
* Das Ergebnis der IF-Abfrage ist nicht mehr eindeutig dem READ TABLE zuordenbar.
ENDIF.
Bei "per Referenz" übergebenen Parametern kommt eben zusätzlich hinzu, dass man keine "Kopie" des Speicherinhalts wie bei "per Value" verwendet, sondern das "Original".

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
JohnLocklay

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.18
Basis: 7.50

Re: CL_PROGRESS_INDICATOR

Beitrag von JohnLocklay (Specialist / 183 / 30 / 2 ) »
DeathAndPain hat geschrieben:Diese Klasse benutzt unter der Haube ja den Funktionsbaustein SAPGUI_PROGRESS_INDICATOR. Und der zeigt nur eine Eieruhr an, wenn der Zähler nicht Null ist.

Eigentlich sollte man bei Deinem Beispiel annehmen, dass dies nicht der Fall ist. Aber da Du (wie leider so viele Fragesteller) nur ein Fragment Deines Codes gepostet hast, aus dem nicht hervorgeht, woher Deine Variablen ihre Werte beziehen, kann ich Dir da auch keinen Tipp geben.
Du hast recht. Mein Beispiel im Coding war nicht sprechend genug.
Ich würde mal blind darauf tippen dass das SY-INDEX Schuld hat.
Da der Parameter "i_processed" als "per Referenz" definiert ist, führt jede Änderung von SY-INDEX in der Methode PROGRESS_INDICATE dazu, dass auch der Wert von "i_processed" mitgeändert wird.
Generell ist es nie gut, SY-Variablen im Coding "zu weit weg" vom Befehl der die Variablen setzt, zu verwenden.

Absoluter Volltreffer.
sy-index war schuld.

Code: Alles auswählen.

lv_index = sy-index
wenn man eine Variable auf Sy-index typisiert und dann sy-index übergibt funktioniert es auf einmal.
kann mir nur leider nicht erklären wo das System da den Unterschied macht. Weil es ne Systemvariable ist?
Code once - Think twice

Re: CL_PROGRESS_INDICATOR

Beitrag von a-dead-trousers (Top Expert / 4484 / 231 / 1205 ) »
JohnLocklay hat geschrieben:kann mir nur leider nicht erklären wo das System da den Unterschied macht. Weil es ne Systemvariable ist?
Möglich, dass direkt beim CALL METHOD oder irgendwo in der Methode PROGRESS_INDICATE, die Systemvariable auf 0 gesetzt wird. Das müsstest du debuggen um sicher zu gehen (ich hab jetzt leider nicht die Zeit dafür).
Durch die Übergabe "per Referenz" wird die interne Variable "i_processed" direkt mit der SY-INDEX verknüpft. Wird nun irgendwo (auch implizit) die SY-INDEX verändert, ändert sich gleichzeitig auch "i_processed" auf denselben Wert.

lg ADT
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.18
Basis: 7.50

Re: CL_PROGRESS_INDICATOR

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Ich kenne das Phänomen. Aber das Definieren einer lokalen Hilfsvariable nur für diesen Zweck liest sich natürlich hässlich. Was würde passieren, wenn man der Methode an dieser Stelle einfach CONV i( sy-index ) übergibt? Dadurch, dass es dann ein (trivialer) Rechenausdruck ist, kann er dann doch eigentlich keine Referenz mehr übergeben, oder?
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: CL_PROGRESS_INDICATOR

Beitrag von a-dead-trousers (Top Expert / 4484 / 231 / 1205 ) »
DeathAndPain hat geschrieben:Ich kenne das Phänomen. Aber das Definieren einer lokalen Hilfsvariable nur für diesen Zweck liest sich natürlich hässlich. Was würde passieren, wenn man der Methode an dieser Stelle einfach CONV i( sy-index ) übergibt? Dadurch, dass es dann ein (trivialer) Rechenausdruck ist, kann er dann doch eigentlich keine Referenz mehr übergeben, oder?
Das würde natürlich auch funktionieren, weil ich aber nicht weiß, ob JohnLocklay schon die 7.40er Sytax hat, hab ich es vorerst nicht vorgeschlagen.
Mit der Hilfsvariable gehts immer.
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.18
Basis: 7.50

Re: CL_PROGRESS_INDICATOR

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
Was ist mit einem anderen Rechenausdruck? War es unter 7.00 (älter wird er hoffentlich nicht sein) schon erlaubt, Methoden Rechenausdrücke als Parameter zu übergeben? Dann könnte man auch ohne 7.40-Syntax einfach sy-index + 0 schreiben mit dem gleichen Effekt.
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: CL_PROGRESS_INDICATOR

Beitrag von JohnLocklay (Specialist / 183 / 30 / 2 ) »
wenn Du es schaffst das mein Chef die Syntaxversion bei uns mal hochschraubt geb ich Dir nen Bier aus oO
Code once - Think twice

Re: CL_PROGRESS_INDICATOR

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
DeathAndPain hat geschrieben:Was ist mit einem anderen Rechenausdruck? War es unter 7.00 (älter wird er hoffentlich nicht sein) schon erlaubt, Methoden Rechenausdrücke als Parameter zu übergeben? Dann könnte man auch ohne 7.40-Syntax einfach sy-index + 0 schreiben mit dem gleichen Effekt.
Nein - und unter 7.01 geht das auch noch nicht. Ich glaube das kam erst mit 7.02
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: CL_PROGRESS_INDICATOR

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
JohnLocklay hat geschrieben:wenn Du es schaffst das mein Chef die Syntaxversion bei uns mal hochschraubt geb ich Dir nen Bier aus oO
Das musst Du gerissen anstellen. Wann immer er irgendwas von Dir will, musst Du betonen, dass in eurem alten Release der Aufwand für eine Umsetzung sehr hoch ist, nach einem Upgrade aber alles viel einfacher umsetzbar und von der SAP besser unterstützt wäre.

Und dann natürlich gleich auf 7.50 gehen. Selbst wenn Du das noch nicht gleich durchgesetzt bekommst, schauen, dass schon mal das 7.50er- SAPGui in die Ausrollung geht, damit es sich langsam auf den Clients verteilt und damit schon mal eine Grundlage gelegt ist (wobei das Server-7.50 vor dem SAPGui 7.50 kam, insofern läuft das Server-7.50 auch noch auf SAPGui 7.40, solange keine 7.50-spezifischen Features genutzt werden. Umgekehrt sowieso).
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Seite 1 von 1

Vergleichbare Themen

0
Antw.
967
Views
Progress Indicator
von JohnLocklay » 08.03.2019 09:28 • Verfasst in ABAP® Core
0
Antw.
1859
Views
KZBEW Movement Indicator
von Niels » 09.09.2015 16:11 • Verfasst in ABAP® Core
0
Antw.
1533
Views
Nodata indicator in DEBMAS
von Margolwes » 14.05.2020 16:54 • Verfasst in Financials

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.