cancel
Showing results for 
Search instead for 
Did you mean: 

BOPF create new vehicle resource

ndreas_hanke
Explorer
0 Kudos

Hi everyone,

I am beginning with the development of BOPF's
but I have some problems with the creation of a new BOPF object.

I created a ABAP Report with two steps.

In first step I am reading from an existing vehicle resource without problems.

In contrast, the creation of a new vehicle resource is not possible and I get no error messages thatmight help.

  Attached my ABAP report.

Thanks for your help

Andreas

Accepted Solutions (0)

Answers (1)

Answers (1)

ndreas_hanke
Explorer
0 Kudos

The source code ...

REPORT ZREP_GET_VEHICLE.


DATA: lo_srv_trq TYPE REF TO /bobf/if_tra_service_manager,
      ls_selpar TYPE /bobf/s_frw_query_selparam,
      lt_selpar TYPE /bobf/t_frw_query_selparam,
      lo_message TYPE REF TO /bobf/if_frw_message,
      lo_tra TYPE REF TO /bobf/if_tra_transaction_mgr,
      ls_query_inf TYPE /bobf/s_frw_query_info,
      lt_key TYPE /bobf/t_frw_key,
      lt_root TYPE /SCMTMS/T_RES_VEH_ROOT_K,
      ls_root TYPE /SCMTMS/s_RES_VEH_ROOT_K,
      ls_root_save TYPE /SCMTMS/s_RES_VEH_ROOT_K,
      lt_failed_key TYPE /bobf/t_frw_key,
      lt_common TYPE /BOFU/T_BUPA_COMMON_K,
      ls_common TYPE /BOFU/s_BUPA_COMMON_K,
      lt_link TYPE /bobf/t_frw_key_link,
      lt_item_key TYPE /bobf/t_frw_key,
      lv_msg_text TYPE string,
       lv_rejected TYPE abap_bool,
       lt_rej_bo_key TYPE /bobf/t_frw_key2,
      lt_mod TYPE /bobf/t_frw_modification,
      ls_mod TYPE /bobf/s_frw_modification,
      lo_chg TYPE REF TO /bobf/if_tra_change,
      lt_messages TYPE /bobf/t_frw_message_k,
      lv_test        type wdy_boolean.

FIELD-SYMBOLS: <ls_root> TYPE /SCMTMS/S_RES_VEH_ROOT_K,
               <ls_message> LIKE LINE OF lt_messages.

* Get an instance of a service manager for e.g. BO BusinessPartner
lo_srv_trq = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( /SCMTMS/IF_RES_VEHICLE_C=>sc_bo_key ).

* set an example query parameter
clear ls_selpar.
ls_selpar-attribute_name = /SCMTMS/IF_RES_VEHICLE_C=>SC_QUERY_ATTRIBUTE-ROOT-QU_BY_ATTRIBUTES-VEHICLERES_ID.
ls_selpar-option = 'EQ'.
ls_selpar-sign = 'I'.
ls_selpar-low = 'T-RES-AHA'.
APPEND ls_selpar TO lt_selpar.

lo_srv_trq->query( EXPORTING iv_query_key = /SCMTMS/IF_RES_VEHICLE_C=>SC_QUERY-ROOT-QU_BY_ATTRIBUTES
                             it_selection_parameters = lt_selpar
                   IMPORTING eo_message = lo_message
                             es_query_info = ls_query_inf
                             et_key = lt_key ).

CALL METHOD LO_MESSAGE->CHECK( RECEIVING EV_ERROR_MESSAGES = lv_test ).


if lv_test eq abap_false.

  lo_srv_trq->retrieve( EXPORTING iv_node_key = /SCMTMS/IF_RES_VEHICLE_C=>sc_node-root
                                  it_key = lt_key
                                  iv_edit_mode = /bobf/if_conf_c=>sc_edit_read_only
                        IMPORTING eo_message = lo_message
                                  et_data = lt_root
                                  et_failed_key = lt_failed_key ).

  read table lt_root into ls_root INDEX 1.
  if sy-subrc eq 0.
    ls_root_save = ls_root.
    write: 'Name of the vehicle is ', ls_root-VEHICLERES_ID.
  ENDIF.


