2023 Feb 16 3:44 AM
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>
2023 Feb 16 3:27 PM
Did you
2023 Feb 16 3:27 PM
Did you
2023 Feb 17 3:07 AM
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.
2023 Feb 17 9:50 AM
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 ).