追加カラム(日時)のプログラミング例
DColumnプロパティに引き渡す日時の値はISO形式でなければなりません。ですから、引き渡す前にLANSAフィールドからの値を変換する必要があります。 以下は、RDML VLFフィルターから日付の値をインスタンス・リストに追加する例です。
Select Fields(#EMPNO #GIVENAME #SURNAME #DEPTMENT
#SECTION #ADDRESS1 #PHONEHME #POSTCODE #STARTDTE) From_File(PSLMST2)
With_Key(#SURNAME) Generic(*YES)
Use BConcat (#GiveName #SurName)
#FullName
EXECUTE Subroutine(DateToISO) With_Parms(#STARTDTE
#VF_ELDTS)
Invoke Method(#avListManager.AddtoList) Visualid1(#EMPNO)
Visualid2(#FullName) Akey1(#DEPTMENT) Akey2(#SECTION) Akey3(#EMPNO)
AColumn1(#ADDRESS1) AColumn2(#PHONEHME) NColumn1(#POSTCODE)
DColumn1(#VF_ELDTS)
Endselect
SUBROUTINE Name(DateToISO) Parms((#RETDAT *RECEIVED)
(#VF_ELDTS *RETURNED))
DEFINE Field(#D_Char8) Type(*CHAR) Length(8)
DEFINE
Field(#D_Num8) Reffld(#DATE8)
DEFINE Field(#D_Year) Type(*CHAR)
Length(4)
DEFINE Field(#D_Month) Type(*CHAR) Length(2)
DEFINE
Field(#D_Day) Type(*CHAR) Length(2)
OVERRIDE Field(#D_Year) To_Overlay(#D_Char8)
OVERRIDE
Field(#D_Month) To_Overlay(#D_Char8 5)
OVERRIDE Field(#D_Day)
To_Overlay(#D_Char8 7)
USE Builtin(CONVERTDATE_NUMERIC) With_Args(#RETDAT B J)
To_Get(#D_Num8)
USE Builtin(NUMERIC_STRING) With_Args(#D_Num8 N)
To_Get(#D_Char8)
USE Builtin(CONCAT) With_Args(#D_Year '-' #D_Month '-'
#D_Day) To_Get(#VF_ELDTS)
ENDROUTINE
RDMLXの例
RDMLXフィルターでは固有の関数が利用できるので、処理は更に簡単です。以下はRDMLフィールド#STARTDTEを変換するために必要な処理の例です。
* Convert #STARTDTE to the correct format for Date/Time columns
EXECUTE Subroutine(DateToISO) With_Parms(#STARTDTE 'DDMMYY' #VF_ELDTS)
* Format conversion subroutine definition
SUBROUTINE Name(DateToISO) Parms((#RETDAT *RECEIVED) (#DATEFMT *RECEIVED) (#DATEOUT *RETURNED))
DEFINE Field(#DATEFMT) Reffld(#VF_ELDTFM)
DEFINE
Field(#DATEOUT) Reffld(#VF_ELDTS)
If (#RETDAT.isdate(#DATEFMT))
#DATEOUT := #RETDAT.AsDate(#DATEFMT).AsDisplayString(ISO)
ELSE
MESSAGE Msgtxt('Date is not in the correct format')
Endif
ENDROUTINE
RDMLフィルター内のRDMLXフィールドの変換はより簡単で、DateやDateTimeフィールドを正しい形式に変換するには以下のようにするだけです。 ここでRDMLXの日付フィールドは#VF_ELDATです。
#VF_ELDTS := #VF_ELDAT.AsDisplayString(ISO)