cancel
Showing results for 
Search instead for 
Did you mean: 

RE : How to upload the xlxs file in webdynpro

harish2
Explorer
0 Kudos

Hi Friends,

can you please guide me how to upload the xlsx file in webdynpro .

Accepted Solutions (0)

Answers (2)

Answers (2)

sahai
Contributor
0 Kudos

.csv file format is supported for WDA and not XLSX

former_member392866
Active Participant
0 Kudos

Hi Hari,

Please find upload button code below...

--> For browsing file we need to take "FILEUPLOAD" UIELEMENT and

    bind data property to FILE_CONTENT(TYPE- XSTRING, as attribute in context),

    bind filename property to FILE_NAME(TYPE- STRING, as attribute in context),

    bind mime type property to MIMETYPE(TYPE- STRING, as attribute in context).   

--> take one UPLOAD button for uploading data and write below logic in action method.

METHOD ONACTIONON_UPLOAD .

*  ***** Checking for file Name is empty or not************

  DATA LO_EL_CONTEXT TYPE REF TO IF_WD_CONTEXT_ELEMENT.

  DATA LS_CONTEXT TYPE WD_THIS->ELEMENT_CONTEXT.

  DATA LV_FILENAME TYPE WD_THIS->ELEMENT_CONTEXT-FILENAME.

*** For New xlsx

  DATA LV_CONTENT2 TYPE WD_THIS->ELEMENT_CONTEXT-FILE_CONTENT.

*  get element via lead selection

  LO_EL_CONTEXT = WD_CONTEXT->GET_ELEMENT( ).

*  @TODO handle not set lead selection

  IF LO_EL_CONTEXT IS INITIAL.

  ENDIF.

*  get single attribute

  LO_EL_CONTEXT->GET_ATTRIBUTE(

    EXPORTING

      NAME =  `FILENAME`

    IMPORTING

      VALUE = LV_FILENAME ).

*---------------------------------------------------------------------------------------

DATA LO_API_CONTROLLER     TYPE REF TO IF_WD_CONTROLLER.

  DATA LO_MESSAGE_MANAGER    TYPE REF TO IF_WD_MESSAGE_MANAGER.

  IF LV_FILENAME IS INITIAL.

* get message manager

*    DATA LO_API_CONTROLLER     TYPE REF TO IF_WD_CONTROLLER.

*    DATA LO_MESSAGE_MANAGER    TYPE REF TO IF_WD_MESSAGE_MANAGER.

    LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).

    CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER

      RECEIVING

        MESSAGE_MANAGER = LO_MESSAGE_MANAGER.

* report message

    CALL METHOD LO_MESSAGE_MANAGER->REPORT_ERROR_MESSAGE

      EXPORTING

        MESSAGE_TEXT = 'Please Enter .XLSX file'.           "#EC NOTEXT

    EXIT.

  ELSEIF LV_FILENAME NP '*.XLSX' .

    LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).

    CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER

      RECEIVING

        MESSAGE_MANAGER = LO_MESSAGE_MANAGER.

* report message

    CALL METHOD LO_MESSAGE_MANAGER->REPORT_ERROR_MESSAGE

      EXPORTING

        MESSAGE_TEXT = 'Please Enter .XLSX file'.           "#EC NOTEXT

    EXIT.

  ELSE.

        DATA : WA_TABLE TYPE EINA.

*V001

        DATA : WA_TABLE1 TYPE EINE.

    DATA : IT_UPLOAD TYPE STANDARD TABLE OF EINA INITIAL SIZE 0,

           WA_UPLOAD TYPE EINA,

           L_STRING TYPE STRING,

           L_XSTRING TYPE XSTRING,

           FIELDS TYPE STRING_TABLE,

           LV_FIELD TYPE STRING,

           LO_ND_DATA TYPE REF TO IF_WD_CONTEXT_NODE,

           I_DATA TYPE STANDARD TABLE OF STRING,

           LV_IS_VALID TYPE BOOLEAN.

*V001

        DATA : IT_UPLOAD1 TYPE STANDARD TABLE OF EINE INITIAL SIZE 0,

           WA_UPLOAD1 TYPE EINE.

*--------------------------------------

    DATA LO_ND_EINA_NODE TYPE REF TO IF_WD_CONTEXT_NODE.

    LO_ND_EINA_NODE = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_EINA_NODE ).

*V001

    DATA LO_ND_EINE_NODE TYPE REF TO IF_WD_CONTEXT_NODE.

    LO_ND_EINE_NODE = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_EINE_NODE ).

*    ------------------------------------

*   get single attribute

    WD_CONTEXT->GET_ATTRIBUTE(

      EXPORTING

        NAME =  `FILE_CONTENT`

      IMPORTING

        VALUE = LV_CONTENT2 ).

