cancel
Showing results for 
Search instead for 
Did you mean: 

reg:add inputfields based on selection value in drop down by key

Former Member
0 Kudos

hi all

the issue is solved by the above link ,now i have issue where

when i select particular value in the first drop down it need to display one input field along with label and if i select second value in the first drop down it need to display two more fields below it.

can u please share your exp on this

thanks in advance

Deepika

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi deepika,

In case try if you can create some input fields in layout properties and control the visibility of the in the action of the dropdownbykey .

If the above scenario does not match with your requiment the try to create input field and label dynamically.

for that follow the link:-

[ Add Dynamic Input field|;

also sarbjeet's reply in :-

[Dynamic Input field with Label|;

Reply in case of any issue.

Regards,

Monishankar C

Former Member
0 Kudos

hi

Thanks for quick response but those fields should be displayed only when i select particular vlaue in the dropdown by key .

i mean depending on the value selected in ddbk that inputfield should displayed and when i select other value in drop down it need to display other two input field and ip field already available when we selected first value in drop down should be automatically go into invisible mode.

Thanks & Regards

Deepika

Edited by: deepika_indian on Feb 15, 2011 9:11 AM

gill367
Active Contributor
0 Kudos

Hello Deepika,

Create an attirbute of type wdy_boolean. say its name as WDUI_VISIBILITY.

then create the input filed in the layout which you want visible only when you select a value .

and bidn its property visible to this attribute VIS.

now consider the example of the previous question raised by you

let us assume you want the inputfield visible only when you select A2 from the first dropwon

then write the following code.

"filling the dropdown one

data vl type table of  wdr_context_attr_value.
data wl type wdr_context_attr_value.
data nd type ref to if_wd_context_node.
data nodeinf type ref to if_wd_context_node_info.
nd = wd_context->get_child_node( 'VAL' ).
nodeinf = nd->get_node_info( ).
DATA FS_VAL TYPE STRING.
ND->GET_ATTRIBUTE(
EXPORTING
NAME = 'A'
IMPORTING
VALUE = FS_VAL
).

IF FS_VAL EQ 'A1'.
wl-text = 'B1'.
wl-value = 'B1'.
append wl to vl.
wl-text = 'B2'.
wl-value = 'B2'.
append wl to vl.
wd_context->set_attribute(

name = 'VIS'
value = cl_wd_uielement=>e_visible-NONE ).            " make it invisble on A1


ELSEIF FS_VAL EQ 'A2'.
  wl-text = 'B3'.
wl-value = 'B3'.
append wl to vl.
wl-text = 'B4'.
wl-value = 'B4'.
append wl to vl.

wd_context->set_attribute(

name = 'VIS'
value = cl_wd_uielement=>e_visible-VISIBLE ).     "make it visible


ENDIF.

nodeinf->set_attRibute_value_Set(
name = 'B'
value_Set = vl

).

THANKS

SARBJEET SINGH

Former Member
0 Kudos

Hi

In the beginning set the default value invisible for all.

You try to set the visibility in the action of the dropdown.

you got two values in the drop down. Now first get the value.

make a condition like :-

if value 1.

set the visibility of the first input field.

elseif value 2.

check whether the value of first input field is visible or not , if yes then set it to invsible .

set the visibility of the other two input field.

endif.

Regards,

Monishankar C

Former Member
0 Kudos

hi

i agree with ur code wat u have sent,but i have created input fields and lables dynamically and used the below code in wdmodify view method.

but the the problem

DATA VL TYPE TABLE OF WDR_CONTEXT_ATTR_VALUE.

DATA WL TYPE WDR_CONTEXT_ATTR_VALUE.

DATA ND TYPE REF TO IF_WD_CONTEXT_NODE.

DATA NODEINF TYPE REF TO IF_WD_CONTEXT_NODE_INFO.

ND = WD_CONTEXT->GET_CHILD_NODE( 'VAL' ).

NODEINF = ND->GET_NODE_INFO( ).

DATA FS_VAL TYPE STRING.

ND->GET_ATTRIBUTE(

EXPORTING

NAME = 'A'

IMPORTING

VALUE = FS_VAL

).

IF FS_VAL EQ 'RentedAccom'.

WL-TEXT = 'NonMetro'.

WL-VALUE = 'NonMetro'.

APPEND WL TO VL.

WL-TEXT = 'Metro'.

WL-VALUE = 'Metro'.

APPEND WL TO VL.

ELSEIF FS_VAL EQ 'Companyowned'.

WL-TEXT = 'CityPopulation>4lakhs'.

WL-VALUE = 'CityPopulation>4lakhs'.

APPEND WL TO VL.

WL-TEXT = 'OtherCities'.

WL-VALUE = 'OtherCities'.

APPEND WL TO VL.

ENDIF.

NODEINF->SET_ATTRIBUTE_VALUE_SET(

NAME = 'B'

VALUE_SET = VL ) .

IF FS_VAL EQ 'RentedAccom'.

  • DATA LCR1 TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.

  • LCR1 ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).

*

DATA INPUT3 TYPE REF TO CL_WD_INPUT_FIELD.

DATA INPUT4 TYPE REF TO CL_WD_INPUT_FIELD.

DATA LR_LABEL3 TYPE REF TO CL_WD_LABEL.

DATA LR_LABEL4 TYPE REF TO CL_WD_LABEL.

DATA LR_LABEL1 TYPE REF TO CL_WD_LABEL.

DATA LR_LABEL2 TYPE REF TO CL_WD_LABEL.

DATA INPUT1 TYPE REF TO CL_WD_INPUT_FIELD.

DATA INPUT2 TYPE REF TO CL_WD_INPUT_FIELD.

DATA MATRIX TYPE REF TO CL_WD_MATRIX_DATA.

DATA MATRIX_HEAD TYPE REF TO CL_WD_MATRIX_HEAD_DATA.

DATA LCR TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.

LCR ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).

