Coding und Kommandobefehle in SAPscript und Transaktion SO10

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Siehe SAPscript.

Siehe Kategorie: SAPscript.

Siehe Kategorie: Textbaustein.

Coding und Kommandobefehle sind auch im SAPscript-Formular und bei Verwendung von SAPscript-Formularen in SO10-Texten/Standardtexten möglich. Manches lehnt sich an ABAP an, anderes kennt man als reiner ABAP-Entwickler nicht und muss sich erst daran gewöhnen.

Boolesche Operatoren und Zuweisungsoperator

  • Die wichtigsten Booleschen Operatoren werden hier ausgedrückt mit "EQ" (equal) und "NE" (not equal).
  • Statt "EQ" kann auch "=" und statt „NE“ kann auch „<>“ verwendet werden.

Ausgabe Felder unter Bedingung

Ausgabe Felder mit IF-Befehle

Mit einem Kommandoknoten kann eine Bedingung hinterlegt werden.

Hier wird eine Variable "LTAP-ABLAD" nur ausgegeben, wenn sie gefüllt ist.

/: IF &LTAP-ABLAD& NE &SPACE&
 * Abladestelle:,,&LTAP-ABLAD&
/: ENDIF

oder ein anderes Beispiel

/: IF &QALS-XCHPF& NE &SPACE& AND &QALS-STAT02& EQ &SPACE&
...
/: ENDIF

Im Editormenü unter "Bearbeiten - Fenster links/rechts" kann man die Zeile vergrößern, bzw. in den rechten Teil überwechseln und die Kommandozeile so vergrößern.

Ausgabe Feldlabel bei gefülltem Feldwert

Der Feldtext „Abladestelle:“ wird nur ausgegeben, wenn die Variable „LTAP-ABLAD“ gefüllt ist. Hier verbleibt dann allerdings eine leere Zeile.

&'Abladestelle:,,'LTAP-ABLAD&

Bei einem anderen Beispiel geht es die Telefonnummer inklusive Durchwahl.

&FSABE-TELF1&&' - 'FSABE-TEL_EXTEN1&

Offsetausgabe eines Feldes

Wie in ABAP kann auch in SAP ein Offset zu einem Feld angegeben werden.

Hier wird der Inhalt der Variablen "RM06P-PHTXT" ab der 14. Stelle mit einer Länge von 36 Zeichen ausgegeben.

&RM06P-PHTXT+14(36)&

Kommandoknotenbefehle in SO10-Texten

In SO10-Texten/Standardtexten sollte man sehr zurückhaltend sein Kommmandoknoten zu verwenden.

/: IF &LTAP-ABLAD& NE &SPACE&
/    Abladestelle:,,&LTAP-ABLAD&
/: ENDIF.
  • SO10-Texte können auch in Smart Forms und in Adobe Forms eingebunden werden. Aber in Smart Forms und Adobe Forms werden Kommandoknotenbefehle ignoriert. Es würde immer die Zeile "Abladestelle: ..." ausgegeben werden.
  • In SAPscript funktionieren die Kommandoknoten in einem SO10-Text. Aber es ist schwer nachvollziehbar, wenn in einen SO10-Text Programmlogik codiert wurde. Damit rechnet der Entwickler normalerweise nicht. Es sollte in aller Regel darauf verzichtet werden in den SO10-Texten Kommandoknotenbefehle zu verwenden.

Kommandozeilen länger als 72 Zeilen

Die maximale Länge einer Kommandozeile beträgt 128 Zeichen und es ist nicht möglich zeilenübergreifend eine Kommandozeile einzutragen. Es sind im Editorfenster nur 72 Zeichen zu sehen. Die maximale Länge von 128 Zeichen lässt sich allerdings (wenn auch umständlich) nutzen.

Es soll diese Zeile dargestellt werden. Sie ist länger als 72 Zeichen. In diesem konkreten Fall 80 Zeichen.

BITMAP 'TTG_GROUP_FOOTER_N1' OBJECT GRAPHICS ID BMAP TYPE BMON DPI 150 XPOS 2 cm

Im Menü kann zwischen der linken Seite des Editors (die ansonsten in aller Regel ausreicht) und der rechten Seite gewechselt werden. Hier lässt sich "POS 2 cm" nicht mehr in die Zeile schreiben auf der linken Seite.

Screeneditor1.JPG


Screeneditor2.JPG


Nun kann man auf der "rechten Seite" der benötigte Codingrest "POS 2 cm" ergänzen.

Screeneditor3.JPG

Debugging SAPscript

Form-Routine aus SAPscript aufrufen

Kommentare in SAPscript

Das Coding mit der Darstellung von Feldern, Kommandoknoten, Absatzformaten und Zeichenformaten ist recht schwer zu lesen und zu verstehen - selbst wenn man den Code selber geschrieben hat.

