on 01-18-2012 5:55 PM
Hello,
i have to create dynamically check box based upon number of fields from database.
i found some some solution in sdn which is not workinf for me.
could anyone help me in this.
thanks
It would have helped if you had stated which sdn-solution didn't work for you in particular... aside from that, above poster provided you with what you need.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Rakshar,
I am not sure what you tried and why it is not working, but below is the code for creating Checkbox at runtime:
cl_wd_checkbox=>new_checkbox( EXPORTING
bind_checked = 'CN_RBTN.CA_BOX'
RECEIVING
control = lo_chk_box ).
cl_wd_flow_data=>new_flow_data( EXPORTING
element = lo_chk_box
RECEIVING
control = lo_flow_data ).
lo_chk_box->set_layout_data( lo_flow_data ).
lo_ele_container->add_child( lo_chk_box ).
Bind_Checked parameter is used for binding the checkbox to a context attribute.
Hope this will help you.
Amit
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello Amit,
I have wriiten the code as below
**********************************************************************
DATA: LR_CONTAINER TYPE REF TO CL_WD_UIELEMENT_CONTAINER,
LR_CHECKBOX TYPE REF TO CL_WD_CHECKBOX.
* get a pointer to the RootUIElementContainer
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = 'WD_Processor'
BIND_CHECKED = 'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
*****************************************************************************
but i am getting one dump during runtime. Could you please guide me..
The following error occurred in system DT1 : Error in MATRIX_LAYOUT "_02" of view "ZCHK_BOX.MAIN": The first child element in a container with "MatrixLayout" must be of type "MatrixHeadData"
The error occurred on application server rb3dt1a0_DT1_24 and in work process. 8
The termination type was: RABAX_STATE
The ABAP call stack was:
Method: RAISE_FOR of program CX_WDR_ADAPTER_EXCEPTION======CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C8STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C7STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program CL_WDR_VIEW_ADAPTER===========CP
Method: IF_WDR_NW7_DELTA_RENDERER~CALCULATE_DELTA_BLOCKS of program CL_WDR_VIEW_ADAPTER===========CP
Method: PROCESS_DELTA_BLOCKS of program CL_WDR_WINDOW_CONTENT_ADAPTER2CP
Method: IF_WDR_NW7_DELTA_RENDERER~CALCULATE_DELTA_BLOCKS of program CL_WDR_WINDOW_CONTENT_ADAPTER2CP
Method: SET_CONTENT of program CL_WDR_NW7_INT_WIN_ADAPTER====CP
Method: SET_CONTENT of program CL_WDR_NW7_MAIN_WIN_ADAPTER===CP
Method: IF_WDR_CLIENT~SEND_RESPONSE of program CL_WDR_CLIENT_SSR_LS==========CP
Hi Rakshar,
Remove CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
and add below code:
DATA: lo_matrix_data TYPE REF TO cl_wd_matrix_data.
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( exporting
ELEMENT = LR_CHECKBOX
RECEIVING
control = lo_matrix_data ).
LR_CHECKBOX->set_layout_data( lo_matrix_data ).
Let me know what is the result.
Regards,
Amit
Hello Amit ,
now it is working for me.
But i have few concern on this.
here i have created node and attibute in the context level CHECK_BOX_NODE with 1.1 cardinality and CHECK_BOX_VALUE tyep wdy_boolean.
But i need the dynmicalyy check box based upon my table records.
For ex:- in table if it is 4records in a field(rec1, rec2, rec3,rec4), automatically 4 checkbox should be created in runtime.
so if i will implement this code in my application , will it work...
please suggest.
Thanks a lot again for your solution.
Hi Rakshar,
Yes, put this code in the loop and it will work.
Previous code will not give the proper layout. Try this one, it will generate 4 checkboxes in different row.
DATA: lo_matrix_data TYPE REF TO CL_WD_MATRIX_HEAD_DATA.
CL_WD_MATRIX_HEAD_DATA=>new_matrix_head_data( exporting
ELEMENT = LR_CHECKBOX
RECEIVING
control = lo_matrix_data ).
LR_CHECKBOX->set_layout_data( lo_matrix_data ).
Hello Amit,
I am facing one more issue in dynamic check box creation.
Issue is :- I have four checkbox creating dynamically based upon the field records.
But while i am clicking on 1st check box and clicking on btn1 rest of the checkbox is getting selected automatically , which i dont want. could you please tell me what could be the reason.
so that one check box will be checked while i will click on btn1
Thanks
Hi Rakshar,
I also tried it and it is happening in my case also, it is because all the checkboxes are binded to same attribute.
I will check, how can we create dynamic binding. Will let you know, if found something.
One thing, how is your context designed. Is attribute binded to Checkbox is under a node and cardinality of the node in 0..n??
If yes, then we can try one thing, create a table with one column, and that column will have checkbox. This should work, below is the code:
DATA: lo_table TYPE REF TO cl_wd_table,
lo_column_name TYPE REF TO cl_wd_table_column.
lo_table = cl_wd_table=>new_table(
id ='TBL_TABLE'
bind_data_source ='CN_RBTN'
design = cl_wd_table=>e_design-alternating
visible_row_count = 4
).
cl_wd_flow_data=>new_flow_data( EXPORTING
element = lo_table
RECEIVING
control = lo_flow_data ).
lo_ele_container->add_child( EXPORTING
the_child = lo_table ).
lo_column_name = cl_wd_table_column=>new_table_column(
id = 'TBL_EXAMPLE_NAME'
).
Add columns to the Table.
lo_table->add_column( the_column = lo_column_name ).
Create Checkbox
cl_wd_checkbox=>new_checkbox( EXPORTING
bind_checked = 'CN_RBTN.CA_BOX'
RECEIVING
control = lo_chk_box ).
cl_wd_flow_data=>new_flow_data( EXPORTING
element = lo_chk_box
RECEIVING
control = lo_flow_data ).
Set Checkbox as Table Cell Editor.
lo_column_name->set_table_cell_editor( the_table_cell_editor = lo_chk_box
).
Hope this helps,
Amit
Hi Rakshar,
Put this code in the loop to bind the checkbox to attributes dynamically:
lo_nd_cn_rbtn = wd_context->get_child_node( name = 'CN_RBTN' ).
lo_el_cn_rbtn = lo_nd_cn_rbtn->get_element( index = sy-index ).
IF lo_el_cn_rbtn is NOT INITIAL.
lo_el_cn_rbtn->get_path( EXPORTING WITHOUTCONTROLLER = 'X'
RECEIVING path = lv_path ).
ENDIF.
CONCATENATE lv_path '.CA_BOX' INTO lv_path.
cl_wd_checkbox=>new_checkbox( EXPORTING
bind_checked = lv_path "'CN_RBTN.CA_BOX'
RECEIVING
control = lo_chk_box ).
This will solve your issue.
Amit
Hello Amit,
As of now i am using this code in modifyview
LOOP AT IT_FIELDS_CNTRL1 INTO WA_FIELDS_CNTRL1 .
AT END OF FIELDGROUP_R.
MOVE WA_FIELDS_CNTRL1-FIELDGROUP_R TO IV_TEXT.
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = 'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
*CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
*******************end original code
ENDLOOP.
Hello Amit,
As of now i am using this code in modifyview
LOOP AT IT_FIELDS_CNTRL1 INTO WA_FIELDS_CNTRL1 .
AT END OF FIELDGROUP_R.
MOVE WA_FIELDS_CNTRL1-FIELDGROUP_R TO IV_TEXT.
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = 'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
*CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
*******************end original code
ENDLOOP.
Hi Rakshar,
I am assuming that CHECK_BOX_NODE has cardinality 0..n and it already has some elements created in WDDOINIT or WDDOMODIFYVIEW method:
DATA: lv_path type string,
lo_nd_cn_cbox type ref to if_wd_context_node,
lo_el_cn_cbox type ref to if_wd_context_element.
LOOP AT IT_FIELDS_CNTRL1 INTO WA_FIELDS_CNTRL1 .
AT END OF FIELDGROUP_R.
MOVE WA_FIELDS_CNTRL1-FIELDGROUP_R TO IV_TEXT.
lo_nd_cn_cbox = wd_context->get_child_node( name = 'CHECK_BOX_NODE' ).
lo_el_cn_cbox = lo_nd_cn_cbox->get_element( index = sy-index ).
IF lo_el_cn_rbtn is NOT INITIAL.
lo_el_cn_cbox->get_path( EXPORTING WITHOUTCONTROLLER = 'X'
RECEIVING path = lv_path ).
ENDIF.
CONCATENATE lv_path '.CHECK_BOX_VALUE' INTO lv_path.
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = lv_path "'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
*CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
Hope this code will solve your issue, let me know the error you are getting.
Regards,
Amit
Hello Amit,
After the put the code suggested you i put in modifyview.
DATA: lv_path type string,
lo_nd_cn_cbox type ref to if_wd_context_node,
lo_el_cn_cbox type ref to if_wd_context_element.
LOOP AT IT_FIELDS_CNTRL1 INTO WA_FIELDS_CNTRL1 .
MOVE WA_FIELDS_CNTRL1-FIELDGROUP_R TO IV_TEXT.
lo_nd_cn_cbox = wd_context->get_child_node( name = 'CHECK_BOX_NODE' ).
lo_el_cn_cbox = lo_nd_cn_cbox->get_element( index = sy-index ).
IF lo_el_cn_rbtn is NOT INITIAL.
lo_el_cn_cbox->get_path( EXPORTING WITHOUTCONTROLLER = 'X'
RECEIVING path = lv_path ).
ENDIF.
CONCATENATE lv_path '.CHECK_BOX_VALUE' INTO lv_path.
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = lv_path "'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
*CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ELEMENT = LR_CHECKBOX ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
also in the above code i cud not undersatnd whr the lo_el_cn_rbtn is coming so i chaged it to " lo_el_cn_cbox"
IF lo_el_cn_rbtn is NOT INITIAL.
lo_el_cn_cbox->get_path( EXPORTING WITHOUTCONTROLLER = 'X'
RECEIVING path = lv_path ).
ENDIF.
but i got an dump,
Note
The following error occurred in system DT1 : Could not find attribute .CHECK_BOX_VALUE
The error occurred on application server rb3dt1a0_DT1_24 and in work process. 7
The termination type was: RABAX_STATE
The ABAP call stack was:
Method: IF_WD_CONTEXT_NODE_INFO~GET_ATTRIBUTE of program CL_WDR_CONTEXT_NODE_INFO======CP
Method: IF_WD_CONTEXT_ELEMENT~GET_ATTRIBUTE of program CL_WDR_CONTEXT_ELEMENT========CP
Method: GET_ATTRIBUTE_INTERNAL of program CL_NW7_VIEW_ELEMENT_ADAPTER===CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C0STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C8STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C8STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C8STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program /1WDA/C7STANDARD==============CP
Method: IF_NW7_VIEW_ELEMENT_ADAPTER~SET_CONTENT of program CL_WDR_VIEW_ADAPTER===========CP
Method: IF_WDR_NW7_DELTA_RENDERER~CALCULATE_DELTA_BLOCKS of program CL_WDR_VIEW_ADAPTER===========CP
Hello Amit,
i am using the cardinality as 1:n,
during breakpoint it is not also going to till iv_path.
-
but with caridinality 1:n
the below code i am using where checkbox is not selected properly
LOOP AT IT_FIELDS_CNTRL1 INTO WA_FIELDS_CNTRL1 .
MOVE WA_FIELDS_CNTRL1-FIELDGROUP_R TO IV_TEXT.
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = 'CHECK_BOX_NODE.CHECK_BOX_VALUE'
VIEW = VIEW ).
CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
and the new code you provided thr in break point is not coming till iv_path also
Thanks
Rakshar
hELLO AMAI,
AS YOU SUGESTED I PUT THIS CODE
DATA: IV_PATH type string.
DATA LO_ND_CHECK_BOX_NODE TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LO_EL_CHECK_BOX_NODE TYPE REF TO IF_WD_CONTEXT_ELEMENT.
DATA LS_CHECK_BOX_NODE TYPE WD_THIS->ELEMENT_CHECK_BOX_NODE.
navigate from <CONTEXT> to <CHECK_BOX_NODE> via lead selection
LO_ND_CHECK_BOX_NODE = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_CHECK_BOX_NODE ).
@TODO handle non existant child
IF lo_nd_check_box_node IS INITIAL.
ENDIF.
get element via lead selection
LO_EL_CHECK_BOX_NODE = LO_ND_CHECK_BOX_NODE->GET_ELEMENT( ).
alternative access via index
lo_el_check_box_node = lo_nd_check_box_node->get_element( index = 1 ).
@TODO handle not set lead selection
IF LO_EL_CHECK_BOX_NODE IS INITIAL.
ENDIF.
get all declared attributes
LO_EL_CHECK_BOX_NODE->GET_STATIC_ATTRIBUTES(
IMPORTING
STATIC_ATTRIBUTES = LS_CHECK_BOX_NODE ).
IF LO_EL_CHECK_BOX_NODE is NOT INITIAL.
LO_EL_CHECK_BOX_NODE->get_path( EXPORTING WITHOUTCONTROLLER = 'X'
RECEIVING path = Iv_path ).
ENDIF.
CONCATENATE Iv_path '.CHECK_BOX_VALUE' INTO Iv_path.
RS END
* LR_CONTAINER ?= VIEW->GET_ELEMENT( 'ROOTUIELEMENTCONTAINER' ).
LR_CONTAINER ?= VIEW->GET_ELEMENT( 'TP2' ).
LR_CHECKBOX = CL_WD_CHECKBOX=>NEW_CHECKBOX(
TEXT = IV_TEXT " 'WD_Processor'
BIND_CHECKED = IV_PATH "'CHECK_BOX_NODE.CHECK_BOX_VALUE' "'CHECK_OPTION.BASIC'
VIEW = VIEW ).
cl_wd_matrix_data=>new_matrix_data( EXPORTING
element = lr_checkbox
RECEIVING
control = lo_matrix_data ).
CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( EXPORTING
ELEMENT = LR_CHECKBOX
RECEIVING
CONTROL = LO_MATRIX_DATA1 ).
lr_checkbox->set_layout_data( lo_matrix_data ).
LR_CHECKBOX->SET_LAYOUT_DATA( LO_MATRIX_DATA1 ).
LR_CONTAINER->ADD_CHILD( LR_CHECKBOX ).
AND
BEFORE CONCATENATE
IV_PATH = 1.CHECK_BOX_NODE.1
AFTER CONCATENATE
1.CHECK_BOX_NODE.1.CHECK_BOX_VALUE
IT IS COMING FOR ALL CHECK BOX
AND THE VALUE IS COMING, AND AL THE CHECKBOX GETTING SELECTED AGAIN
Rakhar,
You are not creating elements of CHECK_BOX_NODE, thats why all the checkbox are binded to first element.
You have to create and bind elements for node CHECK_BOX_NODE. Then only your problem will get solved.
lo_nd_node = wd_context->get_child_node( name = 'CHECK_BOX_NODE' ).
lo_el_node = lo_nd_node->create_element( ).
lo_nd_node->bind_element( lo_el_node ).
Put this code inside the loop.
Regards,
Amit
Hello Amit,
i have a small doubt in webdynpro.
isuue:- i have two input filed one is for " MATNR" and second input filed " Material Description"
I have to chhose the MATNR by pressing f4 (it is standard search help), it will come from MARA table.
Once it is filled the second inputfiled shoul filled automaticaly base upon the MATNR with readonly mode.
can you please any sample code for the same if you have any...
Thanks in adv!!!
User | Count |
---|---|
91 | |
10 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.