Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

logical files

Former Member
0 Kudos

Hi,

Can you please explain me the process of uploading a logical file on to the presentation server and then using it in a BDC?

Thanks,

Srinu.

5 REPLIES 5

Former Member
0 Kudos

Hi

You have to define them by trx FILE and use fm FILE_GET_NAME* to get the real file path.

After use fm GUI_UPLOAD to read the file and transfer tha data to your BDC

Max

0 Kudos

find logical file name to physical filename using

'FILE_GET_NAME'

2)

now u can upload internal table from this phisical file and used in bdc.

Former Member
0 Kudos

Do you mean u want to give the logical file name on the screen, place the file on ur hard drive/application server and upload the file content?

If yes here is how u do it...

go to transaction FILE

Select Logical File Name Definition

Double Clickl ur Logical file name

Enter the file path in the Physical file box eg C:\test.txt if the file is on ur hard drive or /tmp/test.txt if the file is on the app server.

Save the data.

in ur program use the function FILE_GET_NAME. this will return the physical file path for the logical file.

Use function GUI_UPLOAD or OPEN DATASET commands to then read the file.

-Kiran

Former Member
0 Kudos

Hi

Define the internal table type of your file

Let's say 'itab'.

To get the filename

PARAMETERS: p_f1 type FILEINTERN.

CALL FUNCTION 'FILE_GET_NAME'

EXPORTING

logical_filename = p_f1

<b>For upload a tab separated text file</b>

DATA: lcl_filename TYPE string.

lcl_filename = p_f1.

CHECK lcl_filename IS NOT INITIAL.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = lcl_filename

filetype = 'ASC'

has_field_separator = 'X'

TABLES

data_tab = itab

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.

<b>For uploading an excel file from presentation</b>

CONSTANTS c_x type c Value 'X'.

DATA: wa_rawdata TYPE truxs_t_text_data.

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

EXPORTING

i_field_seperator = c_x

i_tab_raw_data = wa_rawdata

i_filename = p_f1

TABLES

i_tab_converted_data = itab

EXCEPTIONS

conversion_failed = 1

OTHERS = 2.

<b>

For uploading CSV separated file</b>

CALL FUNCTION 'TEXT_CONVERT_CSV_TO_SAP'

EXPORTING

I_FIELD_SEPERATOR = ';'

i_tab_raw_data = wa_rawdata

I_FILENAME = p_f1

tables

i_tab_converted_data = itab

EXCEPTIONS

CONVERSION_FAILED = 1

OTHERS = 2

Hope this helps

Award points for useful answers

former_member188685
Active Contributor
0 Kudos

Hi,

check this sample code.., here i uploaded it to itab and then use it to create PR with the help of BAPI.

REPORT  ZPRUPLOAD             .

* internal table to store the date from the ASCII file.
DATA : BEGIN OF REQ_TMP OCCURS 0,
         REQNO(10),
         ITEMNO(5) ,
         DOCTY(4),
         NAME(12),
         REQDATE(8),
         MATERIAL(18),
         PLANT(4),
         MATLGRP(9),
         QTY(17),
         UNIT(3),
       END OF REQ_TMP.


DATA : BEGIN OF REQ_TAB OCCURS 0    ,
         REQNO      LIKE EBAN-BANFN ,
         ITEMNO     LIKE EBAN-BNFPO ,
         DOCTY      LIKE EBAN-BSART ,
         NAME       LIKE EBAN-ERNAM ,
         REQDATE    LIKE SY-DATUM   ,
         MATERIAL   LIKE EBAN-MATNR ,
         PLANT      LIKE EBAN-WERKS ,
*         matlgrp    like eban-matkl ,
         QTY        LIKE EBAN-MENGE ,
         UNIT       LIKE EBAN-MEINS ,
       END OF REQ_TAB.

