Skip to Content
0
Nov 28, 2014 at 04:28 AM

Enable fields in Selection-screen after Invalid date entry

1238 Views

Hello All,

I have the below program in which I am trying to replicate a few features of SM37. I want to validate the date From and To.

When I enter 2014/11/45 in the From date, it displays error message Invalid date(since date is 45) but disables entry in all other fields. I dont want this to happen.

How to enable the fields after the invalid date entry message? I debugged SM37 and understood that this has been done in CHAIN-ENDCHAIN there since its a screen flow logic. Since I cannot replicate that in Selection-screen, its quite confusing. I thought of doing an AT SELECTION-SCREEN ON the date field but doesnt seem to work because I am not sure where this program is throwing me the Invalid date error (I am not handling it within my program).

Pasting the pgm below. Can someone help me determine where the Invalid date error is getting thrown and how to enable the fields affter that?

Thanks.

*************************************************************************

*&---------------------------------------------------------------------*
*& Report ZGUITEST_JOBCONFIRMATION
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZGUITEST_JOBCONFIRMATION.

TABLES: btcuev, btcsev.

DATA: lt_btcjob TYPE TBTCJOB_BK OCCURS 0.

DATA ls_btcselect TYPE BTCSELECT.
DATA wa_job TYPE tbtcjob.
DATA jobcount TYPE I.

* Data declaration for F4 on 'or after event'

DATA: fieldtbl LIKE dfies OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF eventid_hlp_tbl OCCURS 20.
INCLUDE STRUCTURE btcevthtbl.
DATA: END OF eventid_hlp_tbl.
DATA: selected_eventid LIKE tbtcjob-eventid.
DATA: p_helpvalue_key TYPE ddshpvkey value 'BTC_EVENTID_HELP'.


data: gv_datum type sy-datum.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 2(10) JobName FOR FIELD p_jobnm.
PARAMETERS: p_jobnm LIKE btcselect-jobname DEFAULT '*' OBLIGATORY.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK Status WITH FRAME TITLE JobStat.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_pln AS CHECKBOX.
SELECTION-SCREEN COMMENT 4(10) Planned FOR FIELD p_pln.
PARAMETERS: p_rel AS CHECKBOX.
SELECTION-SCREEN COMMENT 19(10) Released FOR FIELD p_rel.
PARAMETERS: p_rdy AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 34(10) Ready FOR FIELD p_rdy.
PARAMETERS: p_act AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 49(10) Active FOR FIELD p_act.
PARAMETERS: p_fin AS CHECKBOX.
SELECTION-SCREEN COMMENT 64(10) Finished FOR FIELD p_fin.
PARAMETERS: p_can AS CHECKBOX.
SELECTION-SCREEN COMMENT 79(17) Canceled FOR FIELD p_can.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK Status.

SELECTION-SCREEN BEGIN OF BLOCK Condition WITH FRAME TITLE JobCond.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 20(5) Frm_Date FOR FIELD p_from.
PARAMETERS: p_from LIKE btcselect-from_date.
SELECTION-SCREEN COMMENT 50(5) To_Date FOR FIELD p_to.
PARAMETERS: p_to LIKE btcselect-to_date DEFAULT SY-DATUM.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 20(20) Event FOR FIELD p_event.
PARAMETERS: p_event LIKE btcselect-eventid AS LISTBOX VISIBLE LENGTH 40.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK Condition.


INITIALIZATION.

JobName = 'ジョブ名'.
JobStat = 'ジョブステータス'.
Planned = '計画済'.
Released = 'リリース済'.
Ready = '待機中'.
Active = '実行中'.
Finished = '終了'.
Canceled = '中止'.

JobCond = 'ジョブ開始条件'.
Frm_Date = '開始'.
To_Date = '終了'.
Event = 'or after event'.

CALL FUNCTION 'CCM_GO_BACK_MONTHS'
EXPORTING
CURRDATE = p_to
BACKMONTHS = '1'
IMPORTING
NEWDATE = gv_datum.

p_from = gv_datum.


* 'Or after event' dropdown list

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_event.

FREE eventid_hlp_tbl.

SELECT * FROM btcuev.
eventid_hlp_tbl-eventid = btcuev-eventid.
APPEND eventid_hlp_tbl.
ENDSELECT.

SELECT * FROM btcsev.
eventid_hlp_tbl-eventid = btcsev-eventid.
APPEND eventid_hlp_tbl.
ENDSELECT.

eventid_hlp_tbl-eventid = '*'. " select everything
APPEND eventid_hlp_tbl. " for combo box

SORT eventid_hlp_tbl BY eventid ASCENDING.

FREE fieldtbl.
CLEAR fieldtbl.
REFRESH fieldtbl.

fieldtbl-tabname = 'BTCEVTHTBL'.
fieldtbl-fieldname = 'EVENTID'.
APPEND fieldtbl.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'EVENTID'
pvalkey = p_helpvalue_key
dynpprog = 'SAPLBTCH'
dynpnr = sy-dynnr
TABLES
value_tab = eventid_hlp_tbl
field_tab = fieldtbl
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.


START-OF-SELECTION.

* Date validation
IF ( p_to < p_from ).
MESSAGE: 'From start date is greater than To start date' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

REFRESH : lt_btcjob.
CLEAR: ls_btcselect.

* Taking care of the time init vs. space
IF ls_btcselect-from_time IS INITIAL.
ls_btcselect-from_time = ' '.
ENDIF.
IF ls_btcselect-to_time IS INITIAL.
ls_btcselect-to_time = ' '.
ENDIF.

* Assign the Jobname, UserName and Start Conditions
ls_btcselect-jobname = p_jobnm.
ls_btcselect-username = '*'.
ls_btcselect-from_date = p_from.
ls_btcselect-to_date = p_to.
ls_btcselect-eventid = p_event.

* Assign the Status
ls_btcselect-prelim = p_pln.
ls_btcselect-schedul = p_rel.
ls_btcselect-ready = p_rdy.
ls_btcselect-running = p_act.
ls_btcselect-finished = p_fin.
ls_btcselect-aborted = p_can.

* Function module to get the list of jobs for the specified parameters
CALL FUNCTION 'BP_JOB_SELECT_SM37B'
EXPORTING
JOBSELECT_DIALOG = 'N'
JOBSEL_PARAM_IN = ls_btcselect
TABLES
JOBSELECT_JOBLIST_B = lt_btcjob
EXCEPTIONS
NO_JOBS_FOUND = 3
OTHERS = 6
.

* no jobs found -> OK, jobs found -> NG
DESCRIBE TABLE lt_btcjob LINES jobcount.
IF jobcount NE 0.
WRITE: 'NG'.
ELSE.
WRITE: 'OK'.
ENDIF.

END-OF-SELECTION.

************************************************************************************************