追加カラム(日時)のプログラミング例

Visual LANSA

追加カラム(日時)のプログラミング例


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)