ステップ5. Start Date列の書式を設定する
現在のソリューションには、Start Date列の書式が設定されないという問題があります。Start Dateは、符号付きの数値フィールドに基づきます(長さは6桁)。このステップでは、Start Date列を日付タイプのフィールドに変換し、作業リストに入れます。また、ExcelのStart Date列の書式を日付セルとして設定することもできます。
1. ファイルからSTARTDTERを読み込んで変換し、作業リストに日付作業フィールドを入れます。読み込むフィールドのGROUP_BYを挿入してSELECTコマンドでこれを使用するようにファンクションを変更します。コードは以下のようになります。
GROUP_BY NAME(#EMP_GRP) FIELDS(#empno #surname #givename #startdter #phonehme #salary)
. . . . .
SELECT FIELDS(#EMP_GRP) FROM_FILE(pslmst1) WITH_KEY(#deptment #section) NBR_KEYS(*compute)
2. 作業リストで、フィールドSTARTDTERをSTD_DATEXで置き換えます。
3. SELECTループ内で、以下の操作を行うロジックを追加します。
· STARTDTERが日付(YYMMDD形式)かどうかを確認する。
· 日付(YYMMDD形式)の場合、STARTDTERをフィールドSTD_DATEXに変換する。
· 日付(YYMMDD形式)ではない場合、STD_DATEXを*SQLNULLに設定する。
コードは以下のようになります。
CLR_LIST NAMED(#employs)
SELECT FIELDS(#EMP_GRP)
FROM_FILE(pslmst1) WITH_KEY(#deptment #section) NBR_KEYS(*compute)
IF
(#STARTDTER.IsDate( YYMMDD ))
#Std_Datex := #STARTDTER.AsDate( YYMMDD
)
ELSE
#Std_Datex := *SQLNULL
ENDIF
ADD_ENTRY
TO_LIST(#employs)
ENDSELECT
4. EMPLOYSのDEF_LISTコマンドを変更し、フィールド LISTCOUNTを使ったカウンターを入れます。コードは以下のようになります。
Def_List Name(#employs) Fields(#empno #givename #surname #STD_DATEX #PHONEHME #salary) Counter(#listcount) Type(*working) Entrys(100)
5. Start Date列の書式を日付として設定するDEFINEコマンドを追加します。コードは以下のようになります。
* Format Start Date Column
#std_num := #listcount + 3
#jsmxcmd := 'DEFINE OBJECT(*CELLFORMAT) COLUMN(5) RANGE(5,#std_num.AsString) TYPE(*DATE) FORMAT(*FORMAT2)'
USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd) TO_GET(#jsmsts #jsmmsg)
EXECUTE SUBROUTINE(CHECK_STS)
6. Excelでドキュメントを開くと、Salary列の幅を調整する必要があることが分かります。これは、複数の給与のサイズがあるためです(1,234,456.50など)。幅を設定するには、DEFINEコマンドでOBJECT(*COLUMNVIEW)を使用してください。コードは以下のようになります。
* Set Column width - Salary
#jsmxcmd := 'DEFINE OBJECT(*COLUMNVIEW) COLUMN(7) WIDTH(12)'
USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd) TO_GET(#jsmsts #jsmmsg)
EXECUTE SUBROUTINE(CHECK_STS)
7. ファンクションiiiFN14を再コンパイルして再度テストします。ドキュメントは以下のようになります。