01-26-2007 5:18 PM
Hi folks,
I'm trying to change some item text in the purchase order through the BAPI_PO_CHANGE
with the following test code:
REPORT zprueba_bapi_po_change.
DATA:
itab_text LIKE TABLE OF bapiekpotx,
wa_text LIKE bapiekpotx,
itab_lines LIKE TABLE OF tline,
wa_lines LIKE tline,
itab_items LIKE TABLE OF BAPIEKPO,
wa_items LIKE BAPIEKPO.
DATA: name LIKE thead-tdname,
id LIKE thead-tdid,
object LIKE thead-tdobject,
v_result LIKE itcer.
DATA: itab_return LIKE TABLE OF BAPIRET2.
data: poorder like BAPIEKKO-PO_NUMBER.
poorder = '4500058923'.
CALL FUNCTION 'BAPI_PO_GETDETAIL'
EXPORTING
purchaseorder = poorder
ITEMS = 'X'
* ACCOUNT_ASSIGNMENT = ' '
* SCHEDULES = ' '
* HISTORY = ' '
item_texts = 'X'
* HEADER_TEXTS = ' '
* SERVICES = ' '
* CONFIRMATIONS = ' '
* SERVICE_TEXTS = ' '
* EXTENSIONS = ' '
* IMPORTING
* PO_HEADER =
* PO_ADDRESS =
TABLES
* PO_HEADER_TEXTS =
PO_ITEMS = itab_items
* PO_ITEM_ACCOUNT_ASSIGNMENT =
* PO_ITEM_SCHEDULES =
* PO_ITEM_CONFIRMATIONS =
po_item_texts = itab_text
* PO_ITEM_HISTORY =
* PO_ITEM_HISTORY_TOTALS =
* PO_ITEM_LIMITS =
* PO_ITEM_CONTRACT_LIMITS =
* PO_ITEM_SERVICES =
* PO_ITEM_SRV_ACCASS_VALUES =
* RETURN =
* PO_SERVICES_TEXTS =
* EXTENSIONOUT =
.
COMMIT WORK AND WAIT.
name = '600007545900001'.
id = 'A01'.
object = 'EKPO'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = id
language = sy-langu
name = name
object = object
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = itab_lines
* EXCEPTIONS
* ID = 1
* LANGUAGE = 2
* NAME = 3
* NOT_FOUND = 4
* OBJECT = 5
* REFERENCE_CHECK = 6
* WRONG_ACCESS_TO_ARCHIVE = 7
* OTHERS = 8
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT itab_lines INTO wa_lines.
CLEAR wa_text.
wa_text-po_number = poorder.
wa_text-po_item = '00001'.
wa_text-text_form = wa_lines-tdformat.
wa_text-text_line = wa_lines-tdline.
wa_text-text_id = 'F03'.
APPEND wa_text TO itab_text.
ENDLOOP.
SORT itab_text BY po_item text_id.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = poorder
* POHEADER =
* POHEADERX =
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
* IMPORTING
* EXPHEADER =
TABLES
RETURN = itab_return
* POITEM =
* POITEMX =
* POADDRDELIVERY =
* POSCHEDULE =
* POSCHEDULEX =
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POTEXTHEADER =
POTEXTITEM = itab_text
* POPARTNER =
.
COMMIT WORK AND WAIT.
However this code isn't updating the text. Does anyone could tell me what i'm missing?
Thanks for your help.
Kind Regards,
Gilberto Li
01-26-2007 5:57 PM
Hi,
Please check this code..It worked for me..Instead of 00001 try giving 00010
PARAMETERS: p_ebeln TYPE ebeln OBLIGATORY.
PARAMETERS: p_text(50) OBLIGATORY.
PARAMETERS: p_textid TYPE bapimepotext-text_id OBLIGATORY.
DATA:
lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
lt_bapi_itemtext LIKE bapimepotext OCCURS 0 WITH HEADER LINE.
<b>lt_poitem-po_item = '00010'.</b>
APPEND lt_poitem.
<b>lt_poitem-po_item = '00010'.</b>
APPEND lt_poitem.
lt_bapi_itemtext-po_number = p_ebeln.
<b>lt_bapi_itemtext-po_item = '00010'.</b>
lt_bapi_itemtext-text_id = p_textid.
lt_bapi_itemtext-text_line = p_text.
APPEND lt_bapi_itemtext.
call the BAPI.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = p_ebeln
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
potextitem = lt_bapi_itemtext.
LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
WRITE: / 'Error'.
ELSE.
COMMIT WORK.
WRITE: / 'Success'.
ENDIF.
Thanks,
Naren
01-26-2007 5:24 PM
Please use BAPI COMMIT .. instead of commit work.
It will work.
Point reward. If answer is helpful.
Kannu.
01-26-2007 5:30 PM
Hi,
Pass the PO_ITEM and PO_ITEMX in the BAPI_PO_CHANGE.
DATA: lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
Populate the PO item
LT_POITEM-po_item = '00001'.
APPEND lt_poitem.
Populate the PO item X.
LT_POITEMX-po_item = '00001'.
APPEND lt_poitemX.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = poorder
TABLES
RETURN = itab_return
<b> POITEM = LT_POITEM
POITEMX = LT_POITEMX</b>
POTEXTITEM = itab_text
.
COMMIT WORK AND WAIT.
Thanks,
Naren
01-26-2007 5:32 PM
Gilberto
Try using BAPI Transaction commit.
By the way, if you do a BAPI_PO_GETDETAILS, can you see your text? or Please check the 'Material text' label in PO item details
I called the BAPI from SE37 and it is working perfectly. I filled the following parms,
1) Purchase order number
2) POTEXTITEM - PO_number, PO_item, PO-text id = 'F03' and Format - "*"
My program works with commit wait and return too,
poorder = '4700002503'.
wa_text-po_number = poorder.
wa_text-po_item = '00001'.
wa_text-text_form = '*'.
wa_text-text_id = 'F03'.
wa_text-text_line = 'eXTENSIVE CHANGES to bapi'.
APPEND wa_text TO itab_text.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = poorder
TABLES
RETURN = itab_return
POTEXTITEM = itab_text
.
COMMIT WORK AND WAIT.
01-26-2007 5:33 PM
Hi Gilberto,
Use the FM SAVE_TEXT instead of 'BAPI_PO_CHANGE' and pass itab_text into it.
Reward points if found useful...!
Cheers
Abhishek
01-26-2007 5:45 PM
Hi Folks,
I've tried changing to bapi_transaction_commit and adding the poitem and poitemx tables to the BAPI still didn't work.
I think I will have to try the save_text way.
More suggestions are welcome.
Thanks for your help guys.
Kind Regards,
Gilberto Li
Message was edited by:
Gilberto Li
01-26-2007 5:57 PM
Hi,
Please check this code..It worked for me..Instead of 00001 try giving 00010
PARAMETERS: p_ebeln TYPE ebeln OBLIGATORY.
PARAMETERS: p_text(50) OBLIGATORY.
PARAMETERS: p_textid TYPE bapimepotext-text_id OBLIGATORY.
DATA:
lt_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
lt_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
lt_bapi_itemtext LIKE bapimepotext OCCURS 0 WITH HEADER LINE.
<b>lt_poitem-po_item = '00010'.</b>
APPEND lt_poitem.
<b>lt_poitem-po_item = '00010'.</b>
APPEND lt_poitem.
lt_bapi_itemtext-po_number = p_ebeln.
<b>lt_bapi_itemtext-po_item = '00010'.</b>
lt_bapi_itemtext-text_id = p_textid.
lt_bapi_itemtext-text_line = p_text.
APPEND lt_bapi_itemtext.
call the BAPI.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = p_ebeln
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
potextitem = lt_bapi_itemtext.
LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
WRITE: / 'Error'.
ELSE.
COMMIT WORK.
WRITE: / 'Success'.
ENDIF.
Thanks,
Naren
01-26-2007 7:07 PM
Hi again,
Naren, i've checked your code however I found that my problem was some budget issues that didn't let the BAPI execute correctly. Still I really appreciate everyone's help.
Thanks again.
Kind Regards,
Gilberto Li