*  create new resource*************************************************
  clear ls_mod.
  ls_mod-node = /SCMTMS/IF_RES_VEHICLE_C=>sc_node-root.
  ls_mod-key = /bobf/cl_frw_factory=>get_new_key( ).

  ls_mod-change_mode = /bobf/if_frw_c=>sc_modify_create.
  CREATE DATA ls_mod-data TYPE /SCMTMS/S_RES_VEH_ROOT_K.

  ASSIGN ls_mod-data->* TO <ls_root>.
  move-CORRESPONDING ls_root_save to <ls_root>.
  <ls_root>-key = ls_mod-key.
  <ls_root>-VEHICLERES_ID = 'T-RES-AHA1'.
  APPEND ls_mod TO lt_mod.

  lo_srv_trq->modify( EXPORTING it_modification = lt_mod
                      IMPORTING eo_change = lo_chg
                                eo_message = lo_message ).

  if LO_MESSAGE->check( ) eq abap_true.
    lo_message->get_messages( IMPORTING et_message = lt_messages ).
    LOOP AT lt_messages ASSIGNING <ls_message>.
      lv_msg_text = <ls_message>-message->get_text( ).
      WRITE: / lv_msg_text.
    ENDLOOP.
  else.
*    Save transaction to get data persisted
    lo_tra = /bobf/cl_tra_trans_mgr_factory=>get_transaction_manager( ).
    lo_tra->save( IMPORTING ev_rejected = lv_rejected
                            eo_change = lo_chg
                            eo_message = lo_message
                            et_rejecting_bo_key = lt_rej_bo_key ).

    if LO_MESSAGE->check( ) eq abap_true.
      lo_message->get_messages( IMPORTING et_message = lt_messages ).
      LOOP AT lt_messages ASSIGNING <ls_message>.
        lv_msg_text = <ls_message>-message->get_text( ).
        WRITE: / lv_msg_text.
      ENDLOOP.
    endif.
  endif.

endif.

Clark_Huang
Advisor
Advisor
0 Kudos

Hi Andreas,

You can try to add the parameter "node_cat" of "ls_mod" as below.

"ls_mod-node_cat =  /SCMTMS/IF_RES_VEHICLE_C=>sc_node_category-root-root."

Best Regards

Clark Huang

ndreas_hanke
Explorer
0 Kudos

Hi Clark,

thanks for your help. But your solution doesn't work. Attached my new report

REPORT ZREP_GET_VEHICLE.

DATA: lo_srv_trq TYPE REF TO /bobf/if_tra_service_manager,

       ls_selpar TYPE /bobf/s_frw_query_selparam,

       lt_selpar TYPE /bobf/t_frw_query_selparam,

       lo_message TYPE REF TO /bobf/if_frw_message,

       lo_tra TYPE REF TO /bobf/if_tra_transaction_mgr,

       ls_query_inf TYPE /bobf/s_frw_query_info,

       lt_key TYPE /bobf/t_frw_key,

       lt_root TYPE /SCMTMS/T_RES_VEH_ROOT_K,

       ls_root TYPE /SCMTMS/s_RES_VEH_ROOT_K,

       ls_root_save TYPE /SCMTMS/s_RES_VEH_ROOT_K,

       lt_failed_key TYPE /bobf/t_frw_key,

       lt_common TYPE /BOFU/T_BUPA_COMMON_K,

       ls_common TYPE /BOFU/s_BUPA_COMMON_K,

       lt_link TYPE /bobf/t_frw_key_link,

       lt_item_key TYPE /bobf/t_frw_key,

       lv_msg_text TYPE string,

        lv_rejected TYPE abap_bool,

        lt_rej_bo_key TYPE /bobf/t_frw_key2,

       lt_mod TYPE /bobf/t_frw_modification,

       ls_mod TYPE /bobf/s_frw_modification,

       lo_chg TYPE REF TO /bobf/if_tra_change,

       lt_messages TYPE /bobf/t_frw_message_k,

       lv_test        type wdy_boolean.

FIELD-SYMBOLS: <ls_root> TYPE /SCMTMS/S_RES_VEH_ROOT_K,

                <ls_message> LIKE LINE OF lt_messages.