***** Xlsx New Code****************************************************************

    DATA : "L_STRING TYPE STRING,

          IT_FILE TYPE STANDARD TABLE OF STRING.

    FIELD-SYMBOLS : <FS> TYPE ANY.

    DATA : D_FIELD TYPE DD03L-FIELDNAME.

    DATA : D_TAB TYPE CHAR100.

    DATA : COUNT TYPE I.

*  DATA : IT_BASIC_DATA TYPE TABLE OF ZWD_MM_BASE_DATA,

*         WA_BASIC_DATA TYPE ZWD_MM_BASE_DATA.

    DATA : T_DD03L TYPE TABLE OF DD03L,

           W_DD03L TYPE DD03L.

*******************************************

* new sap logic

    DATA:

          LO_SPRD_SHEET  TYPE REF TO CL_FDT_XL_SPREADSHEET,

          LX_FDT_XL_CORE TYPE REF TO CX_FDT_EXCEL_CORE,

          LX_FDT_XL      TYPE REF TO CX_FDT_EXCEL,

          LR_DATA        TYPE REF TO DATA.

    DATA:

          LV_WS_NAME     TYPE STRING,

          LV_INDEX       TYPE I.

    DATA: LT_WS_NAME     TYPE STANDARD TABLE OF STRING.

    FIELD-SYMBOLS:

          <LTA_TABLE>    TYPE STANDARD TABLE,

          <LA_DATA>      TYPE ANY,

          <LA_DATA_STR>  TYPE ANY.

    DATA : IV_FILE_NAME TYPE STRING.

    DATA: MSG TYPE STRING.

    IV_FILE_NAME = 'abcd'.

* create an instance of the document spreadsheet

    TRY.

        CREATE OBJECT LO_SPRD_SHEET

          EXPORTING

            DOCUMENT_NAME = IV_FILE_NAME

            XDOCUMENT     = LV_CONTENT2.

      CATCH CX_FDT_EXCEL_CORE INTO LX_FDT_XL_CORE.

        CLEAR MSG.

        CALL METHOD LX_FDT_XL_CORE->IF_MESSAGE~GET_TEXT

          RECEIVING

            RESULT = MSG.

        CALL METHOD LO_MESSAGE_MANAGER->REPORT_ERROR_MESSAGE

          EXPORTING

            MESSAGE_TEXT = MSG.

    ENDTRY.

*    * gets the first worksheet and then getting the data in a internal table

    LO_SPRD_SHEET->IF_FDT_DOC_SPREADSHEET~GET_WORKSHEET_NAMES( IMPORTING WORKSHEET_NAMES = LT_WS_NAME  ).

* get the first worksheet

    READ TABLE LT_WS_NAME INDEX 1 INTO LV_WS_NAME.

    IF LV_WS_NAME IS INITIAL.

      EXIT.

    ENDIF.

* get excel data

    LR_DATA = LO_SPRD_SHEET->IF_FDT_DOC_SPREADSHEET~GET_ITAB_FROM_WORKSHEET( LV_WS_NAME ).

    ASSIGN LR_DATA->* TO <LTA_TABLE>.

    IF <LTA_TABLE> IS INITIAL.

      EXIT.

    ENDIF.

    READ TABLE <LTA_TABLE> ASSIGNING <LA_DATA_STR> INDEX 1.

    DO.

      LV_INDEX = SY-INDEX.

      ASSIGN COMPONENT LV_INDEX OF STRUCTURE <LA_DATA_STR> TO <LA_DATA>.

      IF SY-SUBRC <> 0.

        EXIT.

      ENDIF.

      W_DD03L-FIELDNAME = <LA_DATA>.

      APPEND W_DD03L TO T_DD03L.

ENDDO.

*DELETE <LTA_TABLE> INDEX X.

    LOOP AT <LTA_TABLE> ASSIGNING <LA_DATA_STR>.

      CLEAR : WA_UPLOAD.

      LOOP AT T_DD03L INTO W_DD03L.

        LV_INDEX = SY-TABIX .

        ASSIGN COMPONENT LV_INDEX OF STRUCTURE <LA_DATA_STR> TO <LA_DATA>.

        CONCATENATE 'WA_UPLOAD-' W_DD03L-FIELDNAME INTO D_TAB.

*        ASSIGN (D_TAB) TO <FS>.

        ASSIGN  <LA_DATA> TO <FS>.

        TRANSLATE <FS> TO UPPER CASE.

*        assign <FS> to (wa_upload-matnr ).

        CASE LV_INDEX.

          WHEN '1'.

            WA_UPLOAD-MANDT = <FS>.

          WHEN '2'.

            WA_UPLOAD-INFNR = <FS>.

          WHEN '3'.

            WA_UPLOAD-MATNR = <FS>.

          WHEN '4'.

            WA_UPLOAD-MATKL = <FS>.

            WHEN '37'.

            WA_UPLOAD-RELIF = <FS>.

        ENDCASE.

        CLEAR LV_INDEX.

      ENDLOOP.

      APPEND WA_UPLOAD TO IT_UPLOAD.

      CLEAR WA_UPLOAD.

    ENDLOOP.

