cancel
Showing results for 
Search instead for 
Did you mean: 

access data in structure

Former Member
0 Kudos

Hi,

I am trying to access some data in my structure CRMA_PARTNER.

On doing this i am getting an error:

Field CRMA_PARTNER-PARTNER_NO is unknown.

Following is my code:

method INIT_CHANGEHISTORY.
DATA: lr_ent TYPE REF TO if_bol_bo_property_access,
ls_adminh TYPE crmst_adminh_btil,
lt_ch TYPE crmt_cdorder_alv_tab,
lr_ch TYPE REF TO crmt_cdorder_alv,
ls_ch TYPE crmt_cdorder_alv,
lv_value_node1 TYPE REF TO cl_bsp_wd_value_node,
lv_value_node TYPE REF TO cl_bsp_wd_value_node.

lr_ent = me->typed_context->btadminh->collection_wrapper->get_current( ).
CHECK lr_ent IS BOUND.

lr_ent->get_properties( IMPORTING es_attributes = ls_adminh ).

CALL FUNCTION 'CRM_CDORDER_DISPLAY'
EXPORTING
iv_header_guid = ls_adminh-guid
iv_object = ls_adminh-object_id
iv_bus = ls_adminh-object_type
i_no_dialogue = abap_true
IMPORTING
ausg = lt_ch.

CALL FUNCTION 'CRM_LOG_READ_EXTENDED'
EXPORTING
iv_header_guid = ls_adminh-guid
CHANGING
et_cdorder = lt_ch.

    * removing all item related change logs

DELETE lt_ch WHERE number_int IS NOT INITIAL.

    * show newest entry first

SORT lt_ch BY udate DESCENDING utime DESCENDING.

    * clear old collection

me->typed_context->changehistoryvn->collection_wrapper->clear( ).
DATA :
LV_TABNAME TYPE STRING.

    * create new entities and add them to the collection


CREATE DATA lr_ch.
LOOP AT lt_ch INTO ls_ch.
CREATE OBJECT lv_value_node
EXPORTING
iv_data_ref = lr_ch.
lv_value_node->if_bol_bo_property_access~set_properties( ls_ch ).
LV_TABNAME = LV_VALUE_NODE->GET_PROPERTY_AS_STRING( IV_ATTR_NAME = 'TABNAME' ).
IF LV_TABNAME = 'CRMA_PARTNER'.
LV_PARTNER = CRMA_PARTNER-PARTNER_NO.
ENDIF.
me->typed_context->changehistoryvn->collection_wrapper->add( lv_value_node ).
ENDLOOP.

me->typed_context->changehistoryvn->sort( ). " keep the sorting

endmethod.

Please help!

Any pointers would be highly appreciated.

Thanks and Regards

Shilpi

Edited by: Matt on Dec 12, 2008 10:05 AM - please use tags around your abap

Accepted Solutions (0)

Answers (2)

Answers (2)

uwe_schieferstein
Active Contributor
0 Kudos

Hello Shilpi

I have no experience with BSP applications yet it might be that your data objects should reflect a table type on your BSP application.


data: ldo_data    TYPE REF TO data.
 
FIELD-SYMBOLS:
  <lt_itab>          TYPE table,
  <ls_struct>      TYPE any,
  <ld_fld>           TYPE any.
...
LV_TABNAME = LV_VALUE_NODE->GET_PROPERTY_AS_STRING( IV_ATTR_NAME = 'TABNAME' ).
IF LV_TABNAME = 'CRMA_PARTNER'.
  ldo_data = LV_VALUE_NODE->GET_PROPERTY( iv_attr_name = 'CRMA_PARTNER' ).
 
"  ASSIGN ldo_data->* TO <ls_struct>.
  ASSIGN ldo_data->* TO <lt_itab>.

  LOOP AT <lt_Itab> ASSIGNING <ls_struct>.
    ASSIGN COMPONENT 'PARTNER_NO' OF STRUCTURE <ls_struct>
                                                              TO <ld_fld>.
    IF ( syst-subrc  = 0 ).
      lv_partner = <ld_fld>.
    ENDIF.
  ENDLOOP.


 
"  LV_PARTNER = CRMA_PARTNER-PARTNER_NO.
ENDIF.
...

Regards

Uwe

uwe_schieferstein
Active Contributor
0 Kudos

Hello Shilpi

I assume that you logic should look like this: the instance returns a data reference to your structure (or even directly to the structure component) and you need to de-reference it.


data: ldo_data    TYPE REF TO data.

FIELD-SYMBOLS:
  <ls_struct>      TYPE any,
  <ld_fld>           TYPE any.
...
LV_TABNAME = LV_VALUE_NODE->GET_PROPERTY_AS_STRING( IV_ATTR_NAME = 'TABNAME' ).
IF LV_TABNAME = 'CRMA_PARTNER'.
  ldo_data = LV_VALUE_NODE->GET_PROPERTY( iv_attr_name = 'CRMA_PARTNER' ).
                                                                                " Or: 'CRMA_PARTNER-PARTNER_NO'

  ASSIGN ldo_data->* TO <ls_struct>.
  ASSIGN COMPONENT 'PARTNER_NO' TO <ld_fld>.
  IF ( syst-subrc  = 0 ).
    lv_partner = <ld_fld>.
  ENDIF.

"  LV_PARTNER = CRMA_PARTNER-PARTNER_NO.
ENDIF.
...

Regards

Uwe

Former Member
0 Kudos

Hi Uwe,

Thanks for the reply.

I wrote the following code:

data: ldo_data    TYPE REF TO data,
                  LV_PARTNER TYPE STRING.

FIELD-SYMBOLS:
  <ls_struct>      TYPE any,
  <ld_fld>           TYPE any.

    lv_value_node->if_bol_bo_property_access~set_properties( ls_ch ).
   LV_TABNAME =  LV_VALUE_NODE->GET_PROPERTY_AS_STRING( IV_ATTR_NAME = 'TABNAME' ).
   IF LV_TABNAME = 'CRMA_PARTNER'.
     Ldo_data = lv_value_node->get_property( IV_ATTR_NAME = 'TABNAME' ).
     ASSIGN ldo_data->* to <ls_struct>.
     ASSIGN COMPONENT 'PARTNER_NO' OF STRUCTURE <LS_STRUCT> TO  <LD_FLD>.
     IF SY-SUBRC EQ 0.
       LV_PARTNER = <LD_FLD>.
     ENDIF.

Now when i debug:

The LDO_DATA only consists of string CRMA_PARTNER.

It does not give me the data:(

what is the possible reason?

Thanks and Regards

Shilpi

Edited by: Matt on Dec 12, 2008 10:06 AM - please use tags around your ABAP

Former Member
0 Kudos

When i click on ldo_data = CRMA_PARTNER in debugger and try to further navigate to CRMA_PARTNER.It says the variable CRMA_PARTNER is unknown.

Thanks and Regards

Shilpi

Former Member
0 Kudos

Hi,

CRMA_PARTNER structure is not even associated with any transparent table type!

What to do in such cases?

Thanks and Regards

Shilpi