-
Kostanten ausserhalb vom Prog verwalten?
Hallo,
ich bin neu hier und beschäftige mich erst seit kurzer Zeit mit RPG. Bin selber Informatiker und komme aus C, JAVA, HTML, ... Ich habe nun mein erstes RPG4 Programm fertig und gleich eine Frage dazu.
Ich habe im Programm selber Kostanten definiert, die ich benötige. Problem: Wenn sich eine Kostante mal ändert, muss das Programm neu umgewandelt werden. Also dachte ich ich lege die Werte in einer Externen Datei ab. Nur wie genau gehe ich da vor? Gibt es dafür irgendwelche Ideen/Konzepte? Oder reicht dafür eine PF Tabelle, die ich dann im Prog auslese? Vielleicht könnt ihr mir mal schreiben, wie ihr so etwas löst? Vielen Dank vorab
Robert
-
Moin und willkommen.
So etwas in eine PF abzulegen, halte ich durchaus für einen möglichen Weg.
Wie immer auf der AS/400 gibt es viele Wege.
So grundsätzlich scheint mir das aber eher eine Designschwäche in Deinem Konzept zu sein, denn ne Konstante die sich immer mal wieder ändert, ist ja keine echte Konstante, gell?
k.
-
 Zitat von kuempi von stein
Moin und willkommen.
So etwas in eine PF abzulegen, halte ich durchaus für einen möglichen Weg.
Wie immer auf der AS/400 gibt es viele Wege.
So grundsätzlich scheint mir das aber eher eine Designschwäche in Deinem Konzept zu sein, denn ne Konstante die sich immer mal wieder ändert, ist ja keine echte Konstante, gell?
k.
Ok du hast natürlich recht. Ich denke die Konstanten werden sich nicht sehr oft ändern. Mein Programm greift über TCP auf eine externe Seite zu. Da habe ich natürlich keinen Einfluss auf die Werte. So wäre es doch einfacher so etwas ausserhalb des Programms zu speichern, um Änderungen schnell einzupflegen.
Nebenbei wollte ich dies nutzen, um mehr RPG zu erlernen ;-)
Robert
-
Ich denke, dein Ansatz ist richtig. Es geht hier weniger um Designschwäche sondern um "'rumspielen" und du möchstest einige Vorschläge.
Also erster Vorschlag: Du arbeitest mit Übergabeparamter. Du definierst mit
*ENTRY eine Übergabeliste und damit übergibst du an deinem RPG die Werte die er benötigt.
Zweiter Vorschlag, du legst die Werte in einer *DTAARA und liest zur Laufzeit die *DTAARA mit *NAMVAR und danach IN zur Laufzeit. Änderungen an der *DTAARA werden, werden mit CHGDTAARA durchgeführt.
Dein Vorschlag, das ganze in einer Datei. Ist grundsätzlich möglich, aber du musst die Daten in der Datei auch pflegen, oder ?
Dafür brauchst du ein Pflegeprogramm (mußt es schreiben) oder du pflegst mit STRDFU (Standard) oder du pflegst mit SQL-Update.
Wie gesagt, es gibt viele Möglichkeiten zur Lösung. Die Frage ist immer diesselbe: Wieviel Aufwand will ich 'reinstecken??
Gruß
DVE
-
 Zitat von DVE
Ich denke, dein Ansatz ist richtig. Es geht hier weniger um Designschwäche sondern um "'rumspielen" und du möchstest einige Vorschläge.
ja irgendwie hast du recht :-)
 Zitat von DVE
Also erster Vorschlag: Du arbeitest mit Übergabeparamter. Du definierst mit
*ENTRY eine Übergabeliste und damit übergibst du an deinem RPG die Werte die er benötigt.
An Übergabeparameter habe icha uch schon gedacht, aber dann muss man die immer mitschleppen.
 Zitat von DVE
