毎日、LINEや個人的なメールを送る人で絵文字を使わない人は
いないでしょう。
それほど絵文字は普及しています。
絵文字は感情表現だけでなく端的に意味をわかりやすく表現するのに
最適です。
IBM iでも絵文字を利用することができます。
絵文字はUnicodeでありUnicodeの中で絵文字のエリアが
割振られています。
IBM iでもリリース・アップに従ってUnicodeの利用が可能になってきました。
Unicode(ユニコード)とは世界各国の言語をひとつのコード体系で
表現するものとして考え出されたCCSIDです。
例えば英語の半角英文字と日本語の半角カナ文字はコードとして
重なっていることはご存知のとおりです。
しかしUnicodeではこのような重なりはありません。
多くの方が CCSID:1399 がUnicodeであると誤解していますが
CCSID:1399 はUnicodeとは全く関係ありませんし
これは後から追加された単なるEBCDICコードで使える漢字の文字数が
増えているだけです。
さてUnicodeがIBM iでも使用可能になったことで絵文字も使えることになります。
絵文字のUnicodeに対応するEBCDICコードはありませんので
Unicodeをそのまま保管することになります。
データ・ベースにはUnicodeを利用できるようにかるには次のように記述します。
[ DDS : BKENSHU ]
ソースはこちらから
0001.00 A********************************************** 0002.00 A* BKENSHU : 部品検収ファイル * 0003.00 A********************************************** 0004.00 A UNIQUE 0005.00 A R BKENSHUR TEXT(' 部品検収ファイル ') 0006.00 A*( 部品情報 ) 0007.00 A BKNCOD 12A COLHDG(' 部品コード ') 0008.00 A BKDATE 8S 0 COLHDG(' 検収日 ') 0009.00 A* 0010.00 A BKJUKO 7P 0 COLHDG(' 検収数 ') 0011.00 A BKTEKI 21G COLHDG(' 摘要 ') 0012.00 A CCSID(1200 *LEN 21) 0013.00 A BPHOTO 504A COLHDG(' 写真 ') 0014.00 A* 0015.00 A K BKNCOD 0016.00 A K BKDATE![]()
[解説]
0011.00 A BKTEKI 21G COLHDG(' 摘要 ') 0012.00 A
CCSID(1200 *LEN 21)
が Unicodeとなるフィールドです。
タイプは G(=Graphic)でなくてはなりません。
この例では21桁のUnicodeであり CCSID(1200) ( = UTF-16 )であることを
示しています。
定義可能なUnicodeのもうひとつは CCSID(13488) ( = UCS-2 )ですが
一般的には CCSID(1200)を指定します。
UTF-8 は使用することはできません。
IBM は Unicodeは UTF-16 であると考えているようですが
実際に世の中で標準的に使われているのは UTF-8 (CCSID(1208)です。
インターネットで公開されているHTMLの90%以上は UTF-8 のはずです。
また*LEN 21 は21桁で表示することを示しています。
これを指定しておかないとUnicodeは長く冗長に表示されてしまいます。
よくSEなどが雑誌でUnicodeの指定方法を解説していますが
ほとんどの技術者はIBMのマニュアルを読んでそのまま解説しているだけで
実践の経験がありません。
ですので *LEN を紹介しないのでそのまま作成すると
異様に長くフィールトが表示されてしまいます。
絵文字のUnicodeを入力するためのサンプル画面を紹介します。
部品検収の入力 入力 検収日 2121/08/07 部品コード WUK-0001 部品名 模型エンジン 検収数 1 摘要 ↓ボタンを押して検収品を撮影してください。 写真 /AS400-NET.USR/TEMP/ENGINE.PNG *END *CAMERA *PICTURE *UPDATE *PREV
これをAutoWeb゛表示すると次のようになります。
[解説]
摘要欄をご覧ください。スマイル・アイコンが摘要欄に表示されているので
絵文字が入力可能であることを示しています。
このスマイル・アイコンをクリツクすると絵文字のPOPUPウィンドウが表示されて
選択すれば絵文字が摘要欄に追加されます。
もちろん通常の文字と絵文字を混在させて表示して
それを更新してデータ・ベースに保管することができます。
次にDSPFのDDSを紹介します。
[ DSPF : CAMERADFM ]
ソースはこちらから
0001.00 A*%%TS SD 20210805 150710 QTR REL-V6R1M0 5761-WDS 0002.00 A*%%EC 0003.00 A DSPSIZ(24 80 *DS3) 0004.00 A MSGLOC(24) 0005.00 A PRINT 0006.00 A******************************************************************* 0007.00 A R DSPDTA01 0008.00 A******************************************************************* 0009.00 A*%%TS SD 20210805 150710 QTR REL-V6R1M0 5761-WDS 0010.00 A TEXT(' 明細画面 01') 0011.00 A CF03(03 ' 終了 ') 0012.00 A CF05(05 ' 撮影 ') 0013.00 A CF07(07 ' 画像 ') 0014.00 A CF10(10 ' 更新 ') 0015.00 A CF23(23 ' 削除 ') 0016.00 A CF12(12 ' 前画面 ') 0017.00 A ROLLUP(07) 0018.00 A ROLLDOWN(08) 0019.00 A SETOF(99) 0020.00 A BLINK 0021.00 A 1 2HTML('TEMPLATE=/AS400-NET.USR/TEMPL- 0022.00 A ATE/QTROBJ/CAMERA/CAMERAD.HTM') 0023.00 A 1 21' 部品検収の入力 ' 0024.00 A DSPATR(HI) 0025.00 A DSPMSG 6A O 1 53TEXT(' 保守モード ') 0026.00 A DSPATR(HI) 0027.00 A 2 40' 検収日 ' 0028.00 A BKDATE 8Y 0O 2 49EDTCDE(W) 0029.00 A 3 2' 部品コード ' 0030.00 A BKNCOD 12A O 3 17TEXT(' 部品コード ') 0031.00 A 4 2' 部品名 ' 0032.00 A BHNAME 20O O 4 17TEXT(' 部品名 ') 0033.00 A 5 2' 検収数 ' 0034.00 A BKNUKO 7Y 0B 5 17TEXT(' 検収数 ') 0035.00 A EDTCDE(K) 0036.00 A 6 2' 摘要 ' 0037.00 A BKTEKI 21G B 6 17TEXT(' 摘要 UNICODE *EMOJI') 0038.00 A DSPATR(PC) 0039.00 A CCSID(1200 21) 0040.00 A* 6 61'( 絵文字入力可 )' 0041.00 A 8 2' ↓ボタンを押して検収品を撮影して + 0042.00 A ください。 ' 0043.00 A DSPATR(HI) 0044.00 A 9 2' 写真 ' 0045.00 A BPHOTO 504A B 9 17TEXT(' 写真 =42 桁 * 12 行表示 *IMA- 0046.00 A GE') 0047.00 A CNTFLD(042) 0048.00 A* 0049.00 A F3FLD 2Y 0B 23 2PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0050.00 A TEXT(' 終了ボタン ') 0051.00 A PSHBTNCHC(1 '*END' CF03) 0052.00 A CAMERA 2Y 0B 23 10PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0053.00 A TEXT(' カメラ撮影 ') 0054.00 A PSHBTNCHC(1 '*CAMERA' CF05) 0055.00 A PICTURE 2Y 0B 23 21PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0056.00 A TEXT(' 画像の検索 ') 0057.00 A PSHBTNCHC(1 '*PICTURE' CF07) 0058.00 A UPDATE 2Y 0B 23 34PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0059.00 A TEXT(' 更新キー ') 0060.00 A PSHBTNCHC(1 '*UPDATE' CF10) 0061.00 A PREV 2Y 0B 23 47PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0062.00 A TEXT(' 戻る ') 0063.00 A PSHBTNCHC(1 '*PREV' CF12) 0064.00 A 22 2' - 0065.00 A ' 0066.00 A DSPATR(UL) 0067.00 ******************************************************************* 0068.00 A R DSPHEAD 0069.00 ******************************************************************* 0070.00 A TEXT(' 初期画面 ') 0071.00 A* 11:59:33 QSECOFR REL-R06M00 5714-UT1 0072.00 A CF03(03 ' 終了 ') 0073.00 A ROLLUP(07) 0074.00 A ROLLDOWN(08) 0075.00 A BLINK 0076.00 A 1 21' 部品検収の入力 ' 0077.00 A DSPATR(HI) 0078.00 A 2 40' 検収日 ' 0079.00 A BKDATE 8Y 0B 2 49 0080.00 A EDTCDE(W) 0081.00 A 3 2' 部品コード ' 0082.00 A BKNCOD 12A B 3 17TEXT(' 部品コード ') 0083.00 A 11 13' 部品コードを入れて + 0084.00 A 実行キーを押してください ' 0085.00 A DSPATR(HI) 0086.00 A F3FLD 2Y 0B 23 2PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0087.00 A TEXT(' 終了ボタン ') 0088.00 A PSHBTNCHC(1 '*END' CF03) 0089.00 ******************************************************************* 0090.00 A R ENDOPT 0091.00 ******************************************************************* 0092.00 A TEXT(' 終了画面 ') 0093.00 A CF03(03 ' 終了 ') 0094.00 A CSRLOC(LIN POS) 0095.00 A 1 34' 終了 ' 0096.00 A COLOR(PNK) 0097.00 A DSPATR(HI) 0098.00 A 3 2' 処理されたレコード数 ' 0099.00 A 5 10' 追加 . . . . . :' 0100.00 A ADDREC 5Y 0O 5 35EDTCDE(4) 0101.00 A 6 10' 変更 . . . . . :' 0102.00 A CHGREC 5Y 0O 6 35EDTCDE(4) 0103.00 A 7 10' 削除 . . . . . :' 0104.00 A DLTREC 5Y 0O 7 35EDTCDE(4) 0105.00 A 11 2' 選択項目を打鍵して,実行キーを押 + 0106.00 A してください。 ' 0107.00 A COLOR(BLU) 0108.00 A 13 5' データ入力の終了 . . . . . .' 0109.00 A ANS 1A B 13 39VALUES('Y' 'N') 0110.00 A 13 53'Y=YES, N=NO' 0111.00 A F3FLD 2Y 0B 23 2PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0112.00 A TEXT(' 終了ボタン ') 0113.00 A PSHBTNCHC(1 '*END' CF03) 0114.00 A PREV 2Y 0B 23 15PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 0115.00 A TEXT(' 戻る ') 0116.00 A PSHBTNCHC(1 '*PREV' CF12) 0117.00 A LIN 3S 0H 0118.00 A POS 3S 0H![]()
[解説]
摘要欄は
0036.00 A 6 2' 摘要 ' 0037.00 A BKTEKI 21G B 6 17TEXT(' 摘要 UNICODE *EMOJI') 0038.00 A DSPATR(PC) 0039.00 A CCSID(1200 21) 0040.00 A* 6 61'( 絵文字入力可 )'
としてデータ・ベースのDDSソースと同じようにUnicodeとして Gタイプのフィールドとして
定義されています。
次にRPGソースを紹介します。
[ RPG : CAMERAD ]
ソースはこちらから
0001.00 H DFTNAME(CAMERAD) DATEDIT(*YMD/)BNDDIR('QC2LE') 0002.00 F******** 部品検収の入力 **************************************** 0003.00 FCAMERADFM CF E WORKSTN 0004.00 FBUHINM IF E K DISK 0005.00 FBKENSHU UF A E K DISK 0006.00 F INFDS(INFDSF) 0007.00 F***************************************************************** 0008.00 * QTRSRC/QRPGLESRC(CAMERAD) 0009.00 * 使用目的 : 更新 (*UPDATE) 0010.00 * 作成日 : 2021/07/21 13:33:02 0011.00 * 作成者 : QTR 0012.00 0013.00 D IFR S 32 DIM(1) CTDATA PERRCD(1) 見出し 0014.00 D INFDSF DS QUALIFIED 0015.00 * オープン・フィードバック域 160 BYTES 81-240 0016.00 D OPNFBK 81 240 ファイル名 0017.00 D ODP_TYPE 81 82 ODP タイプ 0018.00 D FILE_NAME 83 92 ODP タイプ 0019.00 D LIBRARY 93 102 ODP タイプ 0020.00 D MEMBER 129 138 メンバー名 0021.00 0022.00 D*( WORK 日付 YYMMDD データ 構造 ) 0023.00 D DATEDS DS 0024.00 D SRY 1 2 0 0025.00 D SRYMD 1 8 0 0026.00 D YYMMDD 3 8 0 0027.00 D YYMM 3 6 0 0028.00 D MMDD 5 8 0 0029.00 D YY 3 4 0 0030.00 D MM 5 6 0 0031.00 D DD 7 8 0 0032.00 0033.00 D SAVEDS E DS EXTNAME(BKENSHU) 0034.00 D DSPDTA 1 1024 0035.00 D DIM(1024) 入力 データ 0036.00 0037.00 *[ 注意 ] 0038.00 * このプログラムはパラメータつきで呼び出すことができます。 0039.00 * パラメータなしで呼び出された場合は単独で動作します。 0040.00 C*----------------------------------------------------+ 0041.00 C *ENTRY PLIST | 0042.00 C PARM SEL001 0043.00 C PARM SEL002 0044.00 C*----------------------------------------------------+ 0045.00 C *LIKE DEFINE BKNCOD SEL001 0046.00 C *LIKE DEFINE BKDATE SEL002 0047.00 C IF %PARMS > 0 0048.00 C MOVE SEL001 BKNCOD 0049.00 C MOVE SEL002 BKDATE 0050.00 C GOTO GET_RECORD 0051.00 C ELSE 0052.00 C MOVEL 'WUK-0001' BKNCOD 0053.00 C MOVE SRYMD BKDATE 0054.00 C Z-ADD 1 BKNUKO 0055.00 C GOTO GET_RECORD 0056.00 C ENDIF 0057.00 C*----------------------------------------------------+ 0058.00 C RECKEY KLIST 0059.00 C KFLD BKNCOD 0060.00 C KFLD BKDATE 0061.00 C*----------------------------------------------------+ 0062.00 C*( 初期画面 ) 0063.00 C*----------------------------------------------------+ 0064.00 C START TAG | 0065.00 C EXFMT DSPHEAD | 0066.00 C*----------------------------------------------------+ 0067.00 C SETOFF 99 0068.00 C*( CF03 )- 終了 0069.00 C *IN03 IFEQ *ON CF03 0070.00 C SETON LR 0071.00 C LR EXSR LRRTN 0072.00 C LR RETURN 0073.00 C GOTO START 0074.00 C ENDIF 0075.00 C*( ROLLUP ) 0076.00 C *IN07 IFEQ *ON CF03 0077.00 C EXSR ROLLUP 0078.00 C 99 GOTO START 0079.00 C ENDIF 0080.00 C*( ROLLDWN ) 0081.00 C *IN08 IFEQ *ON CF03 0082.00 C EXSR ROLLDWN 0083.00 C 99 GOTO START 0084.00 C ENDIF 0085.00 C*( 実行キー ) 0086.00 C GET_RECORD TAG 0087.00 C *NOKEY CLEAR BKENSHUR 0088.00 C MOVEL IFR(1) BPHOTO 0089.00 C SETOFF 90 0090.00 C RECKEY CHAIN BKENSHU 90 0091.00 C N90 MOVEL ' 変更 ' DSPMSG 0092.00 C 90 MOVEL ' 入力 ' DSPMSG 0093.00 C EXSR CHECK 0094.00 C 99 GOTO START 0095.00 C*( 明細画面 ) 0096.00 C*----------------------------------------------------+ 0097.00 C DSPLY TAG | 0098.00 C EXFMT DSPDTA01 | 0099.00 C*----------------------------------------------------+ 0100.00 C SETOFF 99 0101.00 C*( CF03 )- 終了 0102.00 C *IN03 IFEQ *ON CF03 0103.00 C SETON LR 0104.00 C LR EXSR LRRTN 0105.00 C LR RETURN 0106.00 C GOTO DSPLY 0107.00 C END CF03 0108.00 C*( CF12 )- 前画面 0109.00 C *IN12 IFEQ *ON CF12 0110.00 C SETOFF 12 0111.00 C GOTO START 0112.00 C END CF12 0113.00 C*( CF10 )- 更新 0114.00 C *IN10 IFEQ *ON CF10 0115.00 C SETOFF 10 0116.00 C EXSR CHECK 0117.00 C 99 GOTO DSPLY 0118.00 C*----------------------------------------------------+ 0119.00 C 90 WRITE BKENSHUR | 0120.00 C N90 UPDATE BKENSHUR | 0121.00 C*----------------------------------------------------+ 0122.00 C 90 ADD 1 ADDREC 0123.00 C N90 ADD 1 CHGREC 0124.00 C GOTO START 0125.00 C END CF10 0126.00 C*( CF23 )- 削除 0127.00 C *IN23 IFEQ *ON CF23 0128.00 C SETOFF 23 0129.00 C*----------------------------------------------------+ 0130.00 C N90 DELETE BKENSHUR | 0131.00 C*----------------------------------------------------+ 0132.00 C N90 ADD 1 DLTREC 0133.00 C GOTO START 0134.00 C END CF23 0135.00 C*( ROLLUP ) 0136.00 C *IN07 IFEQ *ON CF03 0137.00 C EXSR ROLLUP 0138.00 C 99 GOTO DSPLY 0139.00 C ENDIF CF12 0140.00 C*( ROLLDWN ) 0141.00 C *IN08 IFEQ *ON CF03 0142.00 C EXSR ROLLDWN 0143.00 C 99 GOTO DSPLY 0144.00 C ENDIF 0145.00 C*( 実行キー ) 0146.00 C GOTO DSPLY 0147.00 C* 0148.00 C END TAG 0149.00 C****************************************************** 0150.00 C *INZSR BEGSR 0151.00 C****************************************************** 0152.00 C* 初期サイクルのみの実行 0153.00 C Z-ADD 21 SRY 0154.00 C MOVE UDATE YYMMDD 0155.00 C INZEND ENDSR 0156.00 C****************************************************** 0157.00 C CHECK BEGSR 0158.00 C****************************************************** 0159.00 C*( 明細チエック ) 0160.00 C SETOFF 99 0161.00 C BKNCOD CHAIN BUHINM 99 0162.00 C CHKEND ENDSR 0163.00 C****************************************************** 0164.00 C LRRTN BEGSR 0165.00 C****************************************************** 0166.00 C MOVE 'Y' ANS 0167.00 C*----------------------------------------------------+ 0168.00 C ENDDSP TAG | 0169.00 C EXFMT ENDOPT | 0170.00 C*----------------------------------------------------+ 0171.00 C*( CF03 )- 終了 0172.00 C *IN03 IFEQ *ON CF03 0173.00 C SETON LR 0174.00 C RETURN 0175.00 C END CF03 0176.00 C*( CF12 )- 前画面 0177.00 C *IN12 IFEQ *ON CF03 0178.00 C SETOFF LR 0179.00 C LEAVESR 0180.00 C END CF03 0181.00 C*( 実行キー ) 0182.00 C SETON LR 0183.00 C RETURN 0184.00 C ENDSR 0185.00 C****************************************************** 0186.00 C ROLLUP BEGSR 0187.00 C****************************************************** 0188.00 C SETOFF 07 0189.00 C RECKEY SETGT BKENSHU 0190.00 C READ BKENSHU 61 0191.00 C 61 SETON 99 0192.00 C ENDSR 0193.00 C****************************************************** 0194.00 C ROLLDWN BEGSR 0195.00 C****************************************************** 0196.00 C SETOFF 07 0197.00 C RECKEY SETLL BKENSHU 0198.00 C READP BKENSHU 61 0199.00 C 61 SETON 99 0200.00 C ENDSR 0201.00 FR 0201.00 ** IFR 0202.00 /AS400-NET.USR/TEMP/ENGINE.PNG![]()
[解説]
RPG にはUnicodeであるからと言って特別な処理は何もありません。
通常のデータ・ベース更新のRPGプログラムとして見るだけで十分です。
ところでこのようなDSPFソースやRPGソースは実はAutoWeb提供のGO AUTOWEBメニューで
生成できることをご存知でしょうか?
典型的なDSPFソースやRPGソースをいちいち開発していたのでは大変です。
多くのお客さまでは社内でソースのコピーで賄っておられるところもありますが
それでも正確なソースを短時間で生成することはできません。
AutoWebの機能をご利用ください。
AUTOWEB AUTOWEB メニュー システム : Sxxxxxxx 次の中から1つを選んでください。 WEB 化プログラム開発 31. 5250 ハンドラーの追加 ADD5250HLR 32. 拡張表示装置ファイルの作成 CRTEXDSPF 33. プログラムの WEB 呼出し CALLWEB 34. グラフ作成 CRTGRAPH APP.WIZARD でプログラムを自動生成する 41. DSPF ソースの生成 CRTDSPSRC 42. PRTF ソースの生成 CRTPRTSRC 43. RPG ソースの生成 CRTRPGSRC 44. MENU ソースの生成 CRTMNUSRC 45. プロンプト PGM の追加 ADDPMTPGM 続く ... 選択項目またはコマンド ===>
次回はこのメニューの使用方法を解説します。