毎日、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 続く ... 選択項目またはコマンド ===>
次回はこのメニューの使用方法を解説します。
