-
Inhalt Variable Wert zuweisen
Hallo Miteinander,
In meiner Variablen steht z.b. der Wert
'Feld1'.
Dieser Wert stellt wiederrum einen Variablennamen dar.
Ist es in RPG möglich den Wert einer Variablen auszulesen ( in diesem Beipiel wäre das Feld1) und diesem Inhalt Feld1 was eine Variable darstellt einen Wert zuzuweisen??
das Thema wurde schon mal vor einiger Zeit hier diskutiert. Evtl hat sich seit der Zeit ja was getan...
Vielen dank im voraus..
-
Geändert hat sich zur Zeit nichts.
Namen dienen nur dem Compiler und werden in Adressen übersetzt.
Kennst du die Adresse (%ADDR() zur Compilezeit), kannst du "dynamisch" mit Inhalten arbeiten.
Ansonten ist der "Name" zur Laufzeit unbekannt.
-
Ergo. Ich habe keine möglichkeit dem Feld1 einen Wert zuzuweisen oder??
Geht das evtl über API QUSLFLD (buffer position)
Offset | Type | Field |
---|
Dec | Hex
|
---|
0 | 0 | CHAR(10) | Field name | 10 | A | CHAR(1) | Data type | 11 | B | CHAR(1) | Use | 12 | C | BINARY(4) | Output buffer position | 16 | 10 | BINARY(4) | Input buffer position |
Die Variablennamen meines Displayfiles werden erst zur Laufzeit über ein Api ermittelt.
-
wenn du im Programm an den Buffer drankommst (sprich ihn addressieren kannst, dann reichen die Positionen, du holst dir einen Pointer auf die Buffer Variable, addierst den Offset drauf et voila.
D*B
der nicht ganz versteht wozu das eigentlich gut ist und meint, dass oft über Anwednungsdesign mehr zu holen ist...
 Zitat von woodstock99
Ergo. Ich habe keine möglichkeit dem Feld1 einen Wert zuzuweisen oder??
Geht das evtl über API QUSLFLD (buffer position)
Offset | Type | Field |
---|
Dec | Hex
|
---|
0 | 0 | CHAR(10) | Field name | 10 | A | CHAR(1) | Data type | 11 | B | CHAR(1) | Use | 12 | C | BINARY(4) | Output buffer position | 16 | 10 | BINARY(4) | Input buffer position |
Die Variablennamen meines Displayfiles werden erst zur Laufzeit über ein Api ermittelt.
-
@ Bender.
wir setzten unsere Displayattribute über einen Variablennamen. Diese Variablennamen holen wir uns über ein APi. Diese müssen alle erst einmal initialisiert werden x:20 weil es sonst zu Fehlern bei der Setzung der Attribute kommt.
Wie soll man das sonst anstellen?
Wir wollen halt nicht jede Variable im RPG
per Hand initialisieren ...
-
solange man ein File pro Displayfile hat, würde ich das von anderer Logik befreien (=> Design) und die Dinger aus den DDS Bestimmungen generieren - und fertig ist.
@Baldur: Substring von DS (intern binary data) und Pointer ist dasselbe. Die packed und int Klamotten kriegt man auch über Zwischenfelder da rein (am besten macht man sich da ein Service Programm mit entsprechenden Konvertierungen)
D*B
 Zitat von woodstock99
wir setzten unsere Displayattribute über einen Variablennamen. Diese müssen alle erst einmal initialisiert werden x:20 weil es sonst zu Fehlern bei der Setzung der Attribute kommt.
Wie soll man das sonst anstellen?
Wir wollen halt nicht jede Variable im RPG
per Hand initialisieren ...
-
wir haben halt mehrere Records,Windows usw in unserer Bildschirmmaske. Wir positionieren und z.b auch bei einer Fehlermeldung über ein Api auf das fehlerhafte Feld. Ziel dieser ganzen Aktion soll sein : Keine Bezugszahlen mehr und flexibilität z.b. ein Feld das Blau ist soll bei einem Fehler in Umkehranzeige dargestellt werden usw und das ganze ohne Bezugszahlen, denn 1347 Bezugzahlen im Programm macht das ganze nicht grad übersichtlicher .
-
@Bahnhof: dann gehen wir doch nochmal zurück nach draußen.
das alles ist doch zur Compilezeit bekannt und ändert sich erst, wenn das DSPF geändert wird?!
Dann würde ich den erforderlichen Code generieren!!!
D*B
 Zitat von woodstock99
wir haben halt mehrere Records,Windows usw in unserer Bildschirmmaske. Wir positionieren und z.b auch bei einer Fehlermeldung über ein Api auf das fehlerhafte Feld. Ziel dieser ganzen Aktion soll sein : Keine Bezugszahlen mehr und flexibilität z.b. ein Feld das Blau ist soll bei einem Fehler in Umkehranzeige dargestellt werden usw und das ganze ohne Bezugszahlen, denn 1347  Bezugzahlen im Programm macht das ganze nicht grad übersichtlicher  .
-
Was soll denn dein API leisten ?
Ein Programm, dass eine DSPF verarbeitet, muss doch genau auf diese abgestimmt sein.
Ich verstehe also dein Problem hier überhaupt nicht.
Ach ja, es gibt bei RPG ja noch ein Problem:
Jedes Feld ist mit seinem Namen nur einmal im Programm bekannt!
D.h., dass der Compiler die Adresse berechnet.
Es ist nicht garantiert, dass die Felder in der Reihenfolge ihrer Definition des Puffers auch im Speicher stehen.
Beispiel:
In 2 Formaten verwendest du den Feldnamen "DSNAME".
Das Feld ist nur 1 Mal im Programm vorhanden, irgendwo im Speicher.
RPG generiert zusätzlichen Code:
Bei der Ausgabe eines Formates werden die Felder in den internen Puffer des Filehandles übertragen und dann der tatsächliche Write ausgeführt.
Bei der Eingabe wird aus dem internen Puffer in die einzelnen Variablen übertragen.
Ein zentrales Programm, dass also auf irgendwelche Puffer zugreifen will, funktioniert bei RPG so gar nicht.
Hier hilft also nur, je Format eine DS zu definieren.
Der Compiler lehnt es aber ab, dass ein Feld in verschieden DS'n vorkommt, es sei denn du verwendest "qualified" in ILERPG.
Dies setzt jedoch eine entsprechende Definition in den F-Bestimmungen voraus.
Ausserdem ändert sich jeder Zugriff auf eine Variable, ob das denn nun der Übersichtlichkeit dient und die Programmierung vereinfacht ?
-
Mein api soll leisten:
egal welches Bildschirmfile ich definiere und wieviele DSPATR(&VARFELDER) ich in meiner Maske habe soll mein Api + Serviceprogramm alle diese Felder initialisieren.
Sprich mein Rpg-Programm wird aufgerufen, dann lese ich über ein eine Funktion alle &varfelder meiner Bildschirmmaske aus, ermittel die Speicheradresse und initialisiere diese Felder mit dem Wert x:20.
Wenn das Funktioniert kann ich diese INIT-&DSPATRFELDER in jeden Programm einbinden ohne das ich im Rpg auch nur eine Zeile mit definition und init schreibe.
-
Nunja, wie gesagt gibt es 2 Möglichkeiten:
a)
call 'MyInz'
parm MyAttr1
call 'MyInz'
parm MyAttr2
:
:
b)
MyAttr1 = x'20';
MyAttr2 = x'20';
-
Nun ja, wenn du MI beherrschst, kannst du mittels DTAPTR (steht nur in MI zur Verfügung) eine Adresse mit Feldtyp und Ausprägung definieren und per MI-Befehl mittels CPYBLA o.ä. verarbeiten.
Ich denke aber, dass das nicht die Lösung sein kann.
Wenn du mit reinen Zeichenfeldern arbeitest kannst du ja per "%subst(MyFeld: pos: len)" variabel zugreifen.
Mit gezonten numerischen Felder klappt das auch noch, bei gepackten Felder stößt du auf ein Problem.
Binärfelder lassen sich noch per Zwischenfeld verarbeiten.
Similar Threads
-
By mk in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 21-12-06, 08:56
-
By Xanas in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-08-06, 12:21
-
By cheffe1008 in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 16-05-06, 07:45
-
By steven_r in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-05-06, 11:01
-
By JonnyRico in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 25-04-06, 10:16
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks