‎2006 May 25 6:23 AM
Hi,
The requirement is as follows:-
1. All the data in the flat file that would be received would be in XML format.
2. I need to upload this data to create/update Customers using 'BAPI_CUSTOMER_CREATEFROMDATA1'.
3. Using 'BAPI_SALESORDER_CREATEFROMDAT1', I would need to create Sales Order.
I have coded the programs assuming that the flat file data would be in .XLS format i.e. MS Excel format.
Kindly suggest me if the flat file data which is in XML format can be converted to MS Excel format and the further code remains the same OR the entire logic has to be changed to create a new program.
Suggestions welcomed.
Thanks & Regards,
Rajesh
‎2006 May 25 7:27 AM
Hi Rajesh,
Please Check this <a href="/people/r.eijpe/blog/2005/11/21/xml-dom-processing-in-abap-part-ii--convert-an-xml-file-into-an-abap-table-using-sap-dom-approach which uploads xml and converts to internal table.
<i>Hope This Info Helps YOU.</i>
Regards,
Lakshmi
‎2006 May 25 6:26 AM
Hai Rajesh
check the following Code
This program exports an internal table to an XML file.
*----
*
Report ZPRUEBA_MML_13 *
Export an internal table to XML document *
NO BORRAR ESTE CODIGO *
*----
*
REPORT ZPRUEBA_MML_13.
*----
*
PANTALLA SELECCION *
PARAMETERS: GK_RUTA TYPE RLGRAP-FILENAME.
PANTALLA SELECCION *
*----
*
*----
*
TYPE TURNOS *
TYPES: BEGIN OF TURNOS,
LU LIKE T552A-TPR01,
MA LIKE T552A-TPR01,
MI LIKE T552A-TPR01,
JU LIKE T552A-TPR01,
VI LIKE T552A-TPR01,
SA LIKE T552A-TPR01,
DO LIKE T552A-TPR01,
END OF TURNOS.
TYPE TURNOS *
*----
*
*----
*
TYPE SOCIO *
TYPES: BEGIN OF SOCIO,
NUMERO LIKE PERNR-PERNR,
REPOSICION LIKE PA0050-ZAUVE,
NOMBRE LIKE PA0002-VORNA,
TURNOS TYPE TURNOS,
END OF SOCIO.
TYPE SOCIO *
*----
*
*----
*
ESTRUCTURA ACCESOS *
DATA: BEGIN OF ACCESOS OCCURS 0,
SOCIO TYPE SOCIO,
END OF ACCESOS.
ESTRUCTURA ACCESOS *
*----
*
*----
*
START OF SELECTION *
START-OF-SELECTION.
PERFORM LLENA_ACCESOS.
PERFORM DESCARGA_XML.
END-OF-SELECTION.
END OF SELECTION *
*----
*
*----
*
FORM LLENA_ACCESOS *
FORM LLENA_ACCESOS.
REFRESH ACCESOS.
CLEAR ACCESOS.
MOVE: '45050' TO ACCESOS-SOCIO-NUMERO,
'MOISES MORENO' TO ACCESOS-SOCIO-NOMBRE,
'0' TO ACCESOS-SOCIO-REPOSICION,
'T1' TO ACCESOS-SOCIO-TURNOS-LU,
'T2' TO ACCESOS-SOCIO-TURNOS-MA,
'T3' TO ACCESOS-SOCIO-TURNOS-MI,
'T4' TO ACCESOS-SOCIO-TURNOS-JU,
'T5' TO ACCESOS-SOCIO-TURNOS-VI,
'T6' TO ACCESOS-SOCIO-TURNOS-SA,
'T7' TO ACCESOS-SOCIO-TURNOS-DO.
APPEND ACCESOS.
CLEAR ACCESOS.
MOVE: '45051' TO ACCESOS-SOCIO-NUMERO,
'RUTH PEÑA' TO ACCESOS-SOCIO-NOMBRE,
'0' TO ACCESOS-SOCIO-REPOSICION,
'T1' TO ACCESOS-SOCIO-TURNOS-LU,
'T2' TO ACCESOS-SOCIO-TURNOS-MA,
'T3' TO ACCESOS-SOCIO-TURNOS-MI,
'T4' TO ACCESOS-SOCIO-TURNOS-JU,
'T5' TO ACCESOS-SOCIO-TURNOS-VI,
'T6' TO ACCESOS-SOCIO-TURNOS-SA,
'T7' TO ACCESOS-SOCIO-TURNOS-DO.
APPEND ACCESOS.
ENDFORM.
FORM LLENA_ACCESOS *
*----
*
*----
*
FORM DESCARGA_XML *
FORM DESCARGA_XML.
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
G_IXML TYPE REF TO IF_IXML,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
W_RESULT TYPE I,
W_LINE TYPE STRING,
IT_XML TYPE DCXMLLINES,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ).
CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
CHECK NOT M_DOCUMENT IS INITIAL.
WRITE: / 'Converting DATA TO DOM 1:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'ACCESOS'
DATAOBJECT = ACCESOS[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
IF W_RC IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
W_RC.
ENDIF.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
DOCUMENT = M_DOCUMENT
IMPORTING
XML_AS_STRING = W_STRING
SIZE = W_SIZE
TABLES
XML_AS_TABLE = IT_XML
EXCEPTIONS
NO_DOCUMENT = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_SIZE
FILENAME = GK_RUTA
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TAB
EXCEPTIONS
OTHERS = 10.
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.
FORM DESCARGA_XML *
*----
*
Thanks & regards
Sreeni
‎2006 May 25 6:28 AM
SDIXML (Since 4.6D, in 4.6C - beta) SDIXML_DATA_TO_DOM Convert SAP data (elementary/structured/table types) into DOM (XML)
SDIXML_DOM_TO_XML Convert DOM (XML) into string of bytes that can be downloaded to PC or application server
SDIXML_DOM_TO_SCREEN Display DOM (XML)
SDIXML_DOM_TO_DATA
EDIN IDoc: Inbound processing IDOC_XML_FROM_FILE standard program for inbound processing that imports an XML file from the file system, converts it into IDoc format, and passes it to ALE layer.
regards
vinod
‎2006 May 25 6:29 AM
Hi rajesh,
U can directly upload
the XML file into internal table,
of the same format.
(no need to convert xmls> xls--> then to internal
table)
1. itab --- > xml
xml ---> itab.
2. This program will do both.
(just copy paste in new program)
3.
REPORT abc.
*----
DATA
DATA : t001 LIKE TABLE OF t001 WITH HEADER LINE.
DATA : BEGIN OF itab OCCURS 0,
a(100) TYPE c,
END OF itab.
DATA: xml_out TYPE string .
DATA : BEGIN OF upl OCCURS 0,
f(255) TYPE c,
END OF upl.
DATA: xmlupl TYPE string .
FIRST PHASE
FIRST PHASE
FIRST PHASE
*----
Fetch Data
SELECT * FROM t001 INTO TABLE t001.
*----
XML
CALL TRANSFORMATION ('ID')
SOURCE tab = t001[]
RESULT XML xml_out.
*----
Convert to TABLE
CALL FUNCTION 'HR_EFI_CONVERT_STRING_TO_TABLE'
EXPORTING
i_string = xml_out
i_tabline_length = 100
TABLES
et_table = itab.
*----
Download
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filetype = 'BIN'
filename = 'd:\xx.xml'
TABLES
data_tab = itab.
SECOND PHASE
SECOND PHASE
SECOND PHASE
BREAK-POINT.
REFRESH t001.
CLEAR t001.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'D:\XX.XML'
filetype = 'BIN'
TABLES
data_tab = upl.
LOOP AT upl.
CONCATENATE xmlupl upl-f INTO xmlupl.
ENDLOOP.
*----
XML
CALL TRANSFORMATION ('ID')
SOURCE XML xmlupl
RESULT tab = t001[]
.
BREAK-POINT.
regards,
amit m.
‎2010 Feb 05 5:56 AM
HI Amit Mittal
I WANT TO KNOW THAT YOU HAVE GIVEN SOMETHING IN THE FIELD OF TRANSFORMATION
CALL TRANSFORMATION ('ID')
WHATS THIS FILED 'ID' STANDS FOR
IS IT CONSATNT OR VARIES ON SOME CONDITON
‎2006 May 25 6:52 AM
Hello Rajesh,
Here is to capture XML data into an internal table.
Now you can do the same functions that you have coded before.
To convert XML to internal table.
You can use these function modules
TEXT_CONVERT_XML_TO_SAP or
SDIXML_DOM_TO_XML Convert DOM (XML) into string of bytes that can be downloaded to PC or application server
or
SMUM_XML_PARSE (Parse XML docment into a table structure)
You can also refer to these:
SMUM_XML_CREATE (Create XML document from internal table)
SMUM_XML_CREATE_X (Create XSTRING xml doc)
Check this code, it converts an XML data into a string internal table.
REPORT Z_XML_TO_TABLE.
TYPE-POOLS: ixml.
TYPES: BEGIN OF t_xml_line,
data(256) TYPE x,
END OF t_xml_line.
DATA: l_ixml TYPE REF TO if_ixml,
l_streamfactory TYPE REF TO if_ixml_stream_factory,
l_parser TYPE REF TO if_ixml_parser,
l_istream TYPE REF TO if_ixml_istream,
l_document TYPE REF TO if_ixml_document,
l_node TYPE REF TO if_ixml_node,
l_xmldata TYPE string.
DATA: l_elem TYPE REF TO if_ixml_element,
l_root_node TYPE REF TO if_ixml_node,
l_next_node TYPE REF TO if_ixml_node,
l_name TYPE string,
l_iterator TYPE REF TO if_ixml_node_iterator.
DATA: l_xml_table TYPE TABLE OF t_xml_line,
l_xml_line TYPE t_xml_line,
l_xml_table_size TYPE i.
DATA: l_filename TYPE string.
PARAMETERS: pa_file TYPE char1024 DEFAULT 'c:\temp\orders_dtd.xml'.
Validation of XML file: Only DTD included in xml document is supported
PARAMETERS: pa_val TYPE char1 AS CHECKBOX.
START-OF-SELECTION.
Creating the main iXML factory
l_ixml = cl_ixml=>create( ).
Creating a stream factory
l_streamfactory = l_ixml->create_stream_factory( ).
PERFORM get_xml_table CHANGING l_xml_table_size l_xml_table.
wrap the table containing the file into a stream
l_istream = l_streamfactory->create_istream_itable( table =
l_xml_table
size =
l_xml_table_size ).
Creating a document
l_document = l_ixml->create_document( ).
Create a Parser
l_parser = l_ixml->create_parser( stream_factory = l_streamfactory
istream = l_istream
document = l_document ).
Validate a document
IF pa_val EQ 'X'.
l_parser->set_validating( mode = if_ixml_parser=>co_validate ).
ENDIF.
Parse the stream
IF l_parser->parse( ) NE 0.
IF l_parser->num_errors( ) NE 0.
DATA: parseerror TYPE REF TO if_ixml_parse_error,
str TYPE string,
i TYPE i,
count TYPE i,
index TYPE i.
count = l_parser->num_errors( ).
WRITE: count, ' parse errors have occured:'.
index = 0.
WHILE index < count.
parseerror = l_parser->get_error( index = index ).
i = parseerror->get_line( ).
WRITE: 'line: ', i.
i = parseerror->get_column( ).
WRITE: 'column: ', i.
str = parseerror->get_reason( ).
WRITE: str.
index = index + 1.
ENDWHILE.
ENDIF.
ENDIF.
Process the document
IF l_parser->is_dom_generating( ) EQ 'X'.
PERFORM process_dom USING l_document.
ENDIF.
&----
*& Form get_xml_table
&----
FORM get_xml_table CHANGING l_xml_table_size TYPE i
l_xml_table TYPE STANDARD TABLE.
Local variable declaration
DATA: l_len TYPE i,
l_len2 TYPE i,
l_tab TYPE tsfixml,
l_content TYPE string,
l_str1 TYPE string,
c_conv TYPE REF TO cl_abap_conv_in_ce,
l_itab TYPE TABLE OF string.
l_filename = pa_file.
upload a file from the client's workstation
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
filetype = 'BIN'
IMPORTING
filelength = l_xml_table_size
CHANGING
data_tab = l_xml_table
EXCEPTIONS
OTHERS = 19.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Writing the XML document to the screen
CLEAR l_str1.
LOOP AT l_xml_table INTO l_xml_line.
c_conv = cl_abap_conv_in_ce=>create( input = l_xml_line-data
replacement = space ).
c_conv->read( IMPORTING data = l_content len = l_len ).
CONCATENATE l_str1 l_content INTO l_str1.
ENDLOOP.
l_str1 = l_str1+0(l_xml_table_size).
SPLIT l_str1 AT cl_abap_char_utilities=>cr_lf INTO TABLE l_itab.
WRITE: /.
WRITE: /' XML File'.
WRITE: /.
LOOP AT l_itab INTO l_str1.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab
IN
l_str1 WITH space.
WRITE: / l_str1.
ENDLOOP.
WRITE: /.
ENDFORM. "get_xml_table
&----
*& Form process_dom
&----
FORM process_dom USING document TYPE REF TO if_ixml_document.
DATA: node TYPE REF TO if_ixml_node,
iterator TYPE REF TO if_ixml_node_iterator,
nodemap TYPE REF TO if_ixml_named_node_map,
attr TYPE REF TO if_ixml_node,
name TYPE string,
prefix TYPE string,
value TYPE string,
indent TYPE i,
count TYPE i,
index TYPE i.
node ?= document.
CHECK NOT node IS INITIAL.
ULINE.
WRITE: /.
WRITE: /' DOM-TREE'.
WRITE: /.
IF node IS INITIAL. EXIT. ENDIF.
create a node iterator
iterator = node->create_iterator( ).
get current node
node = iterator->get_next( ).
loop over all nodes
WHILE NOT node IS INITIAL.
indent = node->get_height( ) * 2.
indent = indent + 20.
CASE node->get_type( ).
WHEN if_ixml_node=>co_node_element.
element node
name = node->get_name( ).
nodemap = node->get_attributes( ).
WRITE: / 'ELEMENT :'.
WRITE: AT indent name COLOR COL_POSITIVE INVERSE.
IF NOT nodemap IS INITIAL.
attributes
count = nodemap->get_length( ).
DO count TIMES.
index = sy-index - 1.
attr = nodemap->get_item( index ).
name = attr->get_name( ).
prefix = attr->get_namespace_prefix( ).
value = attr->get_value( ).
WRITE: / 'ATTRIBUTE:'.
WRITE: AT indent name COLOR COL_HEADING INVERSE, '=',
value COLOR COL_TOTAL INVERSE.
ENDDO.
ENDIF.
WHEN if_ixml_node=>co_node_text OR
if_ixml_node=>co_node_cdata_section.
text node
value = node->get_value( ).
WRITE: / 'VALUE :'.
WRITE: AT indent value COLOR COL_GROUP INVERSE.
ENDCASE.
advance to next node
node = iterator->get_next( ).
ENDWHILE.
ENDFORM. "process_dom
You can refer this link also.
Cheers,
Susmitha
‎2006 May 25 7:27 AM
Hi Rajesh,
Please Check this <a href="/people/r.eijpe/blog/2005/11/21/xml-dom-processing-in-abap-part-ii--convert-an-xml-file-into-an-abap-table-using-sap-dom-approach which uploads xml and converts to internal table.
<i>Hope This Info Helps YOU.</i>
Regards,
Lakshmi
‎2006 Aug 18 9:47 AM
Hi Friends
i am getting a error mesg when i run this one.
"MATERIAL NUMBER DOES NOT EXIST ON THE DATABASE"
can any one help me this code.
Jagan
-
------------------------------------------------------------------------------- ***
REPORT YFRDMM-MM001 NO STANDARD PAGE HEADING
LINE-SIZE 152
LINE-COUNT 65(001).
------------------------------------------------------------------------------- ***
Declaration ***
------------------------------------------------------------------------------- ***
TABLES: T001L, "Storage Locations
MARA, "General Material Data
MAKT, "Material Descriptions
MBEW, "Material Valuation
MARC. "Plant Data for Material
------------------------- Include Programs ------------------------------------ ***
INCLUDE ZCOA_INC. " Custome Include
*----
Variables Declaration -
DATA:
V_LS(3) TYPE N VALUE 152,
V_TITLE1(50),
V_TITLE2(50),
V_EDIDATA(175).
--------------------------- Constants Declaration ----------------------------- ***
CONSTANTS:
C_PIPE(1) VALUE '|', " EDI Data Field De-limiter
C_TCODE LIKE TSTC-TCODE VALUE 'MM01'. " T.Code for Material Master Creation
------------------------- FOR XML FILE READING -------------------------------- ***
DATA: BEGIN OF XMLFIELD OCCURS 0,
FIELD(255) TYPE C,
END OF XMLFIELD.
DATA: XMLFILE TYPE string.
------- FOR XML FILE READING -------- ***
DATA: BAPI_HEAD LIKE BAPIMATHEAD,
BAPI_MAKT LIKE BAPI_MAKT, "Material Description
BAPI_MARA1 LIKE BAPI_MARA, "Client Data
BAPI_MARAX LIKE BAPI_MARAX,
BAPI_MARC1 LIKE BAPI_MARC, "Plant View
BAPI_MARCX LIKE BAPI_MARCX,
BAPI_MBEW1 LIKE BAPI_MBEW, "Accounting View
BAPI_MBEWX LIKE BAPI_MBEWX,
BAPI_RETURN LIKE BAPIRET2,
it_returnmessages LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF INT_MAKT OCCURS 100.
INCLUDE STRUCTURE BAPI_MAKT.
DATA: END OF INT_MAKT.
---------- Int Tab for storing Upload XML File From User Local Drive -------- ***
DATA: BEGIN OF INT_XML OCCURS 100,
SAP(255) type c,
MatID(10) TYPE c,
DESCRIP(40) type c,
BASEUOM(2) type c,
PROCUREUOM(1) type c,
ISSUEUOM(1) type c,
OLDMATNO(18) type c,
MATGRP(10) type c,
PORT1TITLE(20) type c,
PORT1VALUE(25) type c,
PORT2TITLE(20) type c,
PORT2VALUE(50) type c,
PORT3TITLE(19) type c,
PORT3VALUE(10) type c,
PORT4TITLE(20) type c,
PORT4VALUE(10) type c,
REORDERPOINT(1) type c,
FIXEDLOTSIZE(1) type c,
MRPTYPE(1) type c,
BIN(1) type c,
MRPGROUP(1) type c,
INTERNALCOMMENT(255) type c,
NSC(4) type n,
INC(5) type c,
NSCTITLE(33) type c,
INCTITLE(30) type c,
PREFMFG(10) type c,
PREFPN(30) type c,
MFG(10) type c,
PN(23) type c,
PREFCODE(2) type n,
END OF INT_XML.
---------- Int Tab for MM DATA TO UPDATE IN SAP -------- ***
DATA: BEGIN OF INT_MAT OCCURS 100,
MTART(4), "Material type
MATNR(18), "Material number
MATKL(9) , "Material group
MBRSH(1), "Industry sector
MEINS(3), "Base unit of measure
MAKTX(40), "Material description
LONGTXT(2000),"LONG TEXT
PARTNO(30), "PART NO.
END OF INT_MAT.
--------------- Internal Table for reading EDI Flat File from SAP -------------- ***
DATA: BEGIN OF T_EDIFILE OCCURS 10,
DATA(225),
END OF T_EDIFILE.
DATA: L_FILENAME TYPE STRING.
---------------------------------------------------------------------- ***
PARAMETERS: P_UFNAM LIKE RLGRAP-FILENAME MEMORY ID MID_FN, "UNIX FILE NAME
P_LFNAM LIKE RLGRAP-FILENAME DEFAULT 'C:\UL_DATA\MM1.XML' MEMORY ID F_FILE, "LOCAL FINENAME
P_REPORT RADIOBUTTON GROUP RB1, "PRINT Report
P_POST RADIOBUTTON GROUP RB1. "Post MAT Master
------------------- Selection Screen Validation ---------------------- ***
AT SELECTION-SCREEN.
IF P_LFNAM = SPACE AND P_UFNAM = SPACE.
MESSAGE I000(FB) WITH TEXT-E01.
ENDIF.
IF P_LFNAM NE SPACE AND P_UFNAM NE SPACE.
MESSAGE I000(FB) WITH TEXT-E02.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LFNAM.
PERFORM GET-FILENAME.
------------------------ START-OF-SELECTION -------------------------- ***
START-OF-SELECTION.
PERFORM READ_DATA. " Uploading Data from Local Drive into I TAB
PERFORM PROCESS_DATA. " Process Data for POSTING TO MM
IF P_REPORT = 'X'.
PERFORM PRINT_REPORT. " Print report.
ELSEIF P_POST = 'X'.
PERFORM UPDATE_MM. " POSTING MM USING BAPI.
PERFORM PROCESS_BDC. " MODIFYING MM FOR PARTNUMBER USING BDC.
PERFORM PRINT_REPORT.
ENDIF.
-------------------------- END-OF-SELECTION -------------------------- ***
END-OF-SELECTION.
PERFORM FM_GET_NUM_PAGES.
---------------------------------------------------------------------- ***
FORM to POPUP F4 Help to get Existing File from Local Drive
---------------------------------------------------------------------- ***
FORM GET-FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
MASK = 'C:\*.,.*.'
MODE = 'O'
IMPORTING
FILENAME = P_LFNAM
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM. "GET-FILENAME
------------------------------------------------------- ***
FORM to Upload Data from Local Drive / Application Server
and Convert the XML file into Internal Table
------------------------------------------------------- ***
FORM READ_DATA.
*---- Process for Reading Upload File from Local Drive
IF P_LFNAM NE SPACE.
L_FILENAME = P_LFNAM.
*CALL FUNCTION 'GUI_UPLOAD'
*EXPORTING
filename = P_LFNAM
filetype = 'BIN'
*TABLES
data_tab = XMLFIELD.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'BIN'
HAS_FIELD_SEPARATOR = ' '
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
DATA_TAB = XMLFIELD
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
MESSAGE I000(FB) WITH TEXT-E02.
ENDIF.
ENDIF.
*---- Process for Reading Upload File from SAP Application server
IF P_UFNAM NE SPACE.
DATA: L_FNAME LIKE AUTHB-FILENAME.
L_FNAME = P_UFNAM.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
PROGRAM = SY-CPROG
ACTIVITY = 'READ'
FILENAME = L_FNAME
EXCEPTIONS
NO_AUTHORITY = 1
ACTIVITY_UNKNOWN = 2
OTHERS = 3.
IF SY-SUBRC NE 0.
MESSAGE I000(FB) WITH TEXT-E06.
ENDIF.
*---- Opening of EDI flat file -
OPEN DATASET P_UFNAM FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF SY-SUBRC NE 0.
MESSAGE I000(FB) WITH TEXT-E07.
ENDIF.
*---- Appending EDI Flat File Data in to Internal Table -
DO.
READ DATASET P_UFNAM INTO XMLFIELD.
IF SY-SUBRC = 0.
APPEND XMLFIELD.
CLEAR XMLFIELD.
ELSE.
EXIT.
ENDIF.
ENDDO.
*---- Closing EDI Flat File Data SET -
CLOSE DATASET P_UFNAM.
*---- Process Upload Data From SAP
LOOP AT T_EDIFILE.
SPLIT T_EDIFILE-DATA AT C_PIPE INTO
**&%$#@! to be done *&%$#@!
T_UPLDFILE-HDDOC
T_UPLDFILE-BLDAT
T_UPLDFILE-BLART
**&%$#@! to be done *&%$#@!
*
APPEND INT_MAT. CLEAR INT_MAT.
ENDLOOP.
ENDIF.
---------------------------------------------- ***
Convertion of Uploaded XML to Internal table ***
---------------------------------------------- ***
LOOP AT XMLFIELD.
CONCATENATE XMLFILE XMLFIELD-FIELD INTO XMLFILE.
ENDLOOP.
CALL TRANSFORMATION ('ID')
SOURCE XML XMLFILE
RESULT tab = INT_XML[].
ENDFORM. "READ_DATA
---------------------------------------------- ***
UPDATE MM ***
---------------------------------------------- ***
FORM UPDATE_MM.
CLEAR: BAPI_HEAD,
BAPI_MAKT, BAPI_MARA1, BAPI_MARAX, BAPI_MARC1, BAPI_MARCX,
BAPI_MBEW1, BAPI_MBEWX,
BAPI_RETURN.
REFRESH: INT_MAKT.
*LOOP AT INT_MAT.
Header
BAPI_HEAD-MATERIAL = '000017764'. "INT_MAT-MATNR.
BAPI_HEAD-IND_SECTOR = 'M'. "INT_MAT-MBRSH.
BAPI_HEAD-MATL_TYPE = 'YALL'. "INT_MAT-MTART.
BAPI_HEAD-BASIC_VIEW = 'X'.
BAPI_HEAD-PURCHASE_VIEW = 'X'.
BAPI_HEAD-ACCOUNT_VIEW = 'X'.
Material Description
REFRESH INT_MAKT.
INT_MAKT-LANGU = 'E'.
INT_MAKT-MATL_DESC = 'Brg,Ball,Ann;SKF;6003-2Z/;17d;35D;10mmW'. "INT_MAT-MAKTX.
APPEND INT_MAKT.
clear int_makt.
Client Data - Basic
TRANSLATE INT_MAT-MEINS TO UPPER CASE.
BAPI_MARA1-MATL_GROUP = '311000014'. "INT_MAT-MATKL.
BAPI_MARA1-BASE_UOM = 'EA'. "INT_MAT-MEINS.
BAPI_MARA1-UNIT_OF_WT = INT_MAT-GEWEI.
BAPI_MARA1-DIVISION = INT_MAT-SPART.
BAPI_MARAX-MATL_GROUP = 'X'.
BAPI_MARAX-BASE_UOM = 'X'.
BAPI_MARAX-UNIT_OF_WT = 'X'.
BAPI_MARAX-DIVISION = 'X'.
Plant - Purchasing
BAPI_MARC1-PLANT = INT_MAT-WERKS.
BAPI_MARC1-PUR_GROUP = INT_MAT-EKGRP.
*
BAPI_MARCX-PLANT = INT_MAT-WERKS.
BAPI_MARCX-PUR_GROUP = 'X'.
Accounting
BAPI_MBEW1-VAL_AREA = INT_MAT-WERKS.
BAPI_MBEW1-PRICE_CTRL = INT_MAT-VPRSV.
BAPI_MBEW1-STD_PRICE = INT_MAT-STPRS.
BAPI_MBEW1-PRICE_UNIT = INT_MAT-PEINH.
*
BAPI_MBEWX-VAL_AREA = INT_MAT-WERKS.
BAPI_MBEWX-PRICE_CTRL = 'X'.
BAPI_MBEWX-STD_PRICE = 'X'.
BAPI_MBEWX-PRICE_UNIT = 'X'.
WRITE:/ BAPI_HEAD. "BAPI_MARC1.
call function 'BAPI_MATERIAL_SAVEDATA'
exporting
HEADDATA = BAPI_HEAD
CLIENTDATA = BAPI_MARA1
CLIENTDATAX = BAPI_MARAX
PLANTDATA = BAPI_MARC1
PLANTDATAX = BAPI_MARCX
FORECASTPARAMETERS =
FORECASTPARAMETERSX =
PLANNINGDATA =
PLANNINGDATAX =
STORAGELOCATIONDATA =
STORAGELOCATIONDATAX =
VALUATIONDATA = BAPI_MBEW1
VALUATIONDATAX = BAPI_MBEWX
WAREHOUSENUMBERDATA =
WAREHOUSENUMBERDATAX =
SALESDATA = BAPI_MVKE1
SALESDATAX = BAPI_MVKEX
STORAGETYPEDATA =
STORAGETYPEDATAX =
IMPORTING
RETURN = BAPI_RETURN
TABLES
MATERIALDESCRIPTION = INT_MAKT
UNITSOFMEASURE =
UNITSOFMEASUREX =
INTERNATIONALARTNOS =
MATERIALLONGTEXT =
TAXCLASSIFICATIONS =
RETURNMESSAGES = it_returnmessages.
PRTDATA =
PRTDATAX =
EXTENSIONIN =
EXTENSIONINX =
.
IF BAPI_RETURN-TYPE = 'E'.
WRITE: /1 '|'.
loop at it_returnmessages.
if it_returnmessages-type = 'E'.
skip.
WRITE: 2 it_returnmessages-MESSAGE.
WRITE AT V_LS '|'.
endif.
endloop.
ENDIF.
*ENDLOOP.
ENDFORM.
*----
TOP-OF-PAGE
*----
TOP-OF-PAGE.
CONCATENATE TEXT-H01 '6204' INTO V_TITLE2
SEPARATED BY SPACE.
PERFORM FM_TOP_OF_PAGE USING '6204' V_TITLE1 V_TITLE2.
WRITE: /1 '|'.
WRITE: 2(9) TEXT-C01 CENTERED, "Material ID
13(40) TEXT-C02 CENTERED, "Description
54(5) TEXT-C03 CENTERED, "BUOM
60(50) TEXT-C04 CENTERED, "Internal comment
111(10) TEXT-C05 CENTERED, "Material Group
122(30) TEXT-C06 CENTERED. "Part No
WRITE AT V_LS '|'.
WRITE AT /1(V_LS) SY-ULINE.
SET LEFT SCROLL-BOUNDARY COLUMN 20.
---------------------------------------------- ***
Print Report ***
---------------------------------------------- ***
FORM PRINT_REPORT.
LOOP AT INT_MAT.
WRITE: /1 '|'.
WRITE: 2(9) INT_MAT-MATNR,
13(40) INT_MAT-MAKTX,
54(5) INT_MAT-MEINS,
60(50) INT_MAT-LONGTXT,
111(10) INT_MAT-MATKL,
122(30) INT_MAT-PARTNO.
WRITE AT V_LS '|'.
WRITE AT /1(V_LS) SY-ULINE.
ENDLOOP.
WRITE AT /1(V_LS) SY-ULINE.
ENDFORM. "PRINT_REPORT
&----
*& Form PROCESS_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM PROCESS_DATA .
DATA : L_PARTNO(30).
LOOP AT INT_XML.
CONCATENATE INT_XML-MFG INT_XML-PN INTO L_PARTNO SEPARATED BY SPACE.
MOVE: INT_XML-MATID TO INT_MAT-MATNR,
INT_XML-DESCRIP TO INT_MAT-MAKTX,
INT_XML-BASEUOM TO INT_MAT-MEINS,
INT_XML-MATGRP TO INT_MAT-MATKL,
L_PARTNO TO INT_MAT-PARTNO,
INT_XML-INTERNALCOMMENT TO INT_MAT-LONGTXT.
APPEND INT_MAT. CLEAR INT_MAT.
ENDLOOP.
ENDFORM. " PROCESS_DATA
*---End of Program
-