PDA

View Full Version : Feldkonstaten in CL-programmen mit DSPF



jppgmr
04-06-07, 13:38
Hallo,
wir wollen einen Teil unserer green-screen
anwendung mehrsprachig gestalten, da wir nur ein DSPF für mehrere Länder verwenden wollen! Da sind wir auf das Problem mit CL und DSPF gestoßen! Nun die Frage:
Wie kann man einem Feld eines DSPF variabel einen Wert zuweisen ?
z.B. variables Feld aus Tabelle Y1F01 wird dem Wert "Hauptmenü" zugewiesen, Y1F02 = "Beginn", usw.!

Vielleicht hat jemand eine Lösung parat!

Danke

Fuerchau
04-06-07, 14:05
Hierzu eignet sich am Besten ein MSGF.
In der DSPF werden die Textkonstanten per MSGID aus der MSGF zur Laufzeit geladen.

Durch unterschiedliche Sprach-MSGF's (Sprachlib oder per OVRMSGF) ist die Steuerung doch sehr einfach.

Zu deiner eigentlichen Frage:
In CLP geht das gar nicht, da du nur 1 Datei im CLP öffnen kannst.
Schreibe ein kleines RPG-Programm, dass die nötigen Aufgaben durchführt.

Im CLP dann eben:
call loadtext parm('ID1' &text)
chgvar &dspf1 &text
call loadtext parm('ID2' &text)
chgvar &dspf2 &text
:

Wie du siehst ganz schön aufwändig.

Da lob ich mir schon eher die MSGF, zumal ich das Ergebnis mit STRSDA OPTION(3) direkt betrachten kann.

jppgmr
04-06-07, 14:21
danke, habe ich verstanden !
Wir haben eben die ganzen Werte in einer Tabelle abgelegt ! Da mit den MSG-Konstanten ist auch eine Möglichkeit!

Bei Deinem Beispiel übergibst Du beim
Program "loadtext" jedoch fix den Feldnamen! Das wollte ich jedoch variabel machen! Ist das auch möglich??

D.h. ich lese mir alle Konstanten des DSPF variabel ein !

Fuerchau
04-06-07, 14:45
Nein das geht leider nicht.
Du kannst zwar per API die Feldnamen aus einer DSPF ermitteln (analog DSPFFD), aber wenn du dir dein CLP ansiehst, dann ist ja jede 'Konstante' eigentlich eine Variable, die durch DCLF automatisch definiert wird.

Variablen in CLP kannst du nur per CHGVAR bzw. durch ein CALL-Programm füllen (dabei gibts nichts variables).

Zu Laufzeit wird dann im SNDRCVF dann der interne Puffer aus den Inhalten zusammengstellt.

Das selbe gilt auch für (ILE)RPG. Erst zur Laufzeit erfolgt die Pufferzusammenstellung.

Bedenke auch, dass eine "Konstante" in mehreren Formaten vorkommen kann (was anderes macht da auch keinen Sinn), die Variable aber nur 1x vorhanden ist.

MSGF ist da immer noch die flexibelste Variante und bestimmt auch leichter zu warten.

loeweadolf
05-06-07, 22:59
Mit einem Programm die Quelle durchlesen und die Konstanten durch eine Variable ersetzen mit einer lfd. Nr., z.B.: $0001 etc.).

Die ehemaligen konstanten Texte in einer Datei abspeichern: Index = DSPF-Name, Format-Name und obige lfd. Nr.

Mit einem Programm die abgespeicherten Werte anzeigen und je nach Auswahl in eine andere Spache übersetzen.
Die Übersetzung in eine andere Datei speichern oder in derselben Datei mit Sprachenschlüssel.

Beim Progamm-Aufruf der Anwendung je nach Benutzer den Sprachenschlüssel ermitteln und die Variablen mit den Originaltexte oder den übersetzen Texten füllen.

Evtl. berücksichtigen:
Bei DSPF-Änderung:
Abgespeicherte Texte müssen wieder per Programm in das DSPF zurückgesetzt werden können.


Schwieriger wird es evtl. bei anderen Zeichensätzen, z.B.: polnisch etc.

Fuerchau
06-06-07, 10:03
Man kann sich auch ein Klavier ....

Ich weiß nicht, was gegen MSGF's spricht !?!