Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

cannot update PRPS table for zcustom field with BAPI_BUS2054_CHANGE_MULTI

siongchao_ng
Contributor
0 Kudos
1,663

Hi all,

based o below code although i get success message from bapi claiming table has been updated but my particular custom z field remains empty. What is going on here?

The PRPS table changed on date shows there is changes

But my zwork_package field still empty. Nothing happened.

Anything wrong with the code below? I debug and there is really values inside gw_prps-zwork_package

FORM f_update_wbs .<br><br>  DATA:lv_flag TYPE c.<br>  FIELD-SYMBOLS : <ls_output> TYPE gty_wbs.<br>  DATA ls_wbs_element     TYPE bapi_bus2054_chg.<br>  DATA lt_wbs_element     TYPE TABLE OF bapi_bus2054_chg.<br>  DATA ls_wbs_element_up TYPE bapi_bus2054_upd.<br>  DATA lt_wbs_element_up TYPE TABLE OF bapi_bus2054_upd.<br>  DATA ls_extensionin        TYPE bapiparex.<br>  DATA lt_extensionin        TYPE TABLE OF bapiparex.<br>  DATA ls_te_wbs_element     TYPE bapi_te_wbs_element.<br><br>  UNASSIGN <ls_output>.<br>  LOOP AT gt_output ASSIGNING <ls_output> WHERE stufe = '3' OR stufe = '4'.<br><br>    CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'<br>      EXPORTING<br>        input  = <ls_output>-posid<br>      IMPORTING<br>        output = <ls_output>-posid.<br><br>    CLEAR gw_prps.<br>    READ TABLE gt_prps INTO gw_prps WITH KEY posid = <ls_output>-posid.<br>    IF sy-subrc = 0.<br><br>      gw_prps-ZWORK_PACKAGE = <ls_output>-ZWORK_PACKAGE.<br><br>*      CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'<br>*        EXPORTING<br>*          input  = gw_prps-pspnr<br>*        IMPORTING<br>*          output = gw_prps-posid.<br><br>      MOVE-CORRESPONDING gw_prps TO gwa_wbs.<br><br>*     remaining fields to be updated<br>      gwa_wbs-pspid = <ls_output>-pspid.<br>      gwa_wbs-ZWORK_PACKAGE = <ls_output>-ZWORK_PACKAGE.<br>    ENDIF.<br><br>*    MOVE-CORRESPONDING <ls_output> TO gwa_wbs.<br>*    PERFORM f_populate_new_fields USING gwa_wbs.<br><br>* Project<br>    gw_project_definition = <ls_output>-pspid.<br><br>*--------------------------------------------------------------------*<br>    ls_wbs_element-wbs_element = gw_prps-posid.<br>    APPEND ls_wbs_element TO lt_wbs_element.<br><br>*--------------------------------------------------------------------*<br>    ls_wbs_element_up-wbs_element = gw_prps-posid.<br>    APPEND ls_wbs_element_up TO lt_wbs_element_up.<br><br>*--------------------------------------------------------------------*<br>    CLEAR ls_extensionin.<br>    ls_extensionin-structure = 'BAPI_TE_WBS_ELEMENT'. " Extension Structure<br><br>* Pass the Key.. Important<br>    ls_te_wbs_element-wbs_element = gw_prps-posid. " Key to identify the custom fields<br><br>* These are the custom fields. You will have your own logic to get the data<br>* to be populated<br>    ls_te_wbs_element-ZWORK_PACKAGE = gw_prps-ZWORK_PACKAGE.<br><br>    ls_extensionin-valuepart1 = ls_te_wbs_element. "ls_te_wbs_element-ZWORK_PACKAGE.<br><br>    APPEND ls_extensionin TO lt_extensionin.<br>*--------------------------------------------------------------------*<br><br>    CALL FUNCTION 'BAPI_PS_INITIALIZATION'.<br><br><br><br><br><br>    CALL FUNCTION 'BAPI_BUS2054_CHANGE_MULTI'<br>      EXPORTING<br>        i_project_definition  = gw_project_definition<br>      TABLES<br>        it_wbs_element        = lt_wbs_element "gt_wbs_imp_cm<br>        it_update_wbs_element = lt_wbs_element_up "gt_wbs_impf_cm<br>        et_return             = gt_return1<br>        extensionin           = lt_extensionin "gt_extensionin " Here we have custom field<br>        extensionout          = gt_extensionout.<br><br>*    * Pre Commit Check<br>    CALL FUNCTION 'BAPI_PS_PRECOMMIT'<br>      TABLES<br>        et_return = gt_return1.<br><br>*    * Looking for error<br>* Looking for error<br>    READ TABLE gt_return1 INTO gwa_return1 WITH KEY type = 'E'.<br>    IF sy-subrc EQ 0.<br>      PERFORM f_get_project_def_output USING gw_project_definition<br>                                        CHANGING po_pspid.<br>      gwa_errorlog-pspid   = po_pspid.<br>      gwa_errorlog-budat   = sy-datum.<br>      gwa_errorlog-status  = 'E'.<br>      gwa_errorlog-message = 'Error in updating custom fields, please check'.<br>      APPEND gwa_errorlog TO gt_errorlog.<br>      CLEAR po_pspid.<br>* Add your ERROR message as per requirement<br><br>* Rollback<br>      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.<br><br>    ELSE.<br>* Add your SUCCESS message as per requirement<br><br>* Do the commit<br>      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'<br>        EXPORTING<br>          wait = 'X'.<br><br>    ENDIF.<br>
1 ACCEPTED SOLUTION

