2009 Sep 10 7:29 AM
Hi,
I've a set of Radiobutton groups in my selection screen.
On clicking one particular radio button group, two parameter fields will be displayed for that radio button.
Out of the two parameters , user has to enter atleast one to execute the program.
If the user didnt enter anything and hit execute then an error message should be displayed to "Enter atleast one"
if the user enters anyone of the field, then validation should happen for that field alone to check whether he entered right data or not?
In which event I can right this, I have tried in at-selection screen and at selection screen on paramter and at selection screen on radhio button group g1.But not able to resolve.
Experts, any thoughts?
Thanks in adv.
<removed_by_moderator>
Regards.
Ponraj.s.
Edited by: Julius Bussche on Sep 10, 2009 8:47 AM
2009 Sep 10 7:40 AM
Hi,
FOR VALIDATION use at selection-screen on field event... try as follows
at selection-screen on p_field1.
select field
from dbtab
into w_field
where field = p_field1.
if sy-subrc ne 0.
message 'INVALID INPUT' type 'E'.
endif.
chk the following code........
parameters:
p_r1 radiobutton group RAD user-command FCODE,
p_r2 radiobutton group RAD,
p_carrid type spfli-carrid obligatory modif id MOD,
p_connid type spfli-connid modif id MOD,
p_fld3 type i obligatory modif id MO1,
p_fld4 type i modif id MO1.
data:
w_carrid type spfli-carrid,
w_connid type spfli-connid.
at selection-screen output.
if p_r2 = 'X'.
loop at screen.
IF screen-group1 = 'MOD'.
screen-active = 0.
modify screen.
ENDIF.
endloop.
else.
loop at screen.
if screen-group1 = 'MO1'.
screen-active = 0.
modify screen.
ENDIF.
endloop.
endif.
AT SELECTION-SCREEN ON P_CARRID.
IF P_CARRID IS not INITIAL.
select single carrid
from scarr
into w_carrid
where carrid eq p_carrid.
if sy-subrc ne 0.
message 'Invalid input' type 'E'.
endif.
ENDIF.
Regards,
Mdi.Deeba
Edited by: Mdi.Deeba on Sep 10, 2009 1:12 PM
2009 Sep 10 7:40 AM
Hi,
FOR VALIDATION use at selection-screen on field event... try as follows
at selection-screen on p_field1.
select field
from dbtab
into w_field
where field = p_field1.
if sy-subrc ne 0.
message 'INVALID INPUT' type 'E'.
endif.
chk the following code........
parameters:
p_r1 radiobutton group RAD user-command FCODE,
p_r2 radiobutton group RAD,
p_carrid type spfli-carrid obligatory modif id MOD,
p_connid type spfli-connid modif id MOD,
p_fld3 type i obligatory modif id MO1,
p_fld4 type i modif id MO1.
data:
w_carrid type spfli-carrid,
w_connid type spfli-connid.
at selection-screen output.
if p_r2 = 'X'.
loop at screen.
IF screen-group1 = 'MOD'.
screen-active = 0.
modify screen.
ENDIF.
endloop.
else.
loop at screen.
if screen-group1 = 'MO1'.
screen-active = 0.
modify screen.
ENDIF.
endloop.
endif.
AT SELECTION-SCREEN ON P_CARRID.
IF P_CARRID IS not INITIAL.
select single carrid
from scarr
into w_carrid
where carrid eq p_carrid.
if sy-subrc ne 0.
message 'Invalid input' type 'E'.
endif.
ENDIF.
Regards,
Mdi.Deeba
Edited by: Mdi.Deeba on Sep 10, 2009 1:12 PM
2009 Sep 10 7:43 AM
2009 Sep 10 7:56 AM
Hi Vikranth,
I have alread searched in SDN and didnt find anything related to my requirement.
How do you know that I dint search before?
Others,
I can't give both parameter field as obligatory while declaring itself, bcoz it will prompt user to enter both fields.
After entering we can do the validation for parameters,using At selection screen on P1 and At selection screen on P2.
But how do I give error message to user if he didnt enter anything and hit execute?
Vijay , your code doesnt suit my requirement.
Thanks,
Ponraj.s.
2009 Sep 10 8:50 AM
Hi,
Try using code below:
SELECTION-SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-001.
PARAMETERS: p_dialog TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X'
USER-COMMAND com MODIF ID mod,
p_backgr TYPE c RADIOBUTTON GROUP grp1,
p_belnr TYPE rbkp-belnr,
p_gjahr TYPE rbkp-gjahr,
p_cpudt TYPE rbkp-cpudt.
SELECT-OPTIONS: so_bukrs FOR rbkp-bukrs.
SELECTION-SCREEN END OF BLOCK blck.
AT SELECTION-SCREEN OUTPUT.
*---Change Screen layout depending upon whether it is Online Execution
*---of Program or it is Background Execution.
IF NOT p_dialog IS INITIAL.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'SO_BUKRS-LOW'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'SO_BUKRS-HIGH'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_BELNR'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_GJAHR'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_CPUDT'.
screen-active = c_0.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'SO_BUKRS-LOW'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'SO_BUKRS-HIGH'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_BELNR'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_GJAHR'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_CPUDT'.
screen-active = c_1.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDIF."IF NOT p_dialog IS INITIAL.
IF NOT p_dialog IS INITIAL AND
( p_belnr IS INITIAL AND p_gjahr IS INITIAL ).
MESSAGE 'Enter at least one parameter' TYPE 'S' DISPLAY LIKE 'E'.
SET SCREEN 0.
ENDIF.
KR Jaideep,
2009 Sep 10 9:58 AM
The above code is giving error message on clicking F8 fisrt time itself(at the time of selection screen diplays from the code on clicking F8)
2009 Sep 10 10:06 AM
Hi,
My mistake try the code below. I forgot to add start-of-selection event.
TABLES: rbkp.
SELECTION-SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-001.
PARAMETERS: p_dialog TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X'
USER-COMMAND com MODIF ID mod,
p_backgr TYPE c RADIOBUTTON GROUP grp1,
p_belnr TYPE rbkp-belnr,
p_gjahr TYPE rbkp-gjahr,
p_cpudt TYPE rbkp-cpudt.
SELECT-OPTIONS: so_bukrs FOR rbkp-bukrs.
SELECTION-SCREEN END OF BLOCK blck.
AT SELECTION-SCREEN OUTPUT.
*---Change Screen layout depending upon whether it is Online Execution
*---of Program or it is Background Execution.
CONSTANTS: c_0 TYPE c VALUE '0',
c_1 TYPE c VALUE '1'.
IF NOT p_dialog IS INITIAL.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'SO_BUKRS-LOW'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'SO_BUKRS-HIGH'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_BELNR'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_GJAHR'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_CPUDT'.
screen-active = c_0.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'SO_BUKRS-LOW'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'SO_BUKRS-HIGH'.
screen-active = c_1.
MODIFY SCREEN.
WHEN 'P_BELNR'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_GJAHR'.
screen-active = c_0.
MODIFY SCREEN.
WHEN 'P_CPUDT'.
screen-active = c_1.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDIF."IF NOT p_dialog IS INITIAL.
START-OF-SELECTION.
IF NOT p_dialog IS INITIAL AND
( p_belnr IS INITIAL AND p_gjahr IS INITIAL ).
MESSAGE 'Enter at least one parameter' TYPE 'S' DISPLAY LIKE 'E'.
SET SCREEN 0.
ENDIF.
KR Jaideep,
2009 Sep 10 10:27 AM
As Jaideep said it can be resolved by adding validations in Start-Of-Selection event.But in my project there shouldn't be any validation in SOS.
So I fixed this giving default value in one of the paramter. so first time it wont throw error, if user makes it blank and hit execute it will throw an error message.
Thanks for all your inputs.
2009 Sep 10 7:44 AM
Hi,
You can do it on at selection-screen on parameter.
Before you do, check the parameter is not initial.
if not p_parameter is initial.
....validations here.
endif.
2009 Sep 10 7:44 AM
Hi,
You can mention obligatory in the parameters field.
For example
parameters: a type i obligatory
b type i obligatory
here a and b are your parameter fields.
Regards
Harini.S
2009 Sep 10 7:47 AM
Hi,
Try this code,
TABLES : KNA1.
TYPES : BEGIN OF TY_KNA1,
KUNNR TYPE KNA1-KUNNR,
NAME1 TYPE KNA1-NAME1,
END OF TY_KNA1.
DATA : T_KNA1 TYPE TY_KNA1 OCCURS 1,
W_KNA1 TYPE TY_KNA1.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_KUNNR TYPE KNA1-KUNNR OBLIGATORY,
P_VBELN TYPE VBAK-VBELN,
R1 RADIOBUTTON GROUP RAD USER-COMMAND FLAG,
R2 RADIOBUTTON GROUP RAD.
SELECTION-SCREEN END OF BLOCK B1.
SELECT KUNNR NAME1 FROM KNA1 INTO TABLE T_KNA1 WHERE KUNNR = P_KUNNR.
IF SY-SUBRC NE 0.
MESSAGE 'invalid input type' TYPE 'E'.
ELSE.
LOOP AT T_KNA1 INTO W_KNA1.
WRITE:/ W_KNA1-KUNNR,
W_KNA1-NAME1.
ENDLOOP.
ENDIF.
Regards,
Vijay
2009 Sep 10 7:49 AM
Pls Go through the example for Field Validation on selection screen .
DATA:date TYPE i .
SELECT-OPTIONS :
s_date FOR vbak-erdat OBLIGATORY DEFAULT sy-datum MODIF ID det .
AT SELECTION-SCREEN ON s_date.
IF rd = 'X' .
date = s_date-high - s_date-low .
ELSEIF rs = 'X' .
date = su_date-high - su_date-low .
ELSEIF rp = 'X' .
date = sp_date-high - sp_date-low .
ENDIF .
IF date GT 92 .
MESSAGE 'Enter The Date Range Within Three Months ' TYPE 'E' .
ENDIF .
Edited by: Sachhidananda Tripathy on Sep 10, 2009 8:49 AM
2009 Sep 10 10:28 AM