Es ist empfehlenswert viel in SAPscript mittels dem speziellen Absatzformat /* zu kommentieren. Alle Zeichen in einer Zeile, die beim Absatzformat /* folgen, sind reine Kommentare.

Man sollte kommentieren:

  • Kommandoknoten-/Befehle
  • Variablen, die nicht aus dem Namen selbsterklärend sind
  • spezielle Absatzformate

Um optisch den Kommentar leicht vom sonstigen Coding-Inhalt zu unterscheiden, kann man die Kommentarzeile beginnen lassen mit dem Text

/* Kommentar: <folgender Text>

Mit einer (oder mehr) leeren Kommentarzeilen lassen sich Codingblöcke auch gut sichtbar strukturieren. Es ist nicht möglich leere Zeile ohne gefülltes Absatzformat zu benutzen. Sobald man einmal „Bild auf / Bild runter“ gedrückt hat, werden diese leeren Zeilen gelöscht - während leere Zeilen mit dem Absatzformat /* beibehalten werden.

...
/*
...

Einbindung

Adressen einbinden

Logo/Grafik einbinden in SAPscript

SAPscript-Symbole

Systemsymbole

Programmsymbole

Standardsymbole

Textsymbole

Aufbereitungsoptionen Variablen im Formular/Textbaustein

Kommandoknotenbefehl NEW-PAGE / Seitenumbruch auslösen

  • Im SAPscript-Formular kann ein Seitenumbruch ausgelöst werden durch den Kommandoknotenbefehl
  • Mit dem Reinen "NEW-PAGE" wird die Folgeseite von der aktuellen Seite aufgerufen.
NEW-PAGE
  • Es kann beim "NEW-PAGE" aber auch explizit eine Folgeseite angegeben werden. Das macht Sinn, wenn die gewünschte Folgeseite von der Folgeseite abweicht, die man bei der Seitendefinition der aktuellen Seite angegeben hat. Z. B. wird vielleicht auf einer Seite "NEXT" als Folgeseite auch die Seite "NEXT" eingetragen, aber als letzte Ausgabeseite beim Druck soll dann eine AGB folgen, dann würde man am Ende vom MAIN eine Zeile hinzufügen, wo die Seite "AGB" aufgerufen wird
NEW-PAGE AGB

PROTECT - ENDPROTECT (Inhalte zusammenhalten)

  • Es ist aus optischen Gründen oft schöner, wenn bestimmte Inhalte zusammen auf einer Ausgabeseite ausgegeben werden.
  • Man kann die Inhalte, die in SAPscript zusammen ausgegeben werden sollen, mit einer Kommandozeile PROTECT beginnen und mit einer Kommandoziele ENDPROTECT abschließen.
/: PROTECT
  ...
/: ENDPROTECT
  • Man muss dabei jedoch vorsichtig sein, dass der Inhalt, der zusammen ausgegeben werden soll, nicht zu groß wird. Daher bietet sich dieser Befehl "PROTECT - ENDPROTECT" nicht für Tabellen an, wo der Inhalt sehr umfangreich werden kann.
  • Man kann diesen Befehl auch in SO10-Texten einbauen. Das kann sehr elegant sein, wenn dieser Text in verschiedenen Formularen benutzt wird. Man muss jedoch vorsichtig sein, dass es letztlich keine geschachtelten PROTECT-ENDPROTECT gibt. Das erste gefundene ENDPROTECT (der vielleicht zum zweiten PROTECT-Befehl gehört) beendet auch den ersten Aufruf vom PROTECT. Insofern muss erwogen werden, ob ein eingebauter PROTECT-ENDPROTECT-Befehl im SO10-Textbaustein nicht mit einem PROTECT-ENDPROTECT im Formular kollidiert.
  • In der Projektpraxis gab es bei einem Kunden einen SO10-Text mit einem Hinweis auf Internetsicherheit und da wurde dieser Befehl im SO10-Text eingebaut und so ein möglicher Seitenumbruch gleich bei einer ganzen Reihe von Formularen vorgebeugt, die diesen SO10-Text genutzt haben.

Protect1.JPG

Siehe https://answers.sap.com/questions/3321054/what-is-protect-endprotect-in-sapscript.html.

ULINE Unterstrich (Line)

  • Im SAPscript-Formular wird ein Unterstrich ausgegeben mit dem Befehl (<n> steht für eine Zahl >= 1)
&ULINE(<n>)&

also z. B.

&ULINE(10)&

  • Abhängig von der Schriftart ist die Länge eines Unterstrichs aber nicht identisch mit der Länge der zu unterstreichenden Zeichen. Meist wird eine Proportionalschrift verwendet, wo z. B. der Buchstabe "i" weniger Platz beansprucht als ein "m". Dann muss experimentiert werden wieviel Zeichen für den Unterstrich nötig sind, wenn man die Anzahl der Zeichen kennt, die unterstrichen werden sollen.
  • Oft wird der Unterstrich verwendet um thematisch Teile vom Formular visuell erkenntlich zu trennen.
  • Zum Beispiel ein Unterstrich mit einer Länge von 90 Zeichen auf einer Zeile
&ULINE(90)&
  • Oft wird Uline auch verwendet auch als Platzhalter für eine Unterschrift
  • Meist wird die Absenderzeile in einem Formular unterstrichen

Web-Links