*&---------------------------------------------------------------------**& Report ZCREATE_DATA_IN_ADSO*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORTzcreate_data_in_adso.*&---------------------------------------------------------------------**& Variable Declaration*&---------------------------------------------------------------------*DATA:lt_csv_linesTYPE STANDARD TABLE OFstring,lv_filenameTYPE stringVALUE'C:\temp\mara.csv',lv_tablenameTYPE stringVALUE'MARA',lt_fieldsTYPE STANDARD TABLE OFstring,lt_dataTYPE REF TOdata,lo_typedescrTYPE REF TOcl_abap_typedescr,lo_structdescrTYPE REF TOcl_abap_structdescr,lo_tabledescrTYPE REF TOcl_abap_tabledescr,lo_rowTYPE REF TOdata,lt_msgTYPE rs_t_msg,lv_separatorTYPE cVALUE';'.FIELD-SYMBOLS:<fs_table>TYPE STANDARDTABLE,<fs_line>TYPE any,<fs_field>TYPE any.*&---------------------------------------------------------------------**& Selection Screen*&---------------------------------------------------------------------*PARAMETERSp_fileLIKE rlgrap-filenameOBLIGATORY.PARAMETERSp_adsoLIKE rso_s_adso_key-adsonmOBLIGATORY.*&---------------------------------------------------------------------**& Selection Screen program*&---------------------------------------------------------------------**Help user to select the input file.AT SELECTION-SCREEN ON VALUE-REQUEST FORp_file.CALL FUNCTION'/SAPDMC/LSM_F4_FRONTEND_FILE'* EXPORTING* PATHNAME =CHANGINGpathfile=p_fileEXCEPTIONScanceled_by_user=1system_error=2OTHERS=3.IFsy-subrc<>0.ENDIF.*&---------------------------------------------------------------------**& Start of the program*&---------------------------------------------------------------------*START-OF-SELECTION." 1. Lire le fichier CSVlv_filename=p_file.CALL FUNCTION'GUI_UPLOAD'EXPORTINGfilename=lv_filenamefiletype='ASC'has_field_separator='X'TABLESdata_tab=lt_csv_linesEXCEPTIONSfile_open_error=1file_read_error=2no_batch=3gui_refuse_filetransfer=4invalid_type=5no_authority=6unknown_error=7bad_data_format=8header_not_allowed=9separator_not_allowed=10header_too_long=11unknown_dp_error=12access_denied=13dp_out_of_memory=14disk_full=15dp_timeout=16OTHERS=17.IFsy-subrc<>0.WRITE:/'Erreur de lecture du fichier'.RETURN.ENDIF." 2. Extraire les noms des champs depuis la première ligneDATA(lv_header_line)=lt_csv_lines[1].SPLITlv_header_lineATlv_separatorINTOTABLElt_fields." Supprimer la ligne d'entête du tableauDELETElt_csv_linesINDEX1." Obtenir la structure de la table DDIC dynamiquementCONCATENATE'/BIC/A'p_adso'2'INTOlv_tablename.lo_typedescr=cl_abap_typedescr=>describe_by_name(lv_tablename).lo_structdescr=CASTcl_abap_structdescr(lo_typedescr).lo_tabledescr=cl_abap_tabledescr=>create(lo_structdescr).* Créer dynamiquement la tableCREATE DATAlt_dataTYPE HANDLElo_tabledescr.ASSIGNlt_data->*TO<fs_table>.* Boucler sur les lignes du CSV et remplir dynamiquementLOOP AT lt_csv_linesINTODATA(lv_line).DATA(lt_values)=VALUEstring_table().SPLITlv_lineATlv_separatorINTOTABLElt_values." Créer une ligne videCREATE DATAlo_rowTYPE HANDLElo_structdescr.ASSIGNlo_row->*TO<fs_line>." Remplir chaque champ de la ligneDATA(idx)=0.LOOP AT lt_fieldsASSIGNINGFIELD-SYMBOL(<fieldname>).idx=idx+1.READTABLElt_valuesASSIGNINGFIELD-SYMBOL(<value>)INDEXidx.IFsy-subrc=0.ASSIGNCOMPONENT<fieldname>OF STRUCTURE<fs_line>TO<fs_field>.IFsy-subrc=0.<fs_field>=<value>.ENDIF.ENDIF.ENDLOOP." Ajouter la ligne à la tableAPPEND<fs_line>TO<fs_table>.ENDLOOP." lecture du contenu chargé* LOOP AT <fs_table> ASSIGNING <fs_line>.* ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_line> TO <fs_field>.* IF sy-subrc = 0.* WRITE: / 'MATNR:', <fs_field>.* ENDIF.* ENDLOOP.**2 - Création de la request dans l'aDso.CALL FUNCTION'RSDSO_WRITE_API'EXPORTINGi_adsonm=p_adsoi_allow_new_sids='X'* i_activate_data = 'X'it_data=<fs_table>IMPORTINGet_msg=lt_msgEXCEPTIONSwrite_failed=1datastore_not_found=2OTHERS=3.IFsy-subrc<>0.MESSAGEIDsy-msgidTYPE sy-msgtyNUMBERsy-msgnoWITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.ELSE.WRITE:'Request created in the aDso. you need to activate it.'.ENDIF.* cl_demo_output=>display(* EXPORTING* data = lt_msg* ).