You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

ステップ 5. 開始日の列をフォーマットする

INT012 - テンプレートとフォーマットでExcelドキュメントを作成する
現在のソリューションには、開始日 (Start Date) の列の書式が設定されないという問題があります。  開始日は、符号付きの数値で 6 桁の長さのフィールドになっています。このステップでは、開始日の列を日付タイプのフィールドに変換して、作業リストに含めます。その後、Excel の開始日列の書式も日付セルとして設定することができます。
1.      ファイルから 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)
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(*max)
 
5.      開始日列の書式を日付として設定する 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 コマンドの前にあることを確認してください。
    6.      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)
    7.      ファンクション iiiFN13 を再コンパイルして再度テストします。ドキュメントは以下のようになります。
  • No labels