Zweiter Vorschlag, du legst die Werte in einer *DTAARA und liest zur Laufzeit die *DTAARA mit *NAMVAR und danach IN zur Laufzeit. Änderungen an der *DTAARA werden, werden mit CHGDTAARA durchgeführt.
Das hört sich interessant an. Was hat es mit *DATAARA auf sich? Habe bis jetzt ncoh nicht davon gehört.
 Zitat von DVE
Dein Vorschlag, das ganze in einer Datei. Ist grundsätzlich möglich, aber du musst die Daten in der Datei auch pflegen, oder ?
Dafür brauchst du ein Pflegeprogramm (mußt es schreiben) oder du pflegst mit STRDFU (Standard) oder du pflegst mit SQL-Update.
Ok, das mit der Datei ist doch nciht so der richtige Weg. Viel zu viel Aufwand mit dem Pflegeproggi.
 Zitat von DVE
Wie gesagt, es gibt viele Möglichkeiten zur Lösung. Die Frage ist immer diesselbe: Wieviel Aufwand will ich 'reinstecken??
Gruß
DVE
Hey DVE, Danke für deine Infos. Bei der Pflege soll möglichst wenig Aufwand getrieben werden.
Robert
-
Hallo Robert,
eine beliebte Art der Konstantenverwaltung ist die Message File.
Damit können Texte sehr schön veraltet werden.
Ein Verwaltungsprogramm bringt die AS400 schon mit.
Mit CRTMSGF wird eine Messagefile erstellt
Mit WRKMSGF kann diese bearbeitet werden
Mit einem kleinen CL Programm können Nachrichten z.B. über den CL Befehl RTVMSG variable in dein Programm geholt werden.
Schau es Dir mal an.
Ist eine einfache Sache und es gibt keine Konstanten mehr
in deinem Programm.
Gruss
Michael
-
Hallo,
warum erstellst Du Dir nicht einfach für jede Konstante eine Funktion die nichts anderes macht als den Konstantenwert auszugeben. Am einfachsten ist, Du hinterlegst alle Funktionen in der gleichen Teildatei und erstellst daraus ein Service-Programm.
Anstatt in Deinen Programmen die Konstanten zu verwenden rufst Du die entsprechende Prozdur auf. Sollte sich der Konstantenwert einmal ändern, musst Du lediglich den Rückgabewert Deiner Funktion ändern und das Service-Programm neu erstellen.
Birgitta
-
Hallo Birgitta, Hallo Michael,
Danke für eure Ideen.
@Birgitta:
Das ist ne Idee, aber so etwas nutze ich nicht so gerne. Damit komme ich ums Umwandeln nicht herum und dann kann ich es auch direkt im Programm stehen lassen. Trotzdem Danke.
@Michael:
Das mit den MessageFiles habe ich ausprobiert, aber auch davon habe ich kaum Ahnung. Gibt es dazu noch mehr informationen, wie und was ich da hinein schreiben muss?
Gruß Robert
-
Halloooo,
in der Zeit, die bis jetzt verbraten wurde hätte auch ein /Copy entstehen können.
Entscheidungsparameter:
- die meisten Alternativen deuten Richtung Umwandlung
- CLs und Procedures gefallen nicht
- /Copys können gemäß *LIBL je nach Bedarf unterschiedlich sein
- sind zentral leicht zu verwalten
- können in beliebig viele Programme eingebunden werden
- können/sollten eine als Kommentar getarnte, interpretierbare Umwandlungsanweisung für betroffene Programme enthalten (so ein Tool schreibt man nur einmal im Leben - oder kauft eine teure CASE-Anwendung die dann /Copys innerhalb /Copys nicht erkennt ;-)
Grüße,
Robert
-
Hallo Robertki,
leider hatte ich gestern schlechteres zu tun als in diesem Forum produktiv zu arbeiten.
Wie du gesehen hast, viele Meinungen aber keine Ausführung zu *DTAARA. Der Grund ist ziemlich einfach, *DTAARA und RPG sind "exotisch".
Trotzdem hier ein bisschen was zum spielen.
Du hast gefragt was *DTAARA sind, nun es sind Datenbereiche die du erstellen und benutzen kannst.
Die Befehle dazu lauten CRTDTAARA (*DTAARA Erstellen), DSPDTAARA (Anzeigen), CHGDTAARA (Inhalt der *DTAARA ändern), DLTDTAARA (*DTAARA löschen) und RTVDTAARA(Inhalt holen). Bis auf RTVDTAARA (nur im CLP-Programm nutzbar) können alle Commandos in Programm und Befehlszeile eingesetzt werden.
Zunächst erstellst du eine *DTAARA mit
CRTDTAARA DTAARA(MYLIB/MYARA) TYPE(*CHAR) LEN(2000). Der Wert Type definiert ob die *DTAARA *CHAR oder *DEC (Dezimal)ist. Ich persönlich benutze nur *DTAARA vom Typ *CHAR, weil sie mit DSPDTAARA leichter zu lesen sind. Die Länge ist Variabel (min 1 max 2000 Zeichen).
Mit dem Befehl CHGDTAARA DTAARA(MYLIB/MYARA (1 9)) VALUE('ANTON1997') kannst du den Inhalt der *DTAARA anpassen. Hier wird ab der Position 1 in der Länge 9 ANTON1997 in die *DTAARA reingeschrieben.
Jetzt kommt dein RPG-Programm
PHP-Code:
IINARA DS 2000
I 1 5 INAME
I 9 90IJAHR
C *NAMVAR DEFN MYARA INARA
C IN INARA
C SETON LR
Wenn du im Debug Modus das Programm ausführst und dir die Felder INAME und IJAHR anschaust, haben diese den Wert ANTON bzw. 1997.
mit *NAMVAR definierst du die *DTAARA und mit IN liest du die *DTAARA in die Datenstruktur INARA. Die Felder INAME und IJAHR sind bestandteile dieser Datenstruktur.
Da das Einlesen zur Laufzeit passiert, kannst du den Inhalt der *DTAARA mit CHGDTAARA jederzeit anpassen und dein Programm hat genau die "Constanten" die du haben möchtest.
Also dann, viel Spaß beim Spielen.
Gruß
DVE
-
Hallo,
du kannst das auch auf die Java Tour in einem Propertie File ablegen, auf meiner Open Source Seite gibt es da ein Serviceprogramm PROPERTIES
mfg
Dieter Bender
 Zitat von robertki
