Code Optimierung

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

Code Optimierung

Beitrag von Mischi83 (ForumUser / 24 / 2 / 0 ) »
Hallo,

ich weiß nicht ob es hier hergehört, aber mich würde interessieren, ob es möglich ist, dieses Coding zu optimieren:

Code: Alles auswählen.

DATA: CS_goitem type goitem,
      lv_matnr type matnr,
      ls_mara type mara,
      lv_condition type i,
      lv_text1 type string,
      lv_text2 type string,
      lv_text3 type string,
      lv_text4 type string,
      lv_bwart type mseg-bwart.
DATA: lv_id TYPE icon-id.


      lv_text1 = 'Prüfprotokoll erforderlich / inspection certificate necessary'.
      lv_text2 = 'Proz./med. rel. Teil - Reinigung erford. / contam.crit.part - cleaning necessary'.


import cs_goitem = cs_goitem from memory id 'MIGO_POPUP'.

* Bewegungsart prüfen

case cs_goitem-bwart.

when '101' or '222' or '262' or '202'.

* Materialnummer holen

select single * from mara into ls_mara where matnr eq cs_goitem-matnr.

if ls_mara-zzext eq abap_true and ls_mara-zzplbl eq abap_true.

lv_text3 = lv_text1.
lv_text4 = lv_text2.

SELECT SINGLE id
  FROM icon
  INTO lv_id
  WHERE name = 'ICON_MESSAGE_WARNING'.

CALL FUNCTION 'POPUP_TO_INFORM'
  EXPORTING
    titel         = 'Information'
    txt1          = lv_id
    txt2          = lv_text3
    txt3          = lv_text4
*   TXT4          = ' '
          .

else.

if ls_mara-zzext eq abap_false and ls_mara-zzplbl eq abap_true.

lv_text3 = lv_text2.
lv_text4 = ''.

SELECT SINGLE id
  FROM icon
  INTO lv_id
  WHERE name = 'ICON_MESSAGE_WARNING'.

CALL FUNCTION 'POPUP_TO_INFORM'
  EXPORTING
    titel         = 'Information'
    txt1          = lv_id
    txt2          = lv_text3
    txt3          = lv_text4
*   TXT4          = ' '
          .

else.

if ls_mara-zzext eq abap_true and ls_mara-zzplbl eq abap_false.

lv_text3 = lv_text1.
lv_text4 = ''.

SELECT SINGLE id
  FROM icon
  INTO lv_id
  WHERE name = 'ICON_MESSAGE_WARNING'.

CALL FUNCTION 'POPUP_TO_INFORM'
  EXPORTING
    titel         = 'Information'
    txt1          = lv_id
    txt2          = lv_text3
    txt3          = lv_text4
*   TXT4          = ' '
          .

endif.
endif.
endif.

when others.

endcase.

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


Re: Code Optimierung

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) »
Warum genau brauchst du lv_text3 und lv_text4? Für welche NetWeaver Version benötigst du dein Coding?

Als erstes würde ich mal Text-Symbole anlegen, damit du nicht zweisprachig ausgeben musst. Falls NetWeaver 7.4< unterstützt wird, könnte ich dir das hier anbieten:

Code: Alles auswählen.

CASE cs_goitem-bwart.
    WHEN '101' OR '222' OR '262' OR '202'.

      SELECT SINGLE * FROM mara INTO ls_mara WHERE matnr = cs_goitem-matnr.

      IF ls_mara-zzext = abap_true OR ls_mara-zzplbl = abap_true.

        lv_text1 = COND #( WHEN ls_mara-zzext = abap_true
                            THEN text-001 " 001 -> Prüfprotokoll erforderlich / inspection certificate necessary
                           ELSE text-002 ). " 002 -> Proz./med. rel. Teil - Reinigung erford. / contam.crit.part - cleaning necessary

        lv_text2 = COND #( WHEN ls_mara-zzplbl = abap_true AND ls_mara-zzext = abap_true
                             THEN text-002 ).

        CALL FUNCTION 'POPUP_TO_INFORM'
          EXPORTING
            titel = 'Information'
            txt1  = lv_id
            txt2  = lv_text1
            txt3  = lv_text2.

      ENDIF.

  ENDCASE.

Re: Code Optimierung

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Man kann eigentlich fast jeden Code verbessern und DEN perfekten Code gibt es nicht.
In Frankreich gab das auch mal so einen Versuch DAS Lehrwerk für Mathematik zu erstellen --> https://de.wikipedia.org/wiki/Nicolas_Bourbaki Die Teile sind tatsächlich recht gut und sehr! sauber aufgebaut und geschrieben. Aber
Wikipedia hat geschrieben:Bei ihren Treffen diskutierte die Gruppe oft sehr heftig Entwürfe einzelner Lehrbuch-Kapitel, beschloss unzählige Veränderungen, und übergab die Manuskripte dann jeweils neuen Autoren zur Weiterbearbeitung. Beim nächsten Treffen war aber niemand mehr an die zuvor gefassten Beschlüsse gebunden; es wurde von neuem kritisiert und eine neue Umarbeitung beschlossen. Jedes Kapitel erfuhr typischerweise zehn Umarbeitungen, die sich über acht bis zwölf Jahre hinzogen.
Aber ich schweifte ab.
Für dich ganz konkret:
  • Kommentar zur Benamung der Variablen überlasse ich mal Ralf
  • Fest definierte Texte - entweder du nimmst Konstanten oder du machst sie übersetzbar mittels Textsymbolen
  • Der SELECT auf die ICONs ist überflüssig - entweder bindest du den TYPE-POol ICON ein oder in den neuen Systemen scheint das automatisch gefunden zu werden und du kannst die gleichnamig definierten Konstanten verwenden.
  • Die Variablen lv_text3 und lv_text4 sind überflüssig, da du ja einen IF-ELSE-Block hast und dort auch genauso gut mit den Variablen LV_TEXT1 und lv_text2 und "leer" arbeiten könntest
  • ein leeres "WHEN OTHERS" in einer CASE-Anweisung ist überflüssig
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Code Optimierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Ungarische Notation (lv_...) finde ich Quatsch, zum Warum gibt es einen Link in meiner Signatur (der inzwischen auch in der Entwicklungsrichtlinie der DSAG steht). Es gibt keine globalen Variablen, alle Variablen sind programmlokal. Wenn alles aber lokal ist, muss ich es nicht als lokal kennzeichnen. Und Global Table Types unterstreichen das.

Variablen und Methoden sollten sprechende Namen haben. Was soll "lv_id" sein (wie gesagt: Das "lv_" ist eh' über). Ich möchte am Namen sehen, wofür das Feld ist. Was für eine ID ist das und was macht die? Semantischer Kontext!

"=" nur für Zuweisungen verwenden, nie für Vergleiche! Du nutzt es z. B. in der WHERE-Bedingung. Es ist ein Fehler von ABAP, dass es dasselbe Zeichen für beides zulässt. Für Vergleiche nehme ich immer EQ bzw. NE.

Wenn du auf ABAP_FALSE prüfst, prüfe nicht

IF .... EQ ABAP_FALSE oder IF .... NE ABAP_TRUE,

sondern immer

IF NOT .... EQ ABAP_TRUE

Oft landen solche Vergleiche in funktionalen Methoden und ABAP 7.40 erlaubt das Weglassen von EQ ABAP_TRUE in

IF (NOT) compare( ) EQ ABAP_TRUE.

Wenn man sich diese Schreibweise schon jetzt angewöhnt, kann man beim Warten den hinteren Teil im Vorbeigehen abschneiden ohne nachzudenken.

Datenbankselektionen gehören gekapselt. Bei einem Ex-Kunden von mir hat jetzt wer den HANA-Kompatibilitätstest gefunden, raus kam eine gigantische Liste von inkompatiblen Programmen. Wenn man die Datenselektion nicht kapselt, muss man jedes Programm nach der Änderung komplett neu testen. Stichwort: BOPF!!

Gleiches gilt für die UI: Kapseln für den UI5/Fiori-Ernstfall. Bei besagtem Ex-Kunden werden jetzt die Entwickler auf Fiori-Schulungen geschickt, obwohl kein einziges der mehreren tausend (!) Programme SAPUI5-fähig wäre.

Ist ja nicht so, als hätte ich das nicht mehrfach gesagt, aber Fiori machen wir eh erstmal nicht. Das war vor einem Jahr.


Ralf *könnte noch mehr schreiben, aber meine spärlich bekleidete Frau hat gerade eine bessere Idee LOL
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Code Optimierung

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) »
ralf.wenzel hat geschrieben:IF (NOT) compare( ) EQ ABAP_TRUE.

Wenn man sich diese Schreibweise schon jetzt angewöhnt, kann man beim Warten den hinteren Teil im Vorbeigehen abschneiden ohne nachzudenken.
...oder man lässt den hinteren Teil einfach komplett weg, siehe https://help.sap.com/http.svc/rc/abapdo ... /index.htm

Re: Code Optimierung

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Wenn man jetzt schon ABAP 7.40 oder höher hat: Klar!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3704
Views
Code optimierung
von swonny » 29.06.2007 08:59 • Verfasst in ABAP® für Anfänger
5
Antw.
1944
Views
sap gui optimierung ?!
von sml » 30.01.2006 12:01 • Verfasst in Basis
2
Antw.
3584
Views
Performance Optimierung
von honeyjam » 21.03.2011 09:17 • Verfasst in ABAP® für Anfänger
13
Antw.
5445
Views
Report Optimierung
von Alexandra » 06.12.2007 12:13 • Verfasst in ABAP® für Anfänger
11
Antw.
3913
Views
Optimierung eines LOOPS
von Foxbat » 17.11.2011 12:01 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 18 Stunden von black_adept gelöst 23 / 3839
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 331
Trennen Strasse und Hausnummer
Gestern von payten 13 / 10701
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1382

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.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 18 Stunden von black_adept gelöst 23 / 3839
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 331
Trennen Strasse und Hausnummer
Gestern von payten 13 / 10701
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1382

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2913
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9507