[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2017
    Beiträge
    12

    Question Gleichzeitige mehrsprachige Textbearbeitung

    Hallo,
    ich bin noch neu in RPG, knapp 10 Wochen, (aber schon 20 Jahre Programmierer) und bin damit konfrontiert in einer Maske (vielleicht sogar einem Feld) gleichzeitig mehrere Sprachen bearbeiten zu können. (Durch Tastaturumschaltung mal deutsch, kyrillisch oder chinesisch).
    Ich habe jetzt schon viel gelesen über den Zusammenhang von DB CCSID und JOB-CCSID und 5250-Ausgabe-Codepage sowie ucs2, bräuchte aber mal ein konkretes Beispiel für
    - DB-Spaltendefinition (SQL bitte)
    - DSPF-Felddefinition
    - RPG-Code für auslesen bzw. schreiben in DB
    Falls das hier zuviel verlangt ist, bitte klar mitteilen.

    Danke

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Da muss ich dich insoweit enttäuschen, dass die CA-5250 zwar UCS2 unterstützt, aber nur insoweit, dass die Ein-/Ausgabe in der eingestellten Hostcodepage (z.b.1141) erfolgt.
    Es kann sein (das habe ich noch nicht geprüft bzw. es hat hier noch keiner bestätigt), dass die neu 5250 Client Solution (Java) dies unterstützt.
    DB-Definition:
    varGRAPHIC(nn) CCSID 13488
    Ab V7:
    NvarCHAR(nn)

    ILERPG Feldtyp "C" = UCS2
    Für die Umwandlung CHAR vs UCS2 gibt es
    %char(FromUcs2)
    %ucs2(FromChar)

    DSPF/PRTF
    Feldtyp "G" mit CCSID 13488
    In der DSPF wird dann zur Laufzeit dann doppelt so viele Zeichen aus/eingegben obwohl man nur die Hälfte nutzen kann. Dies schränkt man dann aber mit CCSID(13488 *LEN nn), wobei nn dann die max. Ein-/Ausgabelänge ist:
    DSPUCS 40G B 11 21 CCSID(13488 *LEN 20)

    Wie gesagt, es erfolgt nur Ein-/Ausgabe in Hostcodepage.

    In der PRTF gilt die Unterstützung nur beschränkt bei *AFPDS und Ausgabe in eine PDF:
    A PRTUCS 20G 3 8FONTNAME('Monotype SansWT' +
    A (*POINTSIZE 10.0)) +
    A CCSID(13488 *NOCONVERT)

    Wobei hier True/OpenType-Fonts (vorher installiert) 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

  3. #3
    Registriert seit
    Sep 2017
    Beiträge
    12
    Danke schon mal.
    Meine Tests sind aber nicht weit gekommen.
    Unter 7.1 ergibt die DB-Def mit nvarchar letztlich vargraphic mit ccsid 1200, die alte version vargraphic mit ccsid 13488 (laut ddl generator).

    DB:
    alter table stestdb3 add column dspucs nvarchar(40)
    alter table stestdb3 add column dspucs2 vargraphic(40) ccsid 13488

    dspf:
    A R BEARBEIT
    A CF03
    A CF12
    A RTNCSRLOC(&PFMT &PFLD)
    A OVERLAY
    A PFMT 10A H
    A PFLD 10A H
    A DSPUCSF 40G B 9 16CCSID(13488 *LEN 20)

    sqlrpge:

    dcl-f UCSTESTF workstn(*ext) ;

    dcl-s wsdspucs ucs2(40);

    dou *inlr = *on;
    Exec Sql
    Select Dspucs2
    Into :Wsdspucs
    From Stestdb3 Where Idcol = 22;

    dspucsf=%char(wsdspucs);

    Exfmt Bearbeit;

    if *inkc = *on OR *inkl = *on;
    leave;
    ENDIF;

    ENDDO;

    *inlr=*on;


    Ergebnis:
    call ucstestr
    CPF5192 An Einheit QPADEV02GX gesendete Daten sind ungültig. Negativer Antwortcode ist 10050141.
    RNX1251 Permanenter E/A-Fehler in Datei UCSTESTF aufgetreten.
    RNQ1251 Permanenter E/A-Fehler in Datei UCSTESTF aufgetreten (C G D F).
    C
    RNQ1251 Permanenter E/A-Fehler in Datei UCSTESTF aufgetreten (C G D F).
    C
    CEE9901 Anwendungsfehler. RNX1251 nicht überwacht durch UCSTESTR bei Anweisung 0000006400, Instruktion X'0000'.

    Und nun?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    a)
    Dann hast du eine 5250-Emulation, die UCS2 nicht unterstützt.
    Mit der IBM-CA-5250 klappt das seit V6R1.

    b)
    dspucsf=%char(wsdspucs);
    Da doch DSPUCSF als UCS2 definiert ist (sollte in der Spoolauflösung vom Typ C sein), weiß ich nicht, warum du ein UCS2-Feld in Char zurückwandelst und das dann einem UCS2-Feld zuweist.
    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
    Sep 2017
    Beiträge
    12
    Meine CA-Version ist von IBM:
    11.0.8-B20130530
    Version: 1.1.5.1
    Build id: 6130
    March 21, 2016 12:31:47 PM GMT

    zu b) richtig, geht auch ohne die Zusatzvariable, ändert aber nichts am Ergebnis.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das kann nur damit zusammenhängen, dass dein Datenpuffer nicht korrekt initialisiert ist.
    UCS2-Unterstützung kam im Übrigen bereits mit V5R4.
    https://www.ibm.com/support/knowledg...akc/dspfil.htm
    Ggf. steht dein Job auch noch auf CCSID 65535 ? Dies kann ebenso zu Problemen führen.
    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
    Sep 2017
    Beiträge
    12
    in den Sitzungseinstellungen sind sowohl der Unicode-Datenstrom als auch DBCS in Unicodefeldern aktiviert. Gibts da noch mehr Einstellungen zu diesem Thema?
    Die Job-CSSID ist 1141 wie im Emulator auch.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    So, ich habe mir das Thema nochmal angesehen:
    Also, wenn du in der Konfiguration Unicode und DBCS ausgeschaltet lässt, dann funktioniert dies mit der DSPF genau so wie von mir beschrieben. Die Unicodedaten im Programm werden in SBCS umgesetzt und bei der Eingabe wieder in UCS2. Eine gleichzeitige Darstellung von anderen Sprachräumen führt u.U. zu falschen Zeichen oder dem Ersatz als "?".
    Zubeachten ist, dass die *LEN-Angabe in der CCSID die Anzahl Zeichen und nicht die Anzahl Bytes beschreibt. "DSPUCS 40G B 11 21 CCSID(13488 *LEN 40)" ist korrekt, da sonst 80 Stellen belegt werden (ist zwar blöd, aber es ist so).

    Sobald man aber Unicode in der Konfiguration aktiviert, funktioniert das Ganze nun nicht mehr, da die Unicodezeichen nun "as is" an das Device übertragen werden. Hierbei schlägt bereits ein Datenproblem zu, dass die Unicodezeichen ja x'00YY' enthalten und x'00' als ungültig im Datenstrom nun abgelehnt wird.

    Da in der Doku nun gar nichts zu finden ist, habe ichdann einfach mal was probiert:
    DSPUCS 40G B 11 21 CCSID(1200 *LEN 40)

    Man beachte die CCSID 1200, die als UTF-16 definiert ist und im RPGLE auch als Typ C mit CCSID 1200 umgewandelt wird, wobei dann die Hexdaten tatsächlich aber UCS2 und nicht UTF16 sind (verifizeirt),

    Und siehe da, dies funktioniert nun auch, da wohl für CCSID 1200 explizit die x'00'-Daten durchgelassen werden.
    Um nun auch tatsächlich auf dem Bildschirm alle Zeichen aus-, aber eben auch eingeben zu lassen, muss die Schriftart in der Emulation auf eine Unicode-Schrift geändert werden.
    Der Default IBM3270 reicht da nicht, da dies eine SBCS ist. Unbekannte Zeichen werden mit "?" ersetzt.
    Wenn man aber z.B. Courier-New wählt, lassen sich nun mit der Client-Solution-5250 auch tatsächlich alle Sprachen von der DB bis zum Terminal in Unicode UCS2 durchreichen, und zwar gleichzeitig!

    Noch mal zurück zur klassischen CA-5250.
    Unicode mit 1200 wird zwar von der Emulation unterstützt, es erfolgt aber auf jeden Fall eine Codewandlung in die Client-Hostcodepage. Eine gleichzeitige Darstellung verschiedener Sprachräume ist hier definitiv nicht möglich.
    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
    Sep 2017
    Beiträge
    12
    Schön, dass du dir so viel Mühe gibst. Ich habe die Hoffnung auch noch nicht aufgegeben, das mal zum Laufen zu bringen. Aktuell geht es aber immer noch nicht.

    //DB-col: "DSPUCS2" VARGRAPHIC(40) CCSID 13488

    dou *inlr = *on;
    Exec Sql
    Select Dspucs2 Into spucsf From Stestdb3 ;

    //dspf-zeile: A DSPUCSF 40G B 9 16CCSID(13488 *LEN 40)

    Exfmt Bearbeit;

    if *inkc = *on OR *inkl = *on;
    leave;
    ENDIF;

    Exec Sql Update Stestdb3 Set Dspucs2 = spucsf ;

    Enddo;

    *inlr=*on;

    Sitzungseinstellungen:
    Verbindung: UCS-Datenstrom aktivieren: nein
    DBCS ist dann automatisch "nein" und deaktiv
    Schriftart: Courier New
    OS: Windows 7

    Ergebnisse:
    - deutsche Zeichen werden korrekt dargestellt und korrekt gespeichert
    - russische Zeiehcn, die ich per RDi in die DB geschrieben habe erscheinen als Farbblock
    - russische Zeichen, die ich per 5250 eingebe landen als ? in der DB

    Hast du dein Beispiel bei dir mal konkret getestet? Also selbst gesehen und gemacht?

    LG, Martin

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ja natürlich;-)!
    Noch mal zur Korrektur:
    - Ändere die CCSID in der DSPF auf jeden Fall auf 1200!
    - Aktiviere in der 5250-Konfig den Unicode
    - Ändere in der 5250 die Schrift auf "Courier New", sieht zwar nicht so gut aus, ist aber ein Unicode-Font

    Und das funktioniert nur mit der Client-Solution-5250 und nicht mit der CA-5250!PS:
    Wie hast du denn die russischen Zeichen per RDi in die Datenbank bekommen?
    Meist funktioniert dies nämlich nicht. Hast du die auch als russisch wieder per SQL (z.B. in Excel) ausgelesen?
    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
    Sep 2017
    Beiträge
    12
    ES GEHT!!!

    In RDi rufe ich in der Perspektive "Database Development" die Tebllen auf. Rechte Maustaste auf die Tabelle "Daten -> Bearbeiten", Tastatur auf russisch umstellen und irgendwas in das feld schreiben, CTRL-S um zu speichern.
    Einen Zugriff mit Excel habe ich noch nie probiert. Mache das dann auch per RDi mit rechter Maustaste aber "Daten -> Alle Zeilen zurückgeben".

    DANKE

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Na denn viel Spaß nun. Andere lassen sich das einen Workshop von mir kosten;-).
    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. DB2- gleichzeitige Verbindungen einstellen?
    By as400frischling in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 12-12-13, 17:07

Tags for this Thread

Berechtigungen

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