RaymondGiuseppi
Active Contributor
0 Kudos
1,441

Did you

  • Pass whole data of CI_PRPS to BAPI_TE_WBS_ELEMENT (else you will clear previous values)
  • Check that BAPI_TE_WBS_ELEMENT isn't wider than 240 characters
  • Forget to check RETURN after call BAPI_BUS2054_CHANGE_MULTI
  • Look for various 'S' or 'w' messages such as 'no data changed'
  • Not use the 'paste as plain text' in the code window
3 REPLIES 3

RaymondGiuseppi
Active Contributor
0 Kudos
1,442

Did you

  • Pass whole data of CI_PRPS to BAPI_TE_WBS_ELEMENT (else you will clear previous values)
  • Check that BAPI_TE_WBS_ELEMENT isn't wider than 240 characters
  • Forget to check RETURN after call BAPI_BUS2054_CHANGE_MULTI
  • Look for various 'S' or 'w' messages such as 'no data changed'
  • Not use the 'paste as plain text' in the code window

0 Kudos
1,441

the custom fields all together has exceeded valuepart1 of 240 chars. I have to cross over to valuepart2 of BAPI to be able to update my custom z field.

here is the code.

TYPES : BEGIN OF gty_proj,
indi(1), " Indicator Create(A)/Change(C)

igdoc TYPE c LENGTH 20, " IGrant Document No

pspid TYPE proj-pspid , " Project definition
post1 TYPE proj-post1 , " PS: Short description
profl TYPE proj-profl , " Project profile
vkokr TYPE proj-vkokr, " CO Area
vbukr TYPE proj-vbukr, " ompany code for the project
vgsbr TYPE proj-vgsbr, " Business area for the project
pwhie TYPE proj-pwhie, " WBS currency (project defin)
plfaz TYPE proj-plfaz, " Project planned start date
plsez TYPE proj-plsez, " Project planned finish date
ltext TYPE c LENGTH 300, " Long Text
END OF gty_proj.

DATA:lv_flag TYPE c VALUE 'X'.

DATA: proj_def TYPE bapi_bus2054_detail-project_definition,
it_wbs_element TYPE TABLE OF bapi_wbs_list ,

it_wbs_element1 TYPE TABLE OF bapi_bus2054_chg,
wa_wbs_element1 TYPE bapi_bus2054_chg,

it_update_tbl TYPE TABLE OF bapi_bus2054_upd,
wa_update_tbl TYPE bapi_bus2054_upd,

et_wbs_element TYPE TABLE OF bapi_bus2054_detail,
wa_wbs_element TYPE bapi_bus2054_detail,

lv_index TYPE i,
et_return TYPE TABLE OF bapiret2,
lwa_reurn TYPE bapiret2,
lt_extensionin TYPE TABLE OF bapiparex,
lt_extensionout TYPE TABLE OF bapiparex,
lwa_extensionin TYPE bapiparex,
lwa_extensionout TYPE bapiparex,
lwa_wbs_ext TYPE bapi_te_wbs_element.

FIELD-SYMBOLS : <ls_output> TYPE gty_wbs.

CLEAR gw_proj.
LOOP AT gt_proj INTO gw_proj.


CALL FUNCTION 'BAPI_PS_INITIALIZATION'.

proj_def = gw_proj-pspid.
CALL FUNCTION 'BAPI_BUS2054_GETDATA'
EXPORTING
i_project_definition = proj_def
* I_LANGUAGE =
* I_MAX_ROWS =
TABLES
it_wbs_element = it_wbs_element
et_wbs_element = et_wbs_element
* ET_RETURN =
* EXTENSIONIN = lt_extensionin
extensionout = lt_extensionout.
IF et_wbs_element[] IS NOT INITIAL.
CLEAR wa_wbs_element.
REFRESH: it_wbs_element1, it_update_tbl. "CH02 it_update_tbl Added
LOOP AT et_wbs_element INTO wa_wbs_element.

* CONCATENATE gwa_proj-plsez+4(4) gwa_proj-plsez+2(2)
* gwa_proj-plsez+0(2) INTO wa_wbs_element1-user_field_date2.