IF NOT IT_UPLOAD IS INITIAL.

DATA lo_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER .

lo_COMPONENTCONTROLLER =   wd_this->get_componentcontroller_ctr( ).

  lo_componentcontroller->getting_checkbox(

   lv_check_box = ABAP_TRUE                    " char1

*   lv_editable =                       " char1

  ).

ENDIF.

*V001

CLEAR : LV_WS_NAME.

*  get the second worksheet

    READ TABLE LT_WS_NAME INDEX 2 INTO LV_WS_NAME.

    IF LV_WS_NAME IS INITIAL.

      EXIT.

    ENDIF.

* get excel data

    LR_DATA = LO_SPRD_SHEET->IF_FDT_DOC_SPREADSHEET~GET_ITAB_FROM_WORKSHEET( LV_WS_NAME ).

    ASSIGN LR_DATA->* TO <LTA_TABLE>.

    IF <LTA_TABLE> IS INITIAL.

      EXIT.

    ENDIF.

    READ TABLE <LTA_TABLE> ASSIGNING <LA_DATA_STR> INDEX 1.

    DO.

      LV_INDEX = SY-INDEX.

      ASSIGN COMPONENT LV_INDEX OF STRUCTURE <LA_DATA_STR> TO <LA_DATA>.

      IF SY-SUBRC <> 0.

        EXIT.

      ENDIF.

      W_DD03L-FIELDNAME = <LA_DATA>.

      APPEND W_DD03L TO T_DD03L.

ENDDO.

*DELETE <LTA_TABLE> INDEX X.

    LOOP AT <LTA_TABLE> ASSIGNING <LA_DATA_STR>.

      CLEAR : WA_UPLOAD1.

      LOOP AT T_DD03L INTO W_DD03L.

        LV_INDEX = SY-TABIX .

        ASSIGN COMPONENT LV_INDEX OF STRUCTURE <LA_DATA_STR> TO <LA_DATA>.

        CONCATENATE 'WA_UPLOAD1-' W_DD03L-FIELDNAME INTO D_TAB.

*        ASSIGN (D_TAB) TO <FS>.

        ASSIGN  <LA_DATA> TO <FS>.

        TRANSLATE <FS> TO UPPER CASE.

*        assign <FS> to (wa_upload-matnr ).

        CASE LV_INDEX.

          WHEN '3'.

            WA_UPLOAD1-INFNR = <FS>.

          WHEN '4'.

            WA_UPLOAD1-EKORG = <FS>.

          WHEN '5'.

            WA_UPLOAD1-ESOKZ = <FS>.

          WHEN '6'.

            WA_UPLOAD1-WERKS = <FS>.

          WHEN '12'.

            WA_UPLOAD1-BONUS = <FS>.

        ENDCASE.

        CLEAR LV_INDEX.

      ENDLOOP.

      APPEND WA_UPLOAD1 TO IT_UPLOAD1.

      CLEAR WA_UPLOAD1.

    ENDLOOP.

IF NOT IT_UPLOAD1 IS INITIAL.

  lo_componentcontroller->get_chkbox_for_eine(

   lv_check_box =  ABAP_TRUE                    " char1

  ).

ENDIF.

      LO_ND_EINA_NODE->BIND_TABLE( IT_UPLOAD ).

        LO_ND_EINE_NODE->BIND_TABLE( IT_UPLOAD1 ).

  ENDIF.

ENDMETHOD.

Hope this will solve your problem.

Thank you.

Regards,

Balaji.

harish2
Explorer
0 Kudos

Hi Balaji,

Thanks for quick response.

I have question for you when i copy the code into the upload action i am getting the error like

TYPE " CL_FDT_XL_SPREADSHEET" IS UNKNOW,

can you please guide me from where i can get the following classes .

1) CL_FDT_XL_SPREADSHEET

2) CX_FDT_EXCEL_CORE

3) CX_FDT_EXCEL

is there any nugget file to upload using the sap-link program for the above classes.

former_member392866
Active Participant
0 Kudos

Harish,

Actually my domain team provide me those classes..

Those are global classes only... can u check those classes in se24 and let me know whether those are having or not.

Regards,

Balaji.

harish2
Explorer
0 Kudos

Balaji,

I have checked all the 3 classes  in se24 i could not found them.

Can you please help me  in getting this classes.

Thanks,

Harish Singh.

harish2
Explorer
0 Kudos

Balaji,

I have checked all the 3 classes  in se24 i could not found them.

Can you please help me  in getting this classes.

Thanks,

Harish Singh.

former_member392866
Active Participant
0 Kudos

Harish,

Actually some patches will there to get those classes... Those patches provided by sap to particular organizations only   those who are purchased from SAP. It's not available for all organizations .

Hope you got better helpful information. Thank you.

Regards,

Balaji.