‎2008 Feb 06 3:59 AM
Hi,
I am working on a module pool program.In the o/p screen there are many records.If the user wants to change the field values of a particular record,he clicks on the checkbox besides that record and when he click on the change button,control goes to update screen.In this screen when the user changes the value of one particular field and click on the checkbox beside and then click on the execute button,the changed value of that field should get updated in that particular record in the database table.
I have used FM BAPI_MATERIAL_SAVEDATA to update the database table.
The changed value is getting updated in the update screen but it is not getting updated in the database table.What would be the reason for this?
‎2008 Feb 06 4:03 AM
Hi Radha
Hope it will clear your doubt.
Go thru this code.
REPORT z34332_bdc_create_material .
data: la_headdata type BAPIMATHEAD,
la_clientdata type BAPI_MARA,
la_CLIENTDATAX type BAPI_MARAX,
la_return type BAPIRET2.
data: i_materialdescription type table of BAPI_MAKT,
wa_materialdescription like line of i_materialdescription.
la_headdata-MATERIAL = '000000000000000004'.
la_headdata-IND_SECTOR = 'M'.
la_headdata-MATL_TYPE = 'FERT'.
la_clientdata-BASE_UOM = 'FT3'.
la_CLIENTDATAX-BASE_UOM = 'X'.
la_clientdata-MATL_GROUP = '01'.
la_CLIENTDATAX-MATL_GROUP = 'X'.
wa_materialdescription = 'TEST'.
append wa_materialdescription to i_materialdescription.
clear: wa_materialdescription.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = la_headdata
CLIENTDATA = la_clientdata
CLIENTDATAX = la_CLIENTDATAX
PLANTDATA =
PLANTDATAX =
FORECASTPARAMETERS =
FORECASTPARAMETERSX =
PLANNINGDATA =
PLANNINGDATAX =
STORAGELOCATIONDATA =
STORAGELOCATIONDATAX =
VALUATIONDATA =
VALUATIONDATAX =
WAREHOUSENUMBERDATA =
WAREHOUSENUMBERDATAX =
SALESDATA =
SALESDATAX =
STORAGETYPEDATA =
STORAGETYPEDATAX =
FLAG_ONLINE = ' '
FLAG_CAD_CALL = ' '
IMPORTING
RETURN = la_return
TABLES
MATERIALDESCRIPTION = i_materialdescription
UNITSOFMEASURE =
UNITSOFMEASUREX =
INTERNATIONALARTNOS =
MATERIALLONGTEXT =
TAXCLASSIFICATIONS =
RETURNMESSAGES =
PRTDATA =
PRTDATAX =
EXTENSIONIN =
EXTENSIONINX =
.
write: la_return-TYPE, ',', la_return-MESSAGE.
clear: la_headdata, la_return, la_clientdata, la_clientdatax.
reward if help
‎2008 Feb 06 4:15 AM
Hi Deepanker,
Thanks for replying.
Here I want to update only mvke and marc tables.Even then should i use bapi_mara for clientdata.Is headdata and clientdata mandatory ?What values should I give for headdata and clientdata?
Could u pls explain me clearly?
‎2008 Feb 06 4:25 AM
Hi,
Just a suggestion.After you use the FM use DB_COMMIT also.Sometimes the changes to database tabloe do not get affected.You can use WAIT UP TO 3 seconds also.
Reward if helpful.
Thanks,
Dishant
‎2008 Feb 06 4:53 AM
In the BAPI,
Test run should be space not X
Test_run = ' '
after executing the BAPI, u have to commit the database using
BAPI_TRANSACTION_COMMIT
REWARD IF USEFUL
Narendra
‎2008 Feb 06 5:07 AM
Hi,
I have used FM BAPI_TRANSACTION_COMMIT.But still the values are not getting updated in the database.
I am sending a part of my code please check it.
DATA: GT_BAPI_HEAD LIKE BAPIMATHEAD,
GT_BAPI_CLIENT LIKE BAPI_MARA,
GT_BAPI_CLIENTX LIKE BAPI_MARAX,
GT_BAPI_MARC1 LIKE BAPI_MARC, "Plant view
GT_BAPI_MARCX LIKE BAPI_MARCX,
GT_BAPI_MVKE1 LIKE BAPI_MVKE, "Sales view
GT_BAPI_MVKEX LIKE BAPI_MVKEX,
GT_BAPI_RETURN LIKE BAPIRET2.
PERFORM move_mat_data.
CASE OK_CODE.
WHEN 'EXECUTE'.
IF DCHAIN = c_x.
PERFORM extend_with_bapi.
PERFORM save_data.
ENDIF.
ENDCASE.
&----
*& Form move_mat_data
&----
text
----
--> p1 text
<-- p2 text
----
form move_mat_data .
*Header
gt_bapi_head-material = gs_output1-matnr.
gt_bapi_head-ind_sector = gs_output1-mbrsh.
gt_bapi_head-matl_type = gs_output1-mtart.
gt_bapi_head-basic_view = 'X'.
gt_bapi_head-purchase_view = 'X'.
gt_bapi_head-account_view = 'X'.
*Client
gt_bapi_client-matl_group = gs_output1-matkl.
gt_bapi_client-base_uom = gs_output1-meins.
gt_bapi_clientx-matl_group = 'X'.
gt_bapi_clientx-base_uom = 'X'.
*Plant
gt_bapi_marc1-plant = gs_output1-werks.
gt_bapi_marc1-pur_status = gs_output1-mmsta.
gt_bapi_marc1-mrp_type = gs_output1-dismm.
gt_bapi_marc1-mrp_ctrler = gs_output1-dispo.
gt_bapi_marc1-serv_level = gs_output1-zserclass.
gt_bapi_marc1-availcheck = gs_output1-mtvfp.
gt_bapi_marcx-plant = gs_output1-werks .
gt_bapi_marcx-pur_status = 'X'.
gt_bapi_marcx-mrp_type = 'X'.
gt_bapi_marcx-mrp_ctrler = 'X'.
gt_bapi_marcx-serv_level = 'X'.
gt_bapi_marcx-availcheck = 'X'.
*Sales
gt_bapi_mvke1-sales_org = gs_output1-vkorg.
gt_bapi_mvke1-distr_chan = gs_output1-vtweg.
gt_bapi_mvke1-sal_status = gs_output1-vmsta.
gt_bapi_mvke1-valid_from = gs_output1-vmstd.
gt_bapi_mvke1-sales_org = gs_output1-vkorg.
gt_bapi_mvke1-distr_chan = gs_output1-vtweg.
gt_bapi_mvke1-sal_status = 'X'.
gt_bapi_mvke1-valid_from = 'X'.
endform. " move_mat_data
&----
*& Form extend_with_bapi
&----
text
----
--> p1 text
<-- p2 text
----
form extend_with_bapi .
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = gt_bapi_head
PLANTDATA = gt_bapi_marc1
PLANTDATAX = gt_bapi_marcx
SALESDATA = gt_bapi_mvke1
SALESDATAX = gt_bapi_mvkex
IMPORTING
RETURN = gt_bapi_return
TABLES
MATERIALDESCRIPTION = GT_MATERIALDESC
EXTENSIONIN = GT_BAPIPAREX
EXTENSIONINX = GT_BAPIPAREXX.
.
endform. " extend_with_bapi
&----
*& Form save_data
&----
text
----
--> p1 text
<-- p2 text
----
form save_data .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = GT_BAPI_RETURN
.
endform. " save_data
‎2008 Feb 06 5:01 AM
Pass the value X to corrsponding x table in the function module.
sample code to update material
data:
ls_headdata LIKE bapimathead, " Header Segment with Control
" Information
ls_valuationdata LIKE bapi_mbew, " Valuation Data
ls_valuationdatax LIKE bapi_mbewx, " Checkbox Structure for
" BAPI_MBEW
ls_return LIKE bapiret2. " Return Parameter
DATA :
BEGIN OF t_mat_data OCCURS 0,
material like mara-matnr, " Material Number
val_area(4) TYPE c, " Plant
future_pr TYPE p DECIMALS 2, " Future price
valid_from LIKE mbew-zkdat, " Date as of which the price is
" valid
END OF t_mat_data.
CLEAR :
ls_headdata,
ls_valuationdata,
ls_valuationdatax.
t_mat_data-material = '31'.
t_mat_data-val_area = '0001'.
t_mat_data-valid_from = '20070122'.
t_mat_data-future_pr = '100'.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = t_mat_data-material
IMPORTING
OUTPUT = t_mat_data-material
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ls_headdata-material = t_mat_data-material.
ls_headdata-account_view = 'X'.
Move valuation data.
ls_valuationdata-val_area = t_mat_data-val_area.
ls_valuationdata-future_pr = t_mat_data-future_pr.
ls_valuationdata-valid_from = t_mat_data-valid_from.
ls_valuationdatax-val_area = t_mat_data-val_area.
ls_valuationdatax-future_pr = 'X'.
ls_valuationdatax-valid_from = 'X'.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headdata
CLIENTDATA =
CLIENTDATAX =
PLANTDATA =
PLANTDATAX =
FORECASTPARAMETERS =
FORECASTPARAMETERSX =
PLANNINGDATA =
PLANNINGDATAX =
STORAGELOCATIONDATA =
STORAGELOCATIONDATAX =
VALUATIONDATA = ls_valuationdata
VALUATIONDATAX = ls_valuationdatax
WAREHOUSENUMBERDATA =
WAREHOUSENUMBERDATAX =
SALESDATA =
SALESDATAX =
STORAGETYPEDATA =
STORAGETYPEDATAX =
FLAG_ONLINE = ' '
FLAG_CAD_CALL = ' '
NO_DEQUEUE = ' '
IMPORTING
RETURN = ls_return
TABLES
MATERIALDESCRIPTION =
UNITSOFMEASURE =
UNITSOFMEASUREX =
INTERNATIONALARTNOS =
MATERIALLONGTEXT =
TAXCLASSIFICATIONS =
RETURNMESSAGES =
PRTDATA =
PRTDATAX =
EXTENSIONIN =
EXTENSIONINX =
.
write:/ ls_return-message.