cancel
Showing results for 
Search instead for 
Did you mean: 

setting the value of a single attribute for multiple line items

Former Member
0 Kudos

Hi all,

I am working on a Web Dynpro application, I have created this applicaion for an accounting document so it has header data and multiple line item data. As per the requirement I have to put the following logic:

1. When a user enters a value in the field KBLNR on the line item, all the other fields like cost centerm fund, functional area should populate from a database table based on the value of the KBLNR. to get this I have put the following code:

TYPES: BEGIN OF t_kblp,
          fipos     TYPE kblp-fipos,
          kostl     TYPE kostl,
                  END OF t_kblp.
 
 
  DATA lv_kblnr TYPE wd_this->element_t_bseg-kblnr.
  DATA: lt_kblp TYPE STANDARD TABLE OF t_kblp,
        wa_kblp LIKE LINE OF lt_kblp,
        lt_bseg              TYPE STANDARD TABLE OF bseg,
        wa_bseg              TYPE bseg.
 
  DATA lo_nd_t_bseg TYPE REF TO if_wd_context_node.
 
  DATA lo_el_t_bseg TYPE REF TO if_wd_context_element.
  DATA: ls_t_bseg TYPE wd_this->element_t_bseg,
        lo_api_controller    TYPE REF TO if_wd_controller,
        lo_message_manager   TYPE REF TO if_wd_message_manager,
        lo_nd_tbseg          TYPE REF TO if_wd_context_node,
         lo_el_tbseg          TYPE REF TO if_wd_context_element,
         lt_el_tbseg          TYPE wdr_context_element_set,
         lv_bseg              TYPE bseg.
 
 
*
  lo_nd_t_bseg = wd_context->path_get_node( path = `ZDATA.CHANGING.T_BSEG` ).
  lo_api_controller ?= wd_this->wd_get_api( ).
 
  CALL METHOD lo_api_controller->get_message_manager
    RECEIVING
      message_manager = lo_message_manager.
 
  lo_nd_tbseg = wd_context->path_get_node( path = `ZDATA.CHANGING.T_BSEG` ).
  lt_el_tbseg = lo_nd_tbseg->get_elements( ).
 
  LOOP AT lt_el_tbseg INTO lo_el_tbseg.
    lo_el_tbseg->get_static_attributes(
                           IMPORTING static_attributes = lv_bseg ).
 
  IF lv_bseg-kblnr NE ' '.
 
      SELECT belnr
             fipos
             kostl
             PSPNR
             geber
             saknr
             fkber
             grant_nbr
             gsber
             FROM kblp
             inTO corresponding fields of wa_kblp
             WHERE belnr = lv_bseg-kblnr and
                  saknr = lv_bseg-saknr.
        ENDSELECT.

lo_nd_t_bseg = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG` ).


* get element via lead selection
        lo_el_t_bseg = lo_nd_t_bseg->get_element( ).

lo_el_tbseg->set_static_attributes(
                           EXPORTING static_attributes = wa_kblp ).

   CLEAR: lv_bseg, wa_kblp.
  ENDLOOP.

everything is working fine but now the problem is couple of fields that I have in wa_kblp are with different names in bseg table and hence they are not updating... I tried putting the following logic within the loop :

lo_el_t_bseg->set_attribute(
    name =  `PROJK`
 value = wa_kblp-pspnr ).

but it's only setting the value of the first line item and not working for the multiple line items, can you please tell me how can do this?

Thanks,

Rajat Garg

Edited by: rajatg on Jun 24, 2011 5:09 PM

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

As far as i know, with both your codes to set the attributes, only one line item(lead selected element) will be updated.

with set_attribute( ) only one attribute is getting updated and with set_static_attributes() all the attributes that have the same name as the ones in wa_kblp will get updated.

to solve that, what you need to do is assign the corresponding fields of wa_kblp to the fields of wa_bseg. then pass wa_bseg to set_static_attributes( ).

And to be able to set the attributes of all line elements, you need to get the elements based on the index(loop iteration number).

I hope i am clear!

Best Regards,

Srilatha

Former Member
0 Kudos

Hi Srilatha,

I already tried this logic "to solve that, what you need to do is assign the corresponding fields of wa_kblp to the fields of wa_bseg. then pass wa_bseg to set_static_attributes( )."

the problem here is in kblp earmarked funds document iss called BELNR while in BSEG it is called KBLNR and same way in KBLP WBS element is called PSPNR and in BSEG it is called PROJK

Edited by: rajatg on Jun 24, 2011 8:02 PM

Edited by: rajatg on Jun 24, 2011 8:09 PM

Former Member
0 Kudos

any further suggestion please

Former Member
0 Kudos

Hi Raja,

My suggestion is, first do coding like taht all your desired data could be in one internal table within the loop.

dont use set_attribute in the loop. after getting all your line item data into one internal table ( which you want to show in out put ).

Then you use bind_table method to display line item data outside the loop. Try this, hope it helps.

Cheers,

Kris.

Former Member
0 Kudos

Hi Chris,

I tried your code and it worked fine but after I put this code I am getting another issue. within the loop I had a code to make the fields non modifiable on the screen and was working fine but now what's happening is it's making the all the lines uneditable except the one with data on it (which is completely opposite), this is what I have coded:

LOOP AT lt_el_tbseg INTO lo_el_tbseg.

lo_el_tbseg->get_static_attributes(

IMPORTING static_attributes = lv_bseg ).

IF lv_bseg-kblnr NE ' '.

SELECT belnr

fipos

kostl

PSPNR

geber

saknr

fkber

grant_nbr

gsber

FROM kblp

inTO corresponding fields of wa_kblp

WHERE belnr = lv_bseg-kblnr and

saknr = lv_bseg-saknr.

ENDSELECT.

move: wa_kblp-belnr to wa_bseg-kblnr,

wa_kblp-fipos to wa_bseg-fipos,

wa_kblp-kostl to wa_bseg-kostl,

wa_kblp-pspnr to wa_bseg-projk,

wa_kblp-geber to wa_bseg-geber,

wa_kblp-saknr to wa_bseg-saknr,

wa_kblp-fkber to wa_bseg-fkber,

wa_kblp-grant_nbr to wa_bseg-grant_nbr,

wa_kblp-gsber to wa_bseg-gsber,

lv_bseg-dmbtr to wa_bseg-dmbtr.

append wa_bseg to lt_bseg.

lo_nd_edit_property = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG.EDIT_PROPERTY` ).

  • get element via lead selection

lo_el_edit_property = lo_nd_edit_property->get_element( ).

lo_el_edit_property->set_attribute(

name = `EDIT_FIELD`

value = 'ABAP_TRUE' ).

lo_el_edit_property->set_attribute(

name = `EDIT_WBS`

value = 'ABAP_TRUE' ).

endif.

endloop.

o_nd_t_bseg = wd_context->path_get_node( path = `ZPRELIMINARY_POSTING.CHANGING.T_BSEG` ).

  • get element via lead selection

lo_el_t_bseg = lo_nd_t_bseg->get_element( ).

CALL METHOD lo_nd_t_bseg->bind_table

EXPORTING

new_items = lt_bseg.

Can you please see what I am doing it wrong here....

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Raja,

Same question you are asking again, you already closed your thred.

Cheers,

Kris.

Former Member
0 Kudos

Hey Kris,

it's not exactly the same question... I was able to resolve the previous one the way you suggested but I have another problem within the same scenario.... so I am looking for some help on tht