adesso orange🍊Stellenangebote:
Software Engineer Trainee · Senior
| (Senior) Cloud Software Engineer BTP
(Senior) Consultant Technologie · Consultant ABAP
Werkstudent Softwareentwicklung · Fiori / UI5 · Consulting · Application Management
Globale interne Tabelle in Schnittstelle positionsabhängig in Formular ausgeben (AdobeForms)
Anforderung
Bei bestehenden Formularen, die mit einem Standard Druckprogramm gedruckt werden und Ergänzungscode im Codeabschnitt der Schnittstelle erfolgt, besteht oft die Anforderung den Positionsdaten um weitere Felder zu ergänzen.
So könnte es z.B. sein, dass irgendein Positionstext des Beleges noch gedruckt werden soll. Da es ein Standard Druckprogramm ist, kann dort also keine Anpassungen ohne Modizifierungen geschehen. Aus diesem Grund macht man sich die Möglichkeit zu Nutze eben eine globale Variable d.h. eine interne Tabelle in der Schnittstelle zu deklarieren und abhängig der Positionen den Text zu ermitteln.
Das Ziel ist hier also durch die Positionen zu loopen und in der internen Tabelle mind. die Positionsr. und eben den entsprechenden Text in ein String zu speichern.
Wenn dieses Vorspiel erledigt ist, kommt die eigentliche Erklärung oder Sinn dieser Wiki-Seite:
=> Es zu schaffen, dass das Formular weiß wie es durch diese globale interne Tabelle laufen kann, ohne die Positionsdaten des Standard Druckprogramms zu modifizieren.
Kurz ist noch zu erwähnen, wenn ein Z-Druckprogramm genutzt wird, sollte man es an dieser Stelle anpassen und so weit es geht den Codeabschnitt in der Schnittstelle ignorieren. Persönliche Meinung ist, wenn für jedes neue Formular auch neue Schnittstellen gibt, hat man hier u.U. redudanten Code oder zumindestens selbe Methodenaufrufe, wenn man den wenigstens den Code auslagert (Erfahrung bei einem Kunden).
Schritt-für-Schritt Anleitung
Schritt 1: Globale Variable definieren
Bei dem Beispiel der Positionstexte empfiehlt es sich eine Struktur in SE11 anzulegen, die allgemein für Texte, egal ob Kopf-,Positions- oder auf weitere tiefere Ebene genutzt werden kann.
Anschließend ist die globale interne Tabelle für die Positionstexte anzulegen:
Schritt 2: Im Codeabschnitt die globale interne Tabelle abhängig der Position den Text ermitteln
Die interne globale Tabelle sollte bei dem Beispiel mit den Positionsdaten mindestens so aussehen:
POSNR | TEXT |
0010 | Text ermittelt mit FuBa "READ_TEXT" |
0020 | Hier wäre der Text für Posi 20 |
0030 | und für 30 |
0040 | sowie für 40 |
0050 | du weißt schon ;-) |
Es empfiehlt sich klar solches Coding in globale Klassen auszugliedern.
Schritt 3: Globale interne Tabelle als Einzelsatz bei Positionsdaten im Kontext hinzufügen
Im Kontextbereich wird nach dem Positionsdaten gesucht. Hier wird das Objekt aufgerissen und Rechtsklick auf "DATA" gemacht. Es wird "Einzelsatz" gewählt und die globale interne Tabelle genommen. Anschließend ist im Reiter "With Key-Bedingungen" die Bedingung zu setzen, dass jeder Einzelsatz für POSNR Feld der globalen Variable = POSNR der Tabelle der Positionsdaten gilt:
Schritt 4: Formular um Feld für den Text im Positionsbereich erweitern
Hier ist ein Objekt mit Typ "Textfeld" zu erstellen und an passender Stelle zu setzen. Anschließend ist als Binding das Feld zu nehmen, dass den Text hat.
Fazit
Aus meiner Sicht ist das eine gute Lösung den dynamischen Positionsteil um weitere Inhalte zu erweitern, wenn nur ein Standard Druckprogramm genutzt wird oder vom Kunden vorgegeben wird auf Z-Druckprogramme zu verzichten.