DATA: ITAB_BAPIEBANC  LIKE BAPIEBANC  OCCURS 0 WITH HEADER LINE.
DATA: ITAB_BAPIEBKN   LIKE BAPIEBKN   OCCURS 0 WITH HEADER LINE.
DATA: ITAB_BAPIEBANTX LIKE BAPIEBANTX OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF ERRMSG OCCURS 10.
        INCLUDE STRUCTURE BAPIRETURN.
DATA: END OF ERRMSG.

* Internal table to contain values to be posted into the transaction.
DATA: BEGIN OF BDCDATA_TAB OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA_TAB.

* internal table to store all the errors during the BDC
DATA : BEGIN OF MESS_TAB OCCURS 0.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA : END OF MESS_TAB.
DATA : G_VARIANTE       LIKE DISVARIANT,       " Display Variant
       F_ERROR(1) ,
       ERRFLAG ,
       G_DEF_VARIANTE   LIKE DISVARIANT,       " Display Variant
       V_INVALID_UNIX(7) TYPE C VALUE '*?"''`[]'.    "Invalid UNIX char
DATA: V_FILE TYPE STRING.
*-----------------------------------------------------------------------
* Selection-screen
SELECTION-SCREEN : BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS :
   P_FILE   RADIOBUTTON GROUP UNIX DEFAULT 'X',   "from file
   P_SERVER RADIOBUTTON GROUP UNIX ,   "from server
   P_FILENM LIKE RLGRAP-FILENAME VISIBLE LENGTH 60
                                    OBLIGATORY. "filename.
SELECTION-SCREEN : END OF BLOCK BLK1.
*
AT SELECTION-SCREEN.
* to check whether the filename contains invalid characters
  IF ( P_FILENM CA V_INVALID_UNIX ).   "Filename contains invalid UNIX
    MESSAGE E000(8I) WITH 'File Name cantains invalid characters' .
  ENDIF.
  IF P_SERVER = 'X'.
    CONDENSE P_FILENM NO-GAPS.         "Spaces are not allowed in UNIX
*check if file exists in application server
    PERFORM CHECK_FILE_RESIDENCY.
  ENDIF.


*-----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILENM.
**-- Display F4 for Variant
  PERFORM F4_FOR_VARIANT.

* start-of-selection
START-OF-SELECTION.
  V_FILE = P_FILENM.
* to get the data from the file
  PERFORM READ_FILE.
  IF NOT F_ERROR IS INITIAL.
    EXIT.
  ENDIF.
* populate the screens of FI01/Fi02.
  PERFORM POPULATE_DATA.
* end-of-selection
END-OF-SELECTION.


*&--------------------------------------------------------------------*
*&      Form  POPULATE_DATA
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM POPULATE_DATA.

  LOOP AT REQ_TAB.

*itab_bapiebanc-doc_type        =    itab-bsart.
*  itab_bapiebanc-short_text    =    itab-txz01.
    ITAB_BAPIEBANC-DOC_TYPE       =    REQ_TAB-DOCTY.
    ITAB_BAPIEBANC-PUR_GROUP      =    '111'.
    ITAB_BAPIEBANC-PREQ_ITEM      =    REQ_TAB-ITEMNO.
    ITAB_BAPIEBANC-MATERIAL       =    REQ_TAB-MATERIAL.
    ITAB_BAPIEBANC-QUANTITY       =    REQ_TAB-QTY.
    ITAB_BAPIEBANC-UNIT           =    REQ_TAB-UNIT.

    IF NOT REQ_TAB-REQDATE IS INITIAL.
      ITAB_BAPIEBANC-DELIV_DATE     =    REQ_TAB-REQDATE.
    ELSE.
      ITAB_BAPIEBANC-DELIV_DATE     =  SY-DATUM + 30.
    ENDIF.

    ITAB_BAPIEBANC-PLANT          =    REQ_TAB-PLANT.
*  itab_bapiebanc-pur_group      =    itab-ekgrp.
    ITAB_BAPIEBANC-PREQ_NAME      =    REQ_TAB-NAME.
