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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.