INPUT1 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT1'

ID = 'INP1'

).

MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( INPUT1 ).

INPUT1->SET_LAYOUT_DATA( MATRIX_HEAD ).

LR_LABEL1 = CL_WD_LABEL=>NEW_LABEL(

ID = 'LB1'

LABEL_FOR = 'INP1'

TEXT = 'LABEL1'

).

MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( LR_LABEL1 ).

LR_LABEL1->SET_LAYOUT_DATA( MATRIX_HEAD ).

INPUT2 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT2'

ID = 'INP2'

).

MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( INPUT2 ).

INPUT2->SET_LAYOUT_DATA( MATRIX ).

LR_LABEL2 = CL_WD_LABEL=>NEW_LABEL(

ID = 'LB2'

LABEL_FOR = 'INP2'

TEXT = 'LABEL2'

).

MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( LR_LABEL2 ).

LR_LABEL2->SET_LAYOUT_DATA( MATRIX ).

LCR->ADD_CHILD( LR_LABEL1 ).

LCR->ADD_CHILD( LR_LABEL2 ).

LCR->ADD_CHILD( INPUT1 ).

LCR->ADD_CHILD( INPUT2 ).

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

ELSEIF FS_VAL EQ 'Companyowned'.

  • DATA LR_LABEL3 TYPE REF TO CL_WD_LABEL.

  • DATA LR_LABEL4 TYPE REF TO CL_WD_LABEL.

  • DATA INPUT3 TYPE REF TO CL_WD_INPUT_FIELD.

  • DATA INPUT4 TYPE REF TO CL_WD_INPUT_FIELD.

  • DATA MATRIX TYPE REF TO CL_WD_MATRIX_DATA.

  • DATA MATRIX_HEAD TYPE REF TO CL_WD_MATRIX_HEAD_DATA.

DATA LCR1 TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.

LCR1 ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).

INPUT3 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT3'

ID = 'INP3'

).

MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( INPUT3 ).

INPUT3->SET_LAYOUT_DATA( MATRIX_HEAD ).

LR_LABEL3 = CL_WD_LABEL=>NEW_LABEL(

ID = 'LB3'

LABEL_FOR = 'INP3'

TEXT = 'LABEL3'

).

MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( LR_LABEL3 ).

LR_LABEL3->SET_LAYOUT_DATA( MATRIX_HEAD ).

INPUT4 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT4'

ID = 'INP4'

).

MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( INPUT4 ).

INPUT4->SET_LAYOUT_DATA( MATRIX ).

LR_LABEL4 = CL_WD_LABEL=>NEW_LABEL(

ID = 'LB4'

LABEL_FOR = 'INP4'

TEXT = 'LABEL4'

).

MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( LR_LABEL4 ).

LR_LABEL4->SET_LAYOUT_DATA( MATRIX ).

LCR1->ADD_CHILD( LR_LABEL3 ).

LCR1->ADD_CHILD( LR_LABEL4 ).

LCR1->ADD_CHILD( INPUT3 ).

LCR1->ADD_CHILD( INPUT4 ).

END IF.

is when i select second value like company owned i am able to see u ip fields ,first 2 are related to rentaccom and next two are related to company owned,but my requirement is when i select first value one first ip fields related to it shld be displayed and viceversa.

if i use above coding for first value i am able to 2 ip fields

when i select sec value in drop down along with first two 3 4 ip also also i am able to see.

i want to make first ips invisible for secnd value selected and vice versa

how to make those fields invisible with the dynamic coding.

thanks in advance

Deepika

gill367
Active Contributor
0 Kudos

Here you can find the label and input field and delete it form th econatiner.

but this wont be a gud approach

i will say go with the visiblity method.

create an attribute named 'VIS' of type wdui_visiblity.

however here is the logic for removing input field and label when adding in B.

data label type ref to cl_wd_label.
data uie type ref to CL_WD_UIELEMENT.
data total type i.
data indx type i.
data id type string.
total = lr_container->number_of_children( ).
do total times.
  indx = sy-index.
uie = LCR1->get_child( index = indx ).
id = uie->id.
if id eq 'LBL1' or id eq 'LBL2' OR id eq 'INP1' or id eq 'INP2'.
 LCR1->REMOVE_child( index = indx ).
    
    endif.
enddo.

similary you can do for A also.

thanks

sarbjeet singh

Former Member
0 Kudos

Hi SARBJEET SINGH

When i used the code from Ur last reply but,when i select one value in drop down(just think A1),it is showing two inp1 lab1, and ip2,lab2 but when i select second value (A2) it show that ip3 ip4 fields along with label2 and ip2.

when i select A2 first it showing ip3 lab3,ip4 lab4,again when i selected A1 it is giving ip1 lab1,ip2 lab2 along with ip4 lab4.

every time one field and label is not hiding with code Wat u have sent for the visibility,can u please let me why the problem is occurring.

Thanks in advance

Deepika

Edited by: deepika_indian on Feb 16, 2011 7:50 AM

gill367
Active Contributor
0 Kudos

HI

Here is the complete code for wddomodify.

however i am saying it again that better approach is with visiblity


DATA VL TYPE TABLE OF WDR_CONTEXT_ATTR_VALUE.
DATA WL TYPE WDR_CONTEXT_ATTR_VALUE.
DATA ND TYPE REF TO IF_WD_CONTEXT_NODE.
DATA NODEINF TYPE REF TO IF_WD_CONTEXT_NODE_INFO.
  data uie type ref to CL_WD_UIELEMENT.
  data total type i.
data indx type i.
data id type string.
ND = WD_CONTEXT->GET_CHILD_NODE( 'VAL' ).
NODEINF = ND->GET_NODE_INFO( ).
DATA FS_VAL TYPE STRING.
ND->GET_ATTRIBUTE(
EXPORTING
NAME = 'A'
IMPORTING
VALUE = FS_VAL
).

IF FS_VAL EQ 'RentedAccom'.

WL-TEXT = 'NonMetro'.
WL-VALUE = 'NonMetro'.
APPEND WL TO VL.
WL-TEXT = 'Metro'.
WL-VALUE = 'Metro'.
APPEND WL TO VL.
ELSEIF FS_VAL EQ 'Companyowned'.
WL-TEXT = 'CityPopulation>4lakhs'.
WL-VALUE = 'CityPopulation>4lakhs'.
APPEND WL TO VL.
WL-TEXT = 'OtherCities'.
WL-VALUE = 'OtherCities'.
APPEND WL TO VL.

ENDIF.

NODEINF->SET_ATTRIBUTE_VALUE_SET(
NAME = 'B'
VALUE_SET = VL ) .

IF FS_VAL EQ 'RentedAccom'.
* DATA LCR1 TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.
* LCR1 ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
*

DATA INPUT3 TYPE REF TO CL_WD_INPUT_FIELD.
DATA INPUT4 TYPE REF TO CL_WD_INPUT_FIELD.

