这个例子演示了怎么获取BOL的数据。
DATA iv_guid TYPE crmt_object_guid.
iv_guid = '*********************************'.
CHECK iv_guid IS NOT INITIAL .
DATA lv_bol_core TYPE REF TO cl_crm_bol_core.
lv_bol_core = cl_crm_bol_core=>get_instance( ).
lv_bol_core->start_up( 'ONEORDER' ).
DATA lv_root TYPE REF TO cl_crm_bol_entity.
TRY.
CALL METHOD lv_bol_core->get_root_entity
EXPORTING
iv_object_name = 'BTOrder'
iv_object_guid = iv_guid
RECEIVING
rv_result = lv_root.
CATCH cx_crm_genil_model_error .
ENDTRY.
CHECK lv_root IS BOUND .
DATA lr_header TYPE REF TO cl_crm_bol_entity.
lr_header = lv_root->get_related_entity( iv_relation_name = 'BTOrderHeader' ).
CHECK lr_header IS BOUND .
DATA lr_datesset TYPE REF TO cl_crm_bol_entity.
lr_datesset = lr_header->get_related_entity( iv_relation_name = 'BTHeaderDatesSet' ).
CHECK lr_datesset IS BOUND .
DATA lr_datesall TYPE REF TO if_bol_entity_col.
lr_datesall = lr_datesset->get_related_entities( iv_relation_name = 'BTDatesAll' ).
CHECK lr_datesall IS BOUND.
DATA lr_iterator TYPE REF TO if_bol_entity_col_iterator.
DATA lr_property_access TYPE REF TO if_bol_bo_property_access.
DATA ls_date TYPE crmst_date_btil.
lr_iterator ?= lr_datesall->get_iterator( ).
CHECK lr_iterator IS BOUND.
lr_property_access ?= lr_iterator->get_first( ).
CHECK lr_property_access IS BOUND.
CALL METHOD lr_property_access->get_properties
IMPORTING
es_attributes = ls_date.
IF 条件判断.
逻辑代码
ENDIF.
WHILE lr_property_access IS BOUND.
CALL METHOD lr_property_access->get_properties
IMPORTING
es_attributes = ls_date.
IF 条件判断.
逻辑代码
ENDIF.
lr_property_access ?= lr_iterator->get_next( ).
ENDWHILE.
其实可以用这个方式操作BOL数据。增删改都行。
不过要记得加这几行代码。
lv_bol_core->modify( ).
DATA lv_transaction TYPE REF TO if_bol_transaction_context.
lv_transaction = lv_bol_core->get_transaction( ).
CHECK lv_transaction IS BOUND .
CHECK lv_transaction->check_save_possible( ) EQ abap_true.
CHECK lv_transaction->save( ) EQ abap_true.
lv_transaction->commit( ).