UNASSIGN <ls_output>.
LOOP AT gt_output ASSIGNING <ls_output> WHERE stufe = '3' OR stufe = '4'.

IF wa_wbs_element-wbs_element = <ls_output>-posid.
* lwa_wbs_ext-ZZ_JF5 = <ls_output>-ZZ_WORK_PACKAGE.
wa_wbs_element-user_field_char10_2 = <ls_output>-zz_work_package.
wa_update_tbl-user_field_char10_2 = 'X'.
ENDIF.
ENDLOOP.
*
* wa_update_tbl-user_field_date2 = 'X'.

MOVE-CORRESPONDING wa_wbs_element TO wa_wbs_element1.
APPEND wa_wbs_element1 TO it_wbs_element1.

wa_update_tbl-wbs_element = wa_wbs_element-wbs_element.
APPEND wa_update_tbl TO it_update_tbl.
CLEAR:wa_wbs_element1,wa_wbs_element.
ENDLOOP.

REFRESH: lt_extensionin, et_return. "CH02 Added
LOOP AT lt_extensionout INTO lwa_extensionout.

lwa_extensionin-structure = lwa_extensionout-structure.
lwa_wbs_ext = lwa_extensionout-valuepart1.


* lwa_wbs_ext-zz_loa_agm_dat = space.
* lwa_wbs_ext-ZZ_WORK_PACKAGE = 'TEST'.
* lwa_wbs_ext-ZZ_PROJ_NUM = space.

UNASSIGN <ls_output>.
LOOP AT gt_output ASSIGNING <ls_output> WHERE stufe = '3' OR stufe = '4'.

CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'
EXPORTING
input = <ls_output>-posid
IMPORTING
output = <ls_output>-posid.

IF lwa_wbs_ext-wbs_element = <ls_output>-posid.
* lwa_wbs_ext-ZZ_JF5 = <ls_output>-ZZ_WORK_PACKAGE.
lwa_wbs_ext-zz_work_package = <ls_output>-zz_work_package.
ENDIF.
ENDLOOP.
* CONCATENATE gwa_proj-plsez+4(4) gwa_proj-plsez+2(2)
* gwa_proj-plsez+0(2) INTO lwa_wbs_ext-zz_fpe.

lwa_extensionin-valuepart1 = lwa_wbs_ext.
lwa_extensionin-valuepart2 = lwa_wbs_ext-zz_loa_agm_dat+6(2).
lwa_extensionin-valuepart2+2 = lwa_wbs_ext-zz_work_package(4).
APPEND lwa_extensionin TO lt_extensionin.
CLEAR: lwa_extensionin,lwa_wbs_ext.

ENDLOOP.

REFRESH lt_extensionout.


CALL FUNCTION 'BAPI_BUS2054_CHANGE_MULTI'
EXPORTING
i_project_definition = proj_def
TABLES
it_wbs_element = it_wbs_element1
it_update_wbs_element = it_update_tbl
et_return = et_return
extensionin = lt_extensionin
* EXTENSIONOUT =
.

* * Pre Commit Check
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_return1.

UNASSIGN <ls_output>.
LOOP AT gt_output ASSIGNING <ls_output>.

CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = <ls_output>-posid
IMPORTING
output = <ls_output>-posid.

READ TABLE gt_return1 INTO gwa_return1 WITH KEY parameter = <ls_output>-posid.
IF sy-subrc = 0.
IF gwa_return1-type = 'S'.
<ls_output>-icon = gc_green.
ELSEIF gwa_return1-type = 'E'.
<ls_output>-icon = gc_red.
ELSE.
<ls_output>-icon = gc_yellow.
ENDIF.
<ls_output>-msg = gwa_return1-message.

ENDIF.
ENDLOOP.

* * Looking for error
* Looking for error
READ TABLE gt_return1 INTO gwa_return1 WITH KEY type = 'E'.
IF sy-subrc EQ 0.

IF gwa_return1-parameter IS INITIAL.

UNASSIGN <ls_output>.
LOOP AT gt_output ASSIGNING <ls_output>.
<ls_output>-icon = gc_red.
<ls_output>-msg = gwa_return1-message.
ENDLOOP.

ENDIF.

* Add your ERROR message as per requirement

* Rollback
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ELSE.
* Add your SUCCESS message as per requirement

* Do the commit

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = gw_return1.

ENDIF.

ENDIF.
ENDLOOP.

0 Kudos
1,441

There is a Unicode (and packed.binary.integer fields) compliant method for the mapping

ls_extensionin-structure = 'BAPI_TE_MARC'.
cl_abap_container_utilities=>fill_container_c(
  EXPORTING
    im_value               = lwa_wbs_ext
IMPORTING ex_container = ls_extensionin+30 " values 1-4 EXCEPTIONS illegal_parameter_type = 1 OTHERS = 2 ).