Hallo,
ich bin neu hier und beschäftige mich erst seit kurzer Zeit mit RPG. Bin selber Informatiker und komme aus C, JAVA, HTML, ... Ich habe nun mein erstes RPG4 Programm fertig und gleich eine Frage dazu.
Ich habe im Programm selber Kostanten definiert, die ich benötige. Problem: Wenn sich eine Kostante mal ändert, muss das Programm neu umgewandelt werden. Also dachte ich ich lege die Werte in einer Externen Datei ab. Nur wie genau gehe ich da vor? Gibt es dafür irgendwelche Ideen/Konzepte? Oder reicht dafür eine PF Tabelle, die ich dann im Prog auslese? Vielleicht könnt ihr mir mal schreiben, wie ihr so etwas löst? Vielen Dank vorab
Robert
-
@DVE
DTAARA und RPG sind überhaupt nicht "exotisch" sondern gehören zum Standard von RPG !
IMYDTA UDS
I ....
Bei Programm-Start wird die DTAAARA automatisch gelesen, ggf. vorher sogar erstellt.
Bei Programm-Ende mit *LR=*ON wird diese sogar automatisch upgedatet.
Mit *NAMVAR benenne ich diese nur anders und kann sie mittels "IN" lesen und "OUT" schreiben.
Gegen konkurierende Updates kann ich sie auch noch mit LOCK/UNLCK behandeln.
Similar Threads
-
By WiK in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 26-06-06, 10:59
-
By hva in forum NEWSboard Server Job
Antworten: 12
Letzter Beitrag: 04-01-06, 07:04
-
By Chrizz in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 25-11-05, 14:04
-
By mwithake in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 05-11-05, 09:15
-
By Rolf7856 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 15-02-02, 07:56
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