[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Nov 2006
    Beiträge
    38

    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

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    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.

  3. #3
    Registriert seit
    Nov 2006
    Beiträge
    38
    Zitat 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

  4. #4
    Registriert seit
    Sep 2006
    Beiträge
    162
    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

  5. #5
    Registriert seit
    Nov 2006
    Beiträge
    38
    Zitat 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 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 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 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 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

  6. #6
    Registriert seit
    Jan 2001
    Beiträge
    850
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Nov 2006
    Beiträge
    38
    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

  9. #9
    Registriert seit
    Jan 2003
    Beiträge
    759
    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

  10. #10
    Registriert seit
    Sep 2006
    Beiträge
    162
    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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    @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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Verwalten von Office-Dokumenten unter V5R2M0
    By WiK in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 26-06-06, 10:59
  2. Antworten: 12
    Letzter Beitrag: 04-01-06, 07:04
  3. GFC -> Faxe mit Outlook verwalten
    By Chrizz in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 25-11-05, 14:04
  4. SQL EXISTS Abfrage ausserhalb WHERE
    By mwithake in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 05-11-05, 09:15
  5. Zugriff auf AS400 von ausserhalb???
    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
  •