*  itab_bapiebanc-trackingno     =    itab-bednr.
*    itab_bapiebanc-mat_grp        =    req_tab-matlgrp.
*  itab_bapiebanc-acctasscat     =    itab-knttp.
    ITAB_BAPIEBANC-ACCTASSCAT     =    'A'.
*  itab_bapiebkn-g_l_acct        =    itab-sakto.
*  itab_bapiebkn-wbs_elem        =    itab-ps_posid.
*  itab_bapiebantx-text_line     =    itab-editor.
    ITAB_BAPIEBANTX-TEXT_LINE     =    'Test for Purchase requisiton'.
* APPEND itab_bapiebkn.
    APPEND ITAB_BAPIEBANC.
    APPEND ITAB_BAPIEBANTX.
  ENDLOOP.

  DELETE ITAB_BAPIEBANC WHERE DOC_TYPE = ' '.

  CALL FUNCTION 'BAPI_REQUISITION_CREATE'
    TABLES
      REQUISITION_ITEMS              = ITAB_BAPIEBANC
*    requisition_account_assignment = itab_bapiebkn
      REQUISITION_ITEM_TEXT          = ITAB_BAPIEBANTX
      RETURN                         = ERRMSG.

  LOOP AT ERRMSG.
    IF ERRMSG-TYPE EQ 'E'.
      WRITE:/'Error in function', ERRMSG-MESSAGE.
      ERRFLAG = 'X'.
    ELSE.
      WRITE:/ ERRMSG-MESSAGE.
    ENDIF.
  ENDLOOP.


  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDFORM.                    "POPULATE_DATA
***********
FORM F4_FOR_VARIANT.
  DATA: LV_VARIANT_EXIT(1) TYPE C.

*-- Display list of variants
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      IS_VARIANT = G_VARIANTE
      I_SAVE     = 'A'
    IMPORTING
      E_EXIT     = LV_VARIANT_EXIT
      ES_VARIANT = G_DEF_VARIANTE
    EXCEPTIONS
      NOT_FOUND  = 2.

  IF SY-SUBRC = 2.
    MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF LV_VARIANT_EXIT = SPACE.
      P_FILENM = G_DEF_VARIANTE-VARIANT.
      V_FILE = P_FILENM.
    ENDIF.
  ENDIF.
ENDFORM.                                                    " f4_fo
*
*************************
FORM CHECK_FILE_RESIDENCY.
* Open file on app server. If it doesnt open it will give sy-subrc <> 0.
  OPEN DATASET P_FILENM FOR INPUT IN TEXT MODE ENCODING DEFAULT.
  IF SY-SUBRC NE 0.
*    MESSAGE E020 WITH P_FILENM.        "File & not found  directory
    MESSAGE E000(8I) WITH 'FILE NOT FIND ON APPLICATION SERVER' .

  ELSE.
    CLOSE DATASET P_FILENM.
  ENDIF.
ENDFORM.                    "CHECK_FILE_RESIDENCY
*********************************************
FORM READ_FILE.

  IF P_FILE = 'X'.        "if the upload from PC option is chosen
* uploading from the PC

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME                      = V_FILE
   FILETYPE                      = 'ASC'
   HAS_FIELD_SEPARATOR           = 'X'
  TABLES
    DATA_TAB                      = REQ_TAB
 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.

    ELSE.

    ENDIF.


  ELSEIF P_SERVER = 'X'.    " if the upload from server option is chose
    OPEN DATASET P_FILENM FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC EQ 0.
      DO .
        READ DATASET P_FILENM INTO REQ_TAB.
        IF SY-SUBRC EQ 0.
          APPEND REQ_TAB.
          CLEAR REQ_TAB.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
    ENDIF.
    CLOSE DATASET P_FILENM.
  ENDIF.

ENDFORM.                    "READ_FILE

Regards

vijay