‎2006 Jan 12 7:27 PM
Hi all,
It still doesn't work. I have modified the code in this way.It does not print any messages but it shows an errror saying "MAKE AN ENTRY IN ALL FIELDS". I want to print the error message to the list.Here is the code.
Please help me.
REPORT z_bdc_material_creation.
DATA : bdctab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA : bdcmsg LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: l_msg(200).
DATA: BEGIN OF itab OCCURS 0,
data element: MATNR
matnr LIKE mara-matnr,
data element: MBRSH
mbrsh LIKE mara-mbrsh,
data element: MTART
mtart LIKE mara-mtart,
data element: XFELD
kzsel_01(001),
data element: XFELD
kzsel_02(001),
data element: MAKTX
maktx LIKE makt-maktx,
data element: MEINS
meins LIKE mara-meins,
data element: MTPOS_MARA
mtpos_mara(004),
END OF itab.
DATA: BEGIN OF itab1 OCCURS 0,
data element: MATNR
matnr LIKE mara-matnr,
data element: MBRSH
mbrsh LIKE mara-mbrsh,
data element: MTART
mtart LIKE mara-mtart,
data element: XFELD
kzsel_01(001),
data element: XFELD
kzsel_02(001),
data element: MAKTX
maktx LIKE makt-maktx,
data element: MEINS
meins LIKE mara-meins,
data element: MTPOS_MARA
mtpos_mara(004),
END OF itab1.
itab-matnr = '123-150'.
itab-mbrsh = 'C'.
itab-mtart = 'VKHM'.
itab-kzsel_01 = 'X'.
itab-kzsel_02 = 'X'.
itab-maktx = 'DATA'.
itab-meins = 'G'.
itab-mtpos_mara = 'NORM'.
APPEND itab.
CLEAR itab.
itab-matnr = '123-151'.
itab-mbrsh = 'C'.
itab-mtart = 'VKHM'.
itab-kzsel_01 = 'X'.
itab-kzsel_02 = 'X'.
itab-maktx = ''.
itab-meins = 'G'.
itab-mtpos_mara = 'NORM'.
APPEND itab.
CLEAR itab.
itab-matnr = '123-152'.
itab-mbrsh = 'C'.
itab-mtart = 'VKHM'.
itab-kzsel_01 = 'X'.
itab-kzsel_02 = 'X'.
itab-maktx = 'DATA'.
itab-meins = 'G'.
itab-mtpos_mara = 'NORM'.
APPEND itab.
CLEAR itab.
LOOP AT itab.
PERFORM generate_data .
CALL TRANSACTION 'MM01' USING bdctab MODE 'N' UPDATE 'S' MESSAGES INTO
bdcmsg.
if sy-subrc <> 0.
PERFORM check.
write : / l_msg.
endif.
REFRESH bdctab.
ENDLOOP.
*loop at bdcmsg.
*write:/ bdcmsg-msgid,
*bdcmsg-msgtyp,
*bdcmsg-msgnr,
*bdcmsg-msgv1,
*bdcmsg-msgv2,
*bdcmsg-msgv3,
*bdcmsg-msgv4.
lang = sy-langu
*endloop.
&----
*& Form generate_data
&----
text
----
FORM generate_data .
bdctab-program = 'SAPLMGMM'.
bdctab-dynpro = 0060.
bdctab-dynbegin = 'X'.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'RMMG1-MATNR'.
bdctab-fval = itab-matnr.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'RMMG1-MBRSH'.
bdctab-fval = itab-mbrsh.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'RMMG1-MTART'.
bdctab-fval = itab-mtart.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'BDC_OKCODE'.
bdctab-fval = '/00'.
APPEND bdctab.
CLEAR bdctab.
bdctab-program = 'SAPLMGMM'.
bdctab-dynpro = 0070.
bdctab-dynbegin = 'X'.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'MSICHTAUSW-KZSEL(01)'.
bdctab-fval = itab-kzsel_01.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'MSICHTAUSW-KZSEL(02)'.
bdctab-fval = itab-kzsel_02.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'BDC_OKCODE'.
bdctab-fval = '=ENTR'.
APPEND bdctab.
CLEAR bdctab.
bdctab-program = 'SAPLMGMM'.
bdctab-dynpro = 4004.
bdctab-dynbegin = 'X'.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'MAKT-MAKTX'.
bdctab-fval = itab-maktx.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'MARA-MEINS'.
bdctab-fval = itab-meins.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'MARA-MTPOS_MARA'.
bdctab-fval = itab-mtpos_mara.
APPEND bdctab.
CLEAR bdctab.
bdctab-fnam = 'BDC_OKCODE'.
bdctab-fval = '=BU'.
APPEND bdctab.
CLEAR bdctab.
ENDFORM. " generate_data
&----
*& Form check
&----
text
----
FORM check .
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = bdcmsg-msgid
lang = sy-langu
no = bdcmsg-msgnr
v1 = bdcmsg-msgv1
v2 = bdcmsg-msgv2
v3 = bdcmsg-msgv3
v4 = bdcmsg-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
NOT_FOUND = 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.
ENDFORM. " check
Regards,
Vijay.
‎2006 Jan 12 7:31 PM
Hi Vijay,
Please add "read table bdcmsg." or LOOP statement before calling the function
LOOP at BDCMSG.
Call Function 'FORMAT_MESSAGE'.
Endloop.
Lanka
‎2006 Jan 12 7:31 PM
Hi,
Change the following part in your program ( FORM check ).
IF sy-subrc <> 0.
*<b>MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.</b> instead of *this change it to .
<b>write : / l_msg.</b>
ENDIF.
ENDFORM. " check
If you want all the messages then call the FM "Format_message" within a loop. As per the current logic you will get the message from the header record only.
Thanks
Govind.
Message was edited by: Govindarajan Seenivasan
‎2006 Jan 12 7:35 PM
Change your code after the call transaction as follows.
CALL TRANSACTION 'MM01' USING bdctab
MODE 'N'
UPDATE 'S'
MESSAGES INTO bdcmsg.
*-- check if there are errors
READ TABLE bdcmsg WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
*-- Errors are there
LOOP AT bdcmsg.
PERFORM check.
write : / l_msg.
ENDLOOP.
ENDIF.
‎2006 Jan 12 7:32 PM
hi,
u have to do PERFORM check in a loop
loop at bdcmsg.
PERFORM check
endloop.
‎2006 Jan 12 7:33 PM
Hi VIjay,
In the perform check.You have to loop at bdcmsg & then pass the values.
<b>loop at bdcmsg.</b>
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = bdcmsg-msgid
lang = sy-langu
no = bdcmsg-msgnr
v1 = bdcmsg-msgv1
v2 = bdcmsg-msgv2
v3 = bdcmsg-msgv3
v4 = bdcmsg-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
NOT_FOUND = 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.
<b>endloop.</b>