[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2008
    Beiträge
    83
    Zitat Zitat von camouflage Beitrag anzeigen
    So wie ich es verstehe, musst du statischen Text welchen du an ein Dokument anhängst, verarbeiten.
    Wieso machst du nicht dafür für jede Sprache ein IFS-File, welches du dann mit UTF8 oder was auch immer einlesen kannst. Damit du das File in der Anwendung findest, kannste ja immer noch eine Tabelle mit Sprache/Ablageort erstellen. (Google: Klement IFS)
    Danke für die Idee. Es sind aber leider ein paar zu viele Texte, als dass ich diese Lösung präferieren würde.



    Zitat Zitat von Fuerchau Beitrag anzeigen
    Kommt immer drauf an, wie komplex man die Aufgabe versteht.
    Sicherlich kann ich die DPSF mit dem Typ G13488 die Eingabe und Ausgabe der Terminalcodepage in das Programm in UCS2 bekommen und mit der DB verwalten.
    Für alle Nicht-G-Felder gilt aber weiterhin, dass der Job in Terminal-CCSID sein muss und die Konvertierbarkeit von/zur DB gewährleistet sein muss.
    Dies funktioniert ausschließlich mit kompatiblen CCSID.
    Job 870 und DB 273 scheitert einfach, dann ist eben UCS2/Unicode erforderlich.

    Wenn ich dies beherzige und die gleichzeitige Darstellung von ost-/west-/sonstigen Sprachen nicht erforderlich ist, kann man das durchaus machen.
    Wie kann man das machen?

    Ich kann das Programm so gestalten, dass immer nur eine Sprache erfasst werden kann. Die Sprache steht auch mit in der PF.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Voraussetzung ist natürlich, dass die Jobumgebung zum User passt.
    Da kann man über die Spracheinstellung im USRPRF und Systemwerte entsprechende Einstellungen für die automatische Anpassung der Job-CCSID machen.
    Die 5250-Sitzung des Users muss dann ebenso der Sprache zugeordnet sein.
    Beispiel:
    User Deutsch = Job 273 = Codepage 1141
    User Französisch = Job 297 = Codepage 1147
    User Polnisch = Job 870 = Codepage 1153

    Alleine durch die Möglichkeit, dass der Job mal in 273/297 (Westeuropa) oder in 870 (Osteuropa) sein kann, darf die DB nicht mit 273 erstellt sein.
    Neutrale Zeichenfelder, also invariante Zeichen, sollten in 65535 erstellt werden (hier gibts aber ODBC-Probleme), alle anderen Zeichenfelder müssen in Unicode (UCS2/UTF16) erstellt werden.
    Dann kann man durchaus zwischen Unicode und DSPF (nicht Unicode) Daten austauschen.
    Wichtig ist natürlich, dass bei der falschen CCSID-Quelle (also deutschen Daten auf polnischen Sitzungen und umgekehrt) Verfälschungen passieren.
    Wenn du die Sprache in der PF hast, kannst du ja eine Änderung der Daten ablehnen, eine Anzeige wäre da unschädlich.

    Ein generelles Problem hast du natürlich mit dem Rest der Anwendung.
    Schließlich müssen sich alle Programme wärend der Sitzung so verhalten. Du kannst es nicht auf eine Datei beschränken.
    Sobald ein Programm in einer Umgebung (Job 870, Datei 273) aufgerufen wird, fällt der Open schon auf die Nase.
    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

  3. #3
    Registriert seit
    Apr 2008
    Beiträge
    83
    Danke für die Antwort. Ich hatte deinen letzten Kommentar so verstanden, dass es nicht nur um die Darstellung, sondern auch um die Änderbarkeit in verschiedenen Sprachen geht. Also unabhängig von der Sitzungs- und Job-Einstellung. Habe ich dann falsch verstanden.

    Diese Lösung werde ich wohl einsetzen. Anzeige immer, Ändern nur bei bestimmten Sprachen. Die anderen Sprachen werden wir dann erst mal mit SQL "erfassen" und dann später mal mit einem .NET-Programm.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Auch da musst du allerdings aufpassen!
    Machst du z.B. im iSeries Navigator per SQL einen

    insert into mytable (text) values('griechische zeichen')

    Wird der reine SQL-Text als SBCS an die AS/400 übergeben und mit der Default-CCSID (bei QCCSID 65535 wird dies ggf. 037 sein) übergeben und damit geht dein kyrillisch verloren.
    Auch wenn ich mich nun selber bewerbe, du kannst es mit meinem Upload/400 tun:

    Erfasse die Fremdsprachen entsprechend in Excel (das kann Unicode), lege die sprachspezifischen Felder als Unicodefelder (UCS2) an und lade die Daten dann per Upload/400 auf die AS400.
    Dann bleibt es auch Unicode / UCS2.
    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

  5. #5
    Registriert seit
    Apr 2008
    Beiträge
    83
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wird der reine SQL-Text als SBCS an die AS/400 übergeben und mit der Default-CCSID (bei QCCSID 65535 wird dies ggf. 037 sein) übergeben und damit geht dein kyrillisch verloren.
    Wie kann ich das prüfen? Ich hatte es nämlich genau so getestet, wie du das oben beschrieben hast und danach passten die Daten. Die Ausgabe mit select sah genauso aus, wie ich es eingegeben hatte.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    a) mit welchem Programm (STRSQL, also 5250, Navigator)
    b) CCSID's der Datei, des Jobs, ggf. Connection-Einstellung

    Alternativ muss per Navigator auch "insert into MyTable (Text) values(N'Sprachtext')" funktionieren.
    Die Konstante in N'...' wird als UTF16 interpretiert und das Zielfeld sollte auch N[VAR]CHAR definiert sein.
    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

  7. #7
    Registriert seit
    Apr 2008
    Beiträge
    83
    Über den Navigator, wie du geschrieben hattest.

    Der Job hat CCSID 273.
    Die Datei zeigt über DSPFD keine CCSID, da es verschiedene sind.
    Die betroffene Spalte zeigt über DSPFFD:
    ID des codierten Zeichensatzes . . . . . : 13488
    UCS2- oder Unicode-Konvertierung . . . . : *CONVERT
    Die Spalte ist im DDS definiert als:
    A TEST 100G CCSID(13488)

    Im Navigator selbst habe ich nur diese Daten gefunden. An der Connection selbst sehe ich nichts entsprechendes. Gibt es noch mehr?
    Die JDBC-Eigenschaften aus "SQL-Prozeduren ausführen" zeigen package ccsid: 13488
    SQL-Details für Job zeigt nach einem Insert, die Anweisungs-CCSID 273 an. Nach einem Select die 13488.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    OK, da der Navigator ja mit Java umgeht, wird es wohl so sein, dass der SQL als UCS2-String an die AS/400 gesendet wird. Im OLEDB/ODBC ist das nämlich nicht standard.
    Nur so zur Sicherheit kannst du die Konstanten ja trotzdem mal mit N'...' auf UCS2 erzwingen.
    Dies sollte dann mit jeder Anwendung funktionieren, wenn keine Parametermarker verwendet werden können.
    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

  9. #9
    Registriert seit
    Apr 2008
    Beiträge
    83
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Im OLEDB/ODBC ist das nämlich nicht standard.
    Gut zu wissen (für später). Worauf muss ich da achten? Ist das die Einstellung "CCSID für SQL-Anweisung"?

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das weiß ich nicht auswendig, schau mal in die Doku:
    http://www-01.ibm.com/support/docvie...d=nas8N1017400
    Ggf. gibts da auch schon eine neuere.
    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

  11. #11
    Registriert seit
    Apr 2008
    Beiträge
    83
    Ich habe ein unerwartetes Problem mit der PRTF. Glaube ich.
    Ich hatte zu dem Thema einiges gelesen und dachte es müsste so funktionieren.
    Ich habe das erst mal auf ein sehr einfaches Beispiel heruntergebrochen.

    PF:
    PHP-Code:
         A          R TESTPFA                 
         A            TEST         100G         CCSID
    (13488
    PRTF:
    PHP-Code:
         A          R TEST
         A            TEXT         100G        1FONTNAME
    ('Monotype Sans WT SC' +
         
    A                                      (*POINTSIZE 12.0))
         
    A                                      CCSID(13488 *NOCONVERT)
         
    A                                      SPACEA(1
    CRTPRTF mit DEVTYPE(*AFPDS)

    Auszug aus RPG:
    PHP-Code:
           setll 1 TESTPF.TESTPFA;
           for 
    1 to 24;
             
    read TESTPF.TESTPFA DS_TESTPF;
             
    DS_TESTPRTF.TEXT DS_TESTPF.TEST;
             
    write TESTPRTF.TEST DS_TESTPRTF;
           endfor; 
    Die PF habe ich dann wie vorher erwähnt per SQL mit Daten gefüllt. Per select sieht der Inhalt gut aus.

    Der erzeugte Spool ist aber nicht lesbar. Ich nahm an, das wäre normal, wegen der UCS-Daten. Aber es soll wohl nicht normal sein.
    Was mache ich hier noch falsch?

Similar Threads

  1. verschiedene Jobs gleiche Datei, schreib / lese konflikt?
    By dibe in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 25-02-16, 15:33
  2. Savefile in / auf virtuelles Bandlaufwerk speichern
    By DEVJO in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 11-09-15, 18:45
  3. Bildschirmanzeige als Text speichern
    By petzi-mg in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 06-11-14, 07:51
  4. verschiedene ALTE Sachen...
    By HEMO in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 03-04-03, 14:20
  5. Druck Unterschriften über PRTF
    By alex in forum NEWSboard Drucker
    Antworten: 4
    Letzter Beitrag: 14-03-02, 17:26

Berechtigungen

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