Create a Date Display Reusable Part

Create a reusable part (in this example it is called EOEXAM04). Copy and paste the code from the source code supplied below.

Set its Group property to Dates & Times then compile it.

The reusable part contains an input field in which a date can be entered and a label that will display the formatted date:

When the part is executed (in a form) it will look like this:

The part has three user-defined properties:

uCaption

Is used to the set the caption for the date field.

uDate

Is used to set and validate the entered and to retrieve it.

UInError

Is set to True if the date cannot be validated.

 

Source for Date Display Reusable Part

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