DATA LR_LABEL3 TYPE REF TO CL_WD_LABEL.
DATA LR_LABEL4 TYPE REF TO CL_WD_LABEL.
DATA LR_LABEL1 TYPE REF TO CL_WD_LABEL.
DATA LR_LABEL2 TYPE REF TO CL_WD_LABEL.
DATA INPUT1 TYPE REF TO CL_WD_INPUT_FIELD.
DATA INPUT2 TYPE REF TO CL_WD_INPUT_FIELD.
DATA MATRIX TYPE REF TO CL_WD_MATRIX_DATA.
DATA MATRIX_HEAD TYPE REF TO CL_WD_MATRIX_HEAD_DATA.
DATA LCR TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.
LCR ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
INPUT1 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT1'
ID = 'INP1'
).
MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( INPUT1 ).
INPUT1->SET_LAYOUT_DATA( MATRIX_HEAD ).

LR_LABEL1 = CL_WD_LABEL=>NEW_LABEL(
ID = 'LB1'
LABEL_FOR = 'INP1'
TEXT = 'LABEL1'
).
MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( LR_LABEL1 ).
LR_LABEL1->SET_LAYOUT_DATA( MATRIX_HEAD ).

INPUT2 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT2'
ID = 'INP2'
).
MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( INPUT2 ).
INPUT2->SET_LAYOUT_DATA( MATRIX ).


LR_LABEL2 = CL_WD_LABEL=>NEW_LABEL(
ID = 'LB2'
LABEL_FOR = 'INP2'
TEXT = 'LABEL2'
).
MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( LR_LABEL2 ).
LR_LABEL2->SET_LAYOUT_DATA( MATRIX ).

LCR->ADD_CHILD( LR_LABEL1 ).
LCR->ADD_CHILD( LR_LABEL2 ).
LCR->ADD_CHILD( INPUT1 ).
LCR->ADD_CHILD( INPUT2 ).


total = LCR->number_of_children( ).

do total times.
  indx = 10 - sy-index.
uie = LCR->get_child( index = indx ).
if uie is not initial.
id = uie->id.
if id eq 'LB3' or id eq 'LB4' OR id eq 'INP3' or id eq 'INP4'.
 LCR->REMOVE_child( index = indx ).

    endif.
    endif.
enddo.

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

ELSEIF FS_VAL EQ 'Companyowned'.

DATA LCR1 TYPE REF TO CL_WD_TRANSPARENT_CONTAINER.
LCR1 ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
INPUT3 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT3'
ID = 'INP3'
).
MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( INPUT3 ).
INPUT3->SET_LAYOUT_DATA( MATRIX_HEAD ).


LR_LABEL3 = CL_WD_LABEL=>NEW_LABEL(
ID = 'LB3'
LABEL_FOR = 'INP3'
TEXT = 'LABEL3'
).
MATRIX_HEAD = CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( LR_LABEL3 ).
LR_LABEL3->SET_LAYOUT_DATA( MATRIX_HEAD ).

INPUT4 = CL_WD_INPUT_FIELD=>NEW_INPUT_FIELD( BIND_VALUE = 'INPUT4'
ID = 'INP4'
).
MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( INPUT4 ).
INPUT4->SET_LAYOUT_DATA( MATRIX ).


LR_LABEL4 = CL_WD_LABEL=>NEW_LABEL(
ID = 'LB4'
LABEL_FOR = 'INP4'
TEXT = 'LABEL4'
).
MATRIX = CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( LR_LABEL4 ).
LR_LABEL4->SET_LAYOUT_DATA( MATRIX ).

LCR1->ADD_CHILD( LR_LABEL3 ).
LCR1->ADD_CHILD( LR_LABEL4 ).
LCR1->ADD_CHILD( INPUT3 ).
LCR1->ADD_CHILD( INPUT4 ).

total = LCR1->number_of_children( ).

do total times.
  indx = 10 - sy-index.
uie = LCR1->get_child( index = indx ).
if uie is not initial.
id = uie->id.

if id eq 'LB1' or id eq 'LB2' OR id eq 'INP1' or id eq 'INP2'.
 LCR1->REMOVE_child( index = indx ).
endif.
    endif.
enddo.
ENDIF.

thanks

sarbjeet singh