2.15.3.1 日付表示再利用可能パーツの作成

再利用可能パーツ(この例では、#EOEXAM04)を作成します。以下のソース・コードをコピーして貼り付けます。

GroupプロパティをDates & Timesに設定してから、コンパイルします。

再利用可能パーツには、日付を入力できる入力フィールドと、フォーマットされた日付を表示するラベルがあります。

このパーツが(フォーム内で)実行されると、以下のように見えます。

パーツには、以下の3つのユーザー定義のプロパティがあります。

uCaption

日付フィールドのキャプションを設定します。

uDate

入力を設定して検証し、取得します。

UInError

日付フィールドの検証に失敗するとTrueに設定されます。

 

日付表示再利用可能パーツのソース

FUNCTION options(*DIRECT)
BEGIN_COM role(*EXTENDS #PRIM_PANL) DISPLAYPOSITION(1) HEIGHT(19) LEFT(0) TABPOSITION(1) TABSTOP(False) TOP(0) VISUALSTYLE(#VS_NORM) WIDTH(417)
DEFINE_COM class(#DATEC.Visual) name(#SHOWDATE) CAPTION('Date') DISPLAYPOSITION(1) HEIGHT(19) LABELTYPE(Caption) MARGINLEFT(120) PARENT(#COM_OWNER) TABPOSITION(1) WIDTH(177)
DEFINE_COM class(#PRIM_LABL) name(#SHOWTEXT) CAPTION('<text>') DISPLAYPOSITION(2) HEIGHT(19) LEFT(184) PARENT(#COM_OWNER) TABPOSITION(2) TABSTOP(False) TOP(0) WIDTH(233)
 
DEFINE field(#RETCODE) type(*CHAR) length(1) desc('Return Code')
DEF_COND name(*OKAY) cond('#RetCode = Y')
DEFINE field(#CVTDATE) type(*CHAR) length(20)
 
* Published Properties
 
DEFINE_PTY name(uCaption) set(Set_uCaption)
DEFINE_PTY name(uDate) get(Get_uDate) set(Set_uDate)
DEFINE_PTY name(uInError) get(Get_uInError) set(Set_uInError)
 
* Property Handling routine
 
PTYROUTINE name(Set_uCaption)
DEFINE_MAP for(*input) class(#Std_TextL) name(#Property_001)
SET com(#ShowDate) CAPTION(#Property_001.Value)
ENDROUTINE
 
PTYROUTINE name(Set_uInError)
DEFINE_MAP for(*input) class(#Std_Bool) name(#Property_002)
SET com(#ShowDate) SHOWERROR(#Property_002.Value)
ENDROUTINE
 
PTYROUTINE name(Get_uInError)
DEFINE_MAP for(*Output) class(#Std_Bool) name(#Property_002)
SET com(#Property_002) VALUE(#ShowDate.ShowError)
ENDROUTINE
 
PTYROUTINE name(Set_uDate)
DEFINE_MAP for(*input) class(#DateC) name(#Property_003)
SET com(#ShowDate) VALUE(#Property_003.Value)
INVOKE method(#Com_Self.ValidateDate)
ENDROUTINE
 
PTYROUTINE name(Get_uDate)
DEFINE_MAP for(*Output) class(#DateC) name(#Property_003)
SET com(#Property_003) VALUE(#ShowDate.Value)
ENDROUTINE
 
* Handle change of date by validating its value
 
EVTROUTINE handling(#SHOWDATE.Changed) options(*NOCLEARMESSAGES *NOCLEARERRORS)
INVOKE method(#Com_Self.ValidateDate)
ENDROUTINE
 
* Method to validate the date
 
MTHROUTINE name(ValidateDate)
 
SET com(#Com_Owner) UINERROR(FALSE)
 
CHANGE field(#DATEC) to('#SHOWDATE.VALUE')
 
IF_NULL field(#DATEC)
 
SET com(#ShowText) CAPTION('No date specified')
 
ELSE
 
USE builtin(CONVERTDATE) with_args(#DATEC F Q) to_get(#CVTDATE #RETCODE)
 
IF cond(*OKAY)
SET com(#ShowText) CAPTION(#CvtDate)
ELSE
SET com(#Com_Owner) UINERROR(TRUE)
SET com(#ShowText) CAPTION('Invalid Date')
ENDIF
 
ENDIF
 
ENDROUTINE
 
END_COM