[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2017
    Beiträge
    25

    RDI Variablenvorschlag bei verschachtelten Datenstrukturen

    Hallo Zusammen,

    ich habe leider keinen richtigen Titel finden können.
    Aktuell nutze in den RDI in Version 9.6.0.3.

    Folgendes ist mir im RDI aufgefallen:

    Definiere ich eine Datenstruktur z.B. :

    dcl-ds DS1 qualified;
    Field1 ind;
    end-ds;

    dcl-ds DS qualified;
    dcl-ds Input likeds(DS1);
    end-ds;

    Dann schlägt mir RDI bei jedem '.' die entsprechende DS vor, d.h.:
    DS. -> RDI schlägt 'Input' vor
    DS.Input. -> RDI schlägt 'Field1' vor

    Meiner Meinung nach genau das was man möchte!


    Definiere ich statt dessen folgendes:

    dcl-ds DS qualified;
    dcl-ds Input;
    Field1 ind;
    end-ds;
    end-ds;

    Dann schlägt mir RDI nur beim ersten '.' die entsprechende DS vor, d.h.:
    DS. -> RDI schlägt 'Input' vor
    DS.Input. -> RDI schlägt nichts vor.

    Beim Kompilieren werden aber beide Varianten erkannt.

    Ich finde die zweite Variante besser, weil ich bei dieser in der Gliederung von RDI nicht die unnötige DS1 als 'extra' DS sehe. Nur leider fehlt mir dann bei der zweiten Variante die Benutzerführung beim Eingeben der Variablen.

    Versteht ihr was ich meine?
    Ist das ein Fehler auf meiner Seite oder warum verhält sich RDI unterschiedlich!

    Gruß
    derMuller

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... zum RDI sag ich mal nix, aus Höflichkeit.
    Die "innere" DS, hat einen Gültigkeitsbereich genau von der "äußeren" DS und wird nur einmal benutzt, ist also logisch gesehen überflüssig (:= man könnte die Felder ebenso gut direkt in der "äußeren" DS deklarieren und einfacher ist immer besser.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Nov 2017
    Beiträge
    25
    Das ist ja auch nur ein Beispiel um das Problem zu erklären.
    Bei einer Struktur die mehrere Unterstrukturen hat ist der "innere" Gültigkeitsbereich nicht gleich mit dem "äußeren" Gültigkeitsbereich.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... wie das? Natürlich könnte ich innerhalb einer DS Kunde Lieferadresse und Bestelleradresse haben, müsste die aber nach Variante 2 doppelt beschreiben und könnte diese Beschreibung außerhalb nicht nochmals verwenden. Analog zur ersten Variante würde man die Struktur Adresse nur einmal beschreiben und innerhalb der Struktur zweimal mit likeds referenzieren. In den meisten Fällen gehören solche (Unter)Strukturen noch weiter hochgezogen, in eine Copystrecke Types oder Templates oder als (Pseudo) Datei zur Referenzierung als EDS.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Dieter,
    vielleicht solltest Du Dir die Erweiterung für verschachtelte Datenstrukutren, die (irgendwann) mit 7.2 gekommen sind, anschauen.

    Durch diese Erweiterung ist es eben nicht mehr erforderlich verschachtelte (Array-)Datenstrukturen über mehrere Referenz-Datenstrukturen, die dann mit LIKEDS in die übergeordnete Datenstruktur eingebunden werden müssen, zu definieren. Vielmehr kann man die ganze (verschachtelte) Datenstruktur in einem Schwung definieren. Diese Art von Datenstruktur-Definition wird vor allem im Zusammenhang mit XML-INTO verwendet. Bei stark verschachtelten Datenstrukturen ist das schon sehr hilfreich.

    Die beiden Datenstruktur-Definitionen des Kollegen derMuller liefern exakt die gleiche Datenstruktur.
    Es könnte sein, dass diese Erweiterung in RDi vorbeigegangen ist.

    Birgitta
    Birgitta Hauser

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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... vielleicht beschäftige ich mich schon länger mit dieser Problematik als RPG überhaupt daran denken ließ! Bei einer DS, die ein Array einer anderen DS enthält, sieht es auf den ersten Blick so aus, dass die Variante ohne LIKEDS einfacher wäre, aber spätestens wenn ich ein Element der ArrayDS in einer Parameterschnittstelle habe, muss ich dieselbe Struktur nochmal beschreiben, habe also 2 Beschreibungen derselben Struktur und das ist Murks.

    D*B

    PS: Gehen tut dies mit der Doppelbeschreibung übrigens nur, weil RPG keinerlei Typprüfungen für Datenstrukturen hat, sondern diese als binary Data behandelt.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das ist ja gerade der Vorteil der Typisierung, mittels Likeds Typen anzusprechen die ich dann überall wiederverwenden kann. Seit Einführung der Template-Anweisung spare ich mir also sogar den Platz.
    Und ich nehme mal an, an RDi ist die Änderung nicht vorbei gegangen sondern hält sich eher strikter an die Typisierung.
    Denn namenlose Typen wie "dcl ds;" sind in diesem Geschäft absolut kontraproduktiv.
    Außerdem: bis zu welcher Schachtelungstiefe soll RDi sch denn solche Bäume merken?
    Das ist eben der wesentliche Unterschied zwischen Objektorientierung und Spagettidenken.

    Ürigens, bei einer strengen Typisierung sollte Qualified standard sein, denn nur RPGLE behandelt ohne Qualified eingebettete Variablen als selbständig.

    Mach mal einen "dcl ds qualified;" und die siehst was passiert.
    Dies hilft im übrigen auch für XML-INTO, dass ich ohne likeds gar nicht vernünftig hätte definieren können.

    Und gerade wenn man mit XML arbeitet muss man bedenken, dass XML i.d.R. aus 2 Bestandteilen besteht.
    a) dem sog. Stylesheet, das die Struktur und Types definiert
    b) aus den reinen Nettodaten in XML-Form, die sich auf die Types beziehen
    Und gerade dadurch verbietet sich eigentlich eine Spagetti-Definition von Strukturen die unübersichtlich werden und, wie Dieter ja schon schrieb, in der Weiterverarbeitung erhebliche Schwierigkeiten bereiten.
    Spätestens mit der ersten Änderung/Erweiterung gibts dann das nächste Problem.
    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

  8. #8
    Registriert seit
    Oct 2013
    Beiträge
    171
    Ich halte das schlicht und ergreifend für einen Bug bzw. eine Feature-Schwäche und würde mich da eher an ein Forum halten, das die IBM auch liest.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nein, das ist in meinen Augen kein Bug.
    Wie tief soll die Verschachtelungsebene denn reichen?
    State-of-the-Art ist:
    Ein Typ (in diesem Fall Struct) hat entsprechende Felder. Wenn man diesen dann schachteln möchte dann macht es durchaus Sinn, den Typ als Prototyp/Template zu definieren und an entsprechender Stelle mittles likeds zu definieren.
    Eine Typ erst innerhalb eines anderen Types zu definieren macht wirklich keinen Sinn und das Ganze äußerst unübersichtlich.

    Was soll RDi denn sich bei deinem Konstrukt merken, da es das Feld "Input.Ind" ja so gar nicht gibt?
    Das Feld heißt ja "DS.Input.Ind"!
    Es ist halt ein Nachteil in RPGLE, dass solche Konstrukte überhaupt zulässig sind und das (tut mir leid) Spagetti-Denken fördern.
    Objektorientierte Sprachen können das so nämlich überhaupt nicht.

    "würde mich da eher an ein Forum halten, das die IBM auch liest.".
    Ich denke, da wirst du eher weniger fündig. Du kannst aber ein Feature-Request an die RDi-Entwicker senden:
    Intellisense für geschachtelte Strukturen bis 256 Ebenen.
    Weil bei nur 3-4 Ebenen kommt dann bestimmt einer, der das für seine 17te Ebene auch braucht da er den Faden verloren hat.
    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

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Objektorientierte Sprachen können das so nämlich überhaupt nicht.
    Ist zwar eine völlig andere Diskussion, der Präzision halber sei jedoch erwähnt, dass Java inner classes kennt. In OO Sprachen werden allerdings Daten und darauf operierende Methoden in Klassen zusammengefasst und eine inner class mit höchstens einer Methode würde gegenüber einer normalen Methode wenig leisten und lediglich die Komplexität vergrößern.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Oct 2013
    Beiträge
    171
    So tief, wie es der Compiler akzeptiert, soll es auch der Editor kapieren. Ganz einfach.

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Also gemessen an der Schreibarbeit ist ein Template und eine LikeDS-Definition nicht gerade so viel mehr Aufwand um nicht durch die Vorteile des RDi und die Übersichtlichkeit der Strukturen sowie Vereinfachung von Anapssungen und Erweiterungen aufgehoben zu werden.

    Die Schachtelungstiefe ist ja quasi beliebig, da man ja mittels Punkt-Notation durchaus Variablen über zig Zeilen adressieren kann.
    Ich nehme mal an, dass du zur Verarbeitung solcher Konstrukte auch ebenso viele geschachtelte For-Schleifen und/oder if-Strukturen verwendest;-).
    Denn für einen sinnvollen Umgang der Verarbeitung mit Funktionen und Prozeduren macht es eher Sinn als Parameter wiederum die Templates verwenden zu können.
    Mir persönlich ist es da eher lästig immer den gesamten Variablen-Baum zu benennen als sinnvolle Prozeduren mit Teilverarbeitung der Elemente zu stricken.

    Und wie oben schon mal erwähnt, gerade bei XML-Verarbeitung ist die explizite Benennung jedes geschachtelten Types erheblich einfacher.
    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. Webservice REST - lange Wartezeiten bei Datenstrukturen mit Dimensions
    By boonkelz in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 27-10-17, 12:16
  2. Datenstrukturen: Verhalten bei V7.3 geändert?
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 28-08-17, 13:52
  3. Datenstrukturen im free-format deklarieren
    By kretzsch in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 18-02-15, 12:03
  4. Vergleichen Feldinhalte von qualifizierten Datenstrukturen
    By it-dol in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-07-14, 14:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •