現在のソリューションには、開始日 (Start Date) の列の書式が設定されないという問題があります。 開始日は、符号付きの数値で 6 桁の長さのフィールドになっています。このステップでは、開始日の列を日付タイプのフィールドに変換して、作業リストに含めます。その後、Excel の開始日列の書式も日付セルとして設定することができます。
- ファイルから STARTDTER を読み込んで変換し、作業リストには日付の作業フィールドを含めます。読み込むフィールドの GROUP_BY を挿入して、SELECT コマンドでこれを使用するようファンクションを変更します。コードは以下のようになります。
GROUP_BY NAME(#EMP_GRP) FIELDS(#empno #givename #surname #startdter #phonehme #salary).....SELECT FIELDS(#EMP_GRP) FROM_FILE(pslmst1) WITH_KEY(#deptment #section) NBR_KEYS(*compute) - 作業リストで、フィールド STARTDTER を STD_DATEX で置き換えます。
- 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 := *SQLNULLENDIFADD_ENTRY TO_LIST(#employs)ENDSELECT
- EMPLOYS の DEF_LIST コマンドを変更し、フィールド LISTCOUNT を使ったカウンターを入れます。コードは以下のようになります。
Def_List Name(#employs) Fields(#empno #givename #surname #STD_DATEX #PHONEHME #salary) Counter(#listcount) Type(*working) Entrys(*max) - 開始日列の書式を日付として設定する ADD コマンドを追加します。コードは以下のようになります。
*開始日列をフォーマットする#std_num := #listcount + 3#jsmxcmd := 'ADD OBJECT(*CELLSTYLE) 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) With_Parms(#JSMXHDLE1)
ここでも、ADD コマンドが ExcelService の WRITE コマンドの前にあることを確認してください。 - Excel でドキュメントを開くと、給与列の幅を調整する必要があることが分かります。これは、複数の給与のサイズがあるためです (1,234,456.50など)。この幅を設定するには、SET コマンドで OBJECT(*COLUMNWIDTH) を使用してください。コードは以下のようになります。
*列幅の設定 - 給与#jsmxcmd := 'SET OBJECT(*COLUMNWIDTH) RANGE(7) WIDTH(3260)'USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd) TO_GET(#jsmsts #jsmmsg)EXECUTE SUBROUTINE(CHECK_STS) With_Parms(#JSMXHDLE1) - ファンクション iiiFN13 を再コンパイルして再度テストします。ドキュメントは以下のようになります。