* Get an instance of a service manager for e.g. BO BusinessPartner

lo_srv_trq = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( /SCMTMS/IF_RES_VEHICLE_C=>sc_bo_key ).

* set an example query parameter

clear ls_selpar.

ls_selpar-attribute_name = /SCMTMS/IF_RES_VEHICLE_C=>SC_QUERY_ATTRIBUTE-ROOT-QU_BY_ATTRIBUTES-VEHICLERES_ID.

ls_selpar-option = 'EQ'.

ls_selpar-sign = 'I'.

ls_selpar-low = 'T-RES-AHA'.

APPEND ls_selpar TO lt_selpar.

lo_srv_trq->query( EXPORTING iv_query_key = /SCMTMS/IF_RES_VEHICLE_C=>SC_QUERY-ROOT-QU_BY_ATTRIBUTES

                              it_selection_parameters = lt_selpar

                    IMPORTING eo_message = lo_message

                              es_query_info = ls_query_inf

                              et_key = lt_key ).

CALL METHOD LO_MESSAGE->CHECK( RECEIVING EV_ERROR_MESSAGES = lv_test ).

if lv_test eq abap_false.

   lo_srv_trq->retrieve( EXPORTING iv_node_key = /SCMTMS/IF_RES_VEHICLE_C=>sc_node-root

                                   it_key = lt_key

                                   iv_edit_mode = /bobf/if_conf_c=>sc_edit_read_only

                         IMPORTING eo_message = lo_message

                                   et_data = lt_root

                                   et_failed_key = lt_failed_key ).

   read table lt_root into ls_root INDEX 1.

   if sy-subrc eq 0.

     ls_root_save = ls_root.

     write: 'Name of the vehicle is ', ls_root-VEHICLERES_ID.

   ENDIF.

*  create new resource*************************************************

   clear ls_mod.

   ls_mod-node = /SCMTMS/IF_RES_VEHICLE_C=>sc_node-root.

   ls_mod-key = /bobf/cl_frw_factory=>get_new_key( ).

   ls_mod-node_cat /SCMTMS/IF_RES_VEHICLE_C=>sc_node_category-root-root.

   ls_mod-change_mode = /bobf/if_frw_c=>sc_modify_create.

   CREATE DATA ls_mod-data TYPE /SCMTMS/S_RES_VEH_ROOT_K.

   ASSIGN ls_mod-data->* TO <ls_root>.

   move-CORRESPONDING ls_root_save to <ls_root>.

   <ls_root>-key = ls_mod-key.

   <ls_root>-VEHICLERES_ID = 'T-RES-AHA1'.

   APPEND ls_mod TO lt_mod.

   lo_srv_trq->modify( EXPORTING it_modification = lt_mod

                       IMPORTING eo_change = lo_chg

                                 eo_message = lo_message ).

*    Save transaction to get data persisted

   lo_tra = /bobf/cl_tra_trans_mgr_factory=>get_transaction_manager( ).

   lo_tra->save( IMPORTING ev_rejected = lv_rejected

                           eo_change = lo_chg

                           eo_message = lo_message

                           et_rejecting_bo_key = lt_rej_bo_key ).

   if LO_MESSAGE->check( ) eq abap_true.

     lo_message->get_messages( IMPORTING et_message = lt_messages ).

     LOOP AT lt_messages ASSIGNING <ls_message>.

       lv_msg_text = <ls_message>-message->get_text( ).

       WRITE: / lv_msg_text.

     ENDLOOP.

   endif.

endif.

Clark_Huang
Advisor
Advisor
0 Kudos

Hi Andreas,

I found that the resource should be created in SAP GUI "/SCMTMS/RES01" which not in BOPF framework.

You can use the BAPI "BAPI_RSSRVSCMB_SAVEMULTI2'" to create resources as below.

Best Regards

Clark Huang

ndreas_hanke
Explorer
0 Kudos

Hi Clark,

it works.

Best regards

Andreas

Former Member
0 Kudos

Hi Andreas,

Can you please provide the minimal data for the Vehicle creations.

Do you have any test data, if yes can you please provide the same.

Thanks in advance.

Regards,

Sanket.