Internal Table Structure
hi
i have an internal table itab with fields
f1(20) type c,
f2 type p,
f3 type p decimals 2,
f4 like mseg-matnr,
f5 like makt-maktx.
can i know the structure and dat type of the firleds at run time of an internal table..... like what we get thru FM <b>DDIF_FIELDINFO_GET</b>
Abhishek suppal
Hi Abhishek,
1. This can be done using Class/Object.
2. The required class (SE24) is
CL_ABAP_structDESCR.
3. Sample Program : (Just copy and paste)
REPORT typedescr_test.
*------- Variables
data : det type ref to CL_ABAP_structDESCR.
data : wa like line of det->components.
*------ Internal Table
DATA : BEGIN OF ITAB OCCURS 0,
MANDT TYPE T001-MANDT, "--- type
PERNR LIKE P0001-PERNR, " --- like
MATNR TYPE MARA-MATNR, "--- type
EBELN LIKE EKKO-EBELN, "--- like
END OF ITAB.
Start of selection
START-OF-SELECTION.
det ?= cl_abap_typedescr=>describe_by_DATA( ITAB ).
loop at det->components into wa.
write :/ wa-name , wa-type_kind , wa-length.
endloop.
Number Of columns
describe table det->components.
write /: sy-tfill.
hope the above helps.
Regards,
Amit M.
Similar Messages
-
Determining internal table structure dynamically
Hi,
I have a number of internal tables in my program which I declare using types. As an example:
TYPES: begin of ty_hierarchy,
control_id(6) type c,
node_id(10) type c,
node_name type bezei40,
material type matnr,
node_level type prodh_stuf,
node_parent(10) type c,
end of ty_hierarchy.
DATA: it_hierarchy type ty_hierarchy occurs 0.
Further down my program I need to determine the structure of internal table IT_HIERARCHY dynamically. Because I have a number of internal tables, I need to determine which internal table is being processed. Therefore it's important that I know the structure of the table that I'm currently processing.
I am aware of CL_ABAP* classes and functions like GET_COMPONENT_LIST. However because I have declared my tables using the TYPE statement the method/function cannot read my table structure correctly. If I changed my declaration to be as below, the method/function work! However I don't want to do this as I use field symbols to reference my internal tables and need to use the TYPE statement.
DATA: begin of ty_hierarchy,
control_id(6) type c,
node_id(10) type c,
node_name type bezei40,
material type matnr,
node_level type prodh_stuf,
node_parent(10) type c,
end of ty_hierarchy.
DATA: begin of it_hierarchy occurs 0.
include structure ty_hierarchy
DATA: end of it_hierarchy.
Does anyone know on how I can determine my internal table structure dynamically but still keeping my internal table declarations using TYPE statement?
Any help would be greatly appreciated with reward points .....
Thanks
LiamHello Liam
Both the ABAP-OO as well as the FM-based approach described by Eswar work well with your way of defining the itabs. I described three different ways how to get the structure of your itab dynamically:
- directly using the itab
- using a field symbol
- using a data reference
REPORT zus_sdn_dynamic_itabs.
TYPE-POOLS: abap.
TYPES: BEGIN OF ty_hierarchy,
control_id(6) TYPE c,
node_id(10) TYPE c,
node_name TYPE bezei40,
material TYPE matnr,
node_level TYPE prodh_stuf,
node_parent(10) TYPE c,
END OF ty_hierarchy.
DATA:
gs_hierarchy TYPE ty_hierarchy,
it_hierarchy TYPE ty_hierarchy OCCURS 0.
DATA:
gt_comp TYPE abap_compdescr_tab,
gs_comp_a LIKE LINE OF gt_comp,
gd_type TYPE abap_typekind,
gs_comp TYPE rstrucinfo,
it_comp TYPE TABLE OF rstrucinfo.
DATA:
go_struct TYPE REF TO cl_abap_structdescr,
go_table TYPE REF TO cl_abap_tabledescr,
gdo_data TYPE REF TO data.
FIELD-SYMBOLS:
<gt_itab> TYPE table.
START-OF-SELECTION.
GET REFERENCE OF it_hierarchy INTO gdo_data.
ASSIGN gdo_data->* TO <gt_itab>.
* (1) Describe directly by using the itab
* go_table ?= cl_abap_structdescr=>describe_by_data( it_hierarchy ).
* (2) Describe indirectly by using field symbol
* go_table ?= cl_abap_structdescr=>describe_by_data( <gt_itab> ).
* (3) Describe by data reference to itab
go_table ?= cl_abap_structdescr=>describe_by_data_ref( gdo_data ).
go_struct ?= go_table->get_table_line_type( ).
WRITE: / 'ABAP-OO Version:'.
gt_comp = go_struct->components.
LOOP AT gt_comp INTO gs_comp_a.
WRITE: / gs_comp_a-name,
gs_comp_a-length,
gs_comp_a-type_kind,
gs_comp_a-decimals.
ENDLOOP.
SKIP 2.
CALL FUNCTION 'GET_COMPONENT_LIST'
EXPORTING
program = sy-repid
fieldname = 'GS_HIERARCHY'
TABLES
components = it_comp.
WRITE: / 'Function Module Version:'.
LOOP AT it_comp INTO gs_comp.
WRITE: / gs_comp-compname,
gs_comp-level,
gs_comp-leng,
gs_comp-type,
gs_comp-olen,
gs_comp-decs.
ENDLOOP.
END-OF-SELECTION.
Regards
Uwe -
Dynamic internal table structure
pl. give the solution to create dynamically internal table structure with respective of different table.
Hi and welcome to the SDN,
this topic is more related to abap, but anyway:
data: l_tabname(30) type c value 'MARA',
ref_data type ref to data.
field-symbols: <fs_tab> type table.
create data ref_data type standard table of (l_tabname).
assign ref_data->* to <fs_tab>.
Now <fs_tab> is a internal table with structure of table mara.
Hope this helps!
regards
Siggi -
Change internal table structure dynamically
Dear Experts , I have a requirement to add an attribute to already declared internal table which is declared in standard SAP code, is it possible to change internal table structure dynamically.
my internal table is of type merel_t_grid2 which is standard table type in SAP , now I want to add an attribute of type LVC_T_STYL in my internal table so that I can modify the cell property of ALV grid.
I cant append LVC_T_STYL in standard structure because enhancement category of merel_t_grid2 is of type char and not deep
my internal table contains data to be displayed in ALV.
please helpDear Experts , I have a requirement to add an attribute to already declared internal table which is declared in standard SAP code, is it possible to change internal table structure dynamically.
my internal table is of type merel_t_grid2 which is standard table type in SAP , now I want to add an attribute of type LVC_T_STYL in my internal table so that I can modify the cell property of ALV grid.
I cant append LVC_T_STYL in standard structure because enhancement category of merel_t_grid2 is of type char and not deep
my internal table contains data to be displayed in ALV.
please help -
Internal table structure/ALV Problem
Hello, Im new to ABAP (third day) so careful explination would be greatly appreciated.
So I'm trying to display two tables together that I've joined into an ALV. Im creating an internal table to hold the information that I want to display from the join I created.
When I call my alv set_table_for_first_display I need to specify i_structure_name. Right now im using the name of my internal table, but I dont know if im doing this right. When I run my program i get an error NO_FIELDCATALOG_AVAILABLE. After searching many other posts i think its because my internal table doesnt have a structure, but im not sure.
Here is my code, thanks in advance!:
CLASS application DEFINITION.
PUBLIC SECTION.
METHODS: constructor,
read_data IMPORTING l_DAUAT TYPE AFPO-DAUAT,
fill_list.
PRIVATE SECTION.
DATA: BEGIN OF tbljoin,
AFPO_AUFNR TYPE AFPO-AUFNR,
AFPO_DAUAT TYPE AFPO-DAUAT,
AFPO_DGLTP TYPE AFPO-DGLTP,
AFPO_DGLTS TYPE AFPO-DGLTS,
AFPO_OBJNP TYPE AFPO-OBJNP,
AFPO_XLOEK TYPE AFPO-XLOEK,
AFKO_GLTRP TYPE AFKO-GLTRP,
END OF tbljoin,
afpo_tab TYPE TABLE OF afpo,
join_tab LIKE STANDARD TABLE OF TBLJOIN,
container TYPE REF TO cl_gui_custom_container,
alv_list TYPE REF TO cl_gui_alv_grid.
ENDCLASS.
*Class Implementations
CLASS application IMPLEMENTATION.
METHOD read_data.
Select: POAUFNR PODAUAT PODGLTP PODGLTS POOBJNP POXLOEK
KO~GLTRP
FROM afpo as po INNER JOIN AFKO as KO
on POAUFNR = KOAUFNR
INTO TABLE join_tab
where dauat = l_dauat.
ENDMETHOD.
METHOD constructor.
CREATE OBJECT container
EXPORTING container_name = 'LIST_AREA'.
CREATE OBJECT alv_list
EXPORTING i_parent = container.
CALL METHOD alv_list->set_table_for_first_display
EXPORTING i_structure_name = 'JOINTAB'
CHANGING it_outtab = join_tab.
ENDMETHOD.
METHOD fill_list.
CALL METHOD alv_list->refresh_table_display.
ENDMETHOD.
ENDCLASS.
DATA: object_ref TYPE REF TO application.
*Screens Interfaces
TABLES: AFPO, AFKO.
*Processing Blocks called by the Runtime Environment *
*Event Block START-OF-SELECTION
START-OF-SELECTION.
CREATE OBJECT object_ref.
CALL SCREEN 100.
*Dialog Module PBO
MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
CALL METHOD object_ref->fill_list.
ENDMODULE.
*Dialog Module PAI
MODULE user_command_0100 INPUT.
IF sy-ucomm = 'BACK' OR
sy-ucomm = 'EXIT' OR
sy-ucomm = 'CANCEL'.
LEAVE PROGRAM.
ELSE.
CALL METHOD object_ref->read_data
EXPORTING l_dauat = afpo-dauat.
ENDIF.
ENDMODULE.Hi Nathan,
Fieldcatalog has important role in ALV .U missed that one .Go through these steps.
<b>1</b>.
Define ur Fieldcatalog table like this .
DATA:
i_field TYPE lvc_t_fcat,
w_field TYPE lvc_s_fcat.
<b>2</b>.
Build like this
FORM build_fieldcatalog_tab .
DATA :pos TYPE i VALUE 1.
CLEAR: w_field,i_field[],pos.
w_field-col_pos = pos + 1.
w_field-fieldname = 'MATNR' .
w_field-tabname = 'I_MARC' .
w_field-scrtext_m = 'Material' .
APPEND w_field TO i_field.
CLEAR w_field.
w_field-col_pos = pos + 1.
w_field-fieldname = 'WERKS' .
w_field-tabname = 'I_MARC' .
w_field-scrtext_m = 'Plant' .
APPEND w_field TO i_field.
CLEAR w_field.
ENDFORM.
<b>3</b>.
Pass through this method
<b> CALL METHOD alv_grid->set_table_for_first_display</b>
EXPORTING
I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER =
I_CONSISTENCY_CHECK =
i_structure_name = 'MARA'
IS_VARIANT =
I_SAVE =
I_DEFAULT = 'X'
is_layout = w_layout
IS_PRINT = w_print
IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING =
IT_HYPERLINK =
IT_ALV_GRAPHICS =
IT_EXCEPT_QINFO =
CHANGING
<b> it_outtab = i_marc</b>
<b> it_fieldcatalog = i_field</b>
IT_SORT =
IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
<b>4</b>.
You should remove
<b>i_structure_name = 'JOINTAB'</b>
y should use this when u pass single table data display.
I hope that it helps u .
<b>Thanks,
Venkat.O</b> -
Need to make the internal table structure dynamic
Hi ,
I need to upload data from an excel file, the columns in the excel keep on varying
E.g the number of columns in one excel file can be 10, in the second excel file it can be 15.
So in order to upload the data into an internal table the structre of internal table needs to be dynamic and change according to the number of fields in the input file .
Is it possible by using field symbols or is there any other method to do the same
Thanks.
Nishant
Edited by: nishant patel on Sep 17, 2009 10:48 AMHi Nishant,
According to ur requirement, dynamic internal table can be created like below. But database table name has to passed dynacimally.
DATA: ftab TYPE STANDARD TABLE OF ddfield,
ftab_wa TYPE ddfield,
fcat_itab TYPE lvc_t_fcat,
fcat_wa TYPE lvc_s_fcat,
poi_itab TYPE REF TO data.
FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE.
CALL FUNCTION 'DD_NAMETAB_TO_DDFIELDS'
EXPORTING
tabname = p_table " Pass database table name dynamically
TABLES
ddfields = ftab.
LOOP AT ftab INTO ftab_wa.
fcat_wa-fieldname = ftab_wa-fieldname.
fcat_wa-ref_field = ftab_wa-fieldname.
fcat_wa-ref_table = p_table.
APPEND fcat_wa TO fcat_itab.
ENDLOOP.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = fcat_itab
IMPORTING
ep_table = poi_itab
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
ASSIGN poi_itab->* TO <itab>. " <itab> is dynamic internal table
Might help u.
Thanks.
Edited by: Sap Fan on Sep 17, 2009 1:19 PM -
CCM 2.0's internal table structure
Hi,
I want to know how CCM stores the catalog content internally (if it stores in a table,then please provide the table name).
Please provide an answer at the earliest.
Thanks,
SwethaI was hunting for same recently. I ran the SQL trace on report /CCM/VERIFY_CATALOG. This report returns all items with field values for a particular catalog.
According to the trace results, the report mainly hits two tables: /CCM/D_VALUE_D, /CCM/D_VALUE_TXT.
Upon a brief look in SE11, these tables don't actually hold field values but rather store a bunch of "cluster" references. Being a non-technical person, I can only guess that this is the closest I can get to item data in the ABAP Dictionary. I'll be happy if someone can prove me wrong
Cheers,
Serguei -
Create object/structure like dynamic internal table
Hi,
We have created dynamic internal table with some fields.
for the above how to create structure or internal table like dynamic internal table structure .
Scenario: internal table itab1 ( with header line) have 5 fields.
Based on some of the conditions in layout of the report.
we have to create dynamic internal table.
field-symbols: <FS> type standard table.
we are able to create dynamic internal table with 3 fields
with assignment <fs> = itab1[]
the columns are not appearing but data appearing in next column.
how to solve this one
Thanks
RameshHi Ramesh,
I hope this code works...
report yup_alv_datbase .
*-Display Database table contents in ALV Grid Format
>********************************************************************
This report displays data from SAP tables, views (like SE16) *
FM : REUSE_ALV_GRID_DISPLAY *
tables:
dd02l, " SAP tables
dd03l. " Table Fields
type-pools: slis. " ALV Global Types
selection-screen :
begin of line, comment 1(35) v_1 for field p_table. "#EC NEEDED
parameters p_table like dd03l-tabname obligatory memory id dtb.
selection-screen end of line.
selection-screen :
begin of line, comment 1(35) v_2 for field p_max. "#EC NEEDED
parameters p_max(2) type n default '20' obligatory.
selection-screen end of line.
at selection-screen.
select single * from dd02l where tabname = p_table
and as4local = 'A'
and as4vers = '0000'.
if sy-subrc ne 0.
Table & is not active in the Dictionary
message e402(mo) with p_table.
elseif dd02l-tabclass = 'INTTAB'.
& is a structure, not a table
message e403(mo) with p_table.
endif.
initialization.
v_1 = 'Table'.
v_2 = 'Maximum of records'.
start-of-selection.
perform f_display_data.
Form F_DISPLAY_DATA
form f_display_data.
Macro definition
define m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = 'X'.
append ls_sort to lt_sort.
end-of-definition.
data:
l_long type i,
lp_struct type ref to data,
lp_table type ref to data, " Pointer to dynamic table
of_sdescr type ref to cl_abap_structdescr,
ls_lvc_cat type lvc_s_fcat,
lt_lvc_cat type lvc_t_fcat, " Field catalog
ls_fieldcat type slis_fieldcat_alv,
lt_fieldcat type slis_t_fieldcat_alv, " Field catalog
ls_layout type slis_layout_alv,
lt_sort type slis_t_sortinfo_alv, " Sort table
ls_sort type slis_sortinfo_alv.
field-symbols :
<fieldcat> type slis_fieldcat_alv,
<lt_data> type table, " Data to display
<fs> type any,
<components> type abap_compdescr.
Dynamic creation of a structure
create data lp_struct type (p_table).
assign lp_struct->* to <fs>.
Fields Structure
of_sdescr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
loop at of_sdescr->components assigning <components>.
Field MANDT not displayed
if sy-tabix = 1 and <components>-name = 'MANDT'.
continue. " Next loop
endif.
Build Fieldcatalog
ls_lvc_cat-fieldname = <components>-name.
ls_lvc_cat-ref_table = p_table.
append ls_lvc_cat to lt_lvc_cat.
Build Fieldcatalog
ls_fieldcat-fieldname = <components>-name.
ls_fieldcat-ref_tabname = p_table.
append ls_fieldcat to lt_fieldcat.
endloop.
Create internal table
call method cl_alv_table_create=>create_dynamic_table
exporting it_fieldcatalog = lt_lvc_cat
importing ep_table = lp_table.
assign lp_table->* to <lt_data>.
Read data
select * from (p_table) up to p_max rows
into corresponding fields of table <lt_data>
order by primary key.
if <lt_data>[] is initial.
No table entries found for specified key
message i429(mo).
exit.
endif.
Read key field to Build Sort Table
select * from dd03l where tabname = p_table
and fieldname <> '.INCLUDE'
and as4vers = '0000'
and as4local = 'A'
order by position.
read table lt_fieldcat assigning <fieldcat>
with key fieldname = dd03l-fieldname.
check sy-subrc eq 0.
add dd03l-leng to l_long.
if dd03l-keyflag = 'X'.
Build Sort Table
m_sort dd03l-fieldname.
<fieldcat>-key = 'X'.
elseif l_long > 150.
<fieldcat>-tech = 'X'.
endif.
endselect.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
is_layout = ls_layout
it_fieldcat = lt_fieldcat
it_sort = lt_sort
tables
t_outtab = <lt_data>.
endform. " F_DISPLAY_DATA
END OF PROGRAM Z_ALV_DYNAMIC_DATA *********************
Regards,
Sampath -
Modify the structure of internal table which created dynamically!!!
HI All,
I am creating internal table dynamically using the below syntax. Now I need to remove few of the fields from the internal table structure. Could you please help me how to go ahead in these cases?
* Create table dynamically for local data
CREATE DATA gv_table_l TYPE TABLE OF (<fs_tabname>).
CREATE DATA gv_wa_l TYPE (<fs_tabname>).
ASSIGN gv_table_l->* TO <fs_local_tab>.
ASSIGN gv_wa_l->* TO <fs_local_wa
>.
Please let me know if you have any thoughts.
Thanks,
Raghu.Hi ,
check this wiki
[Internal Table|http://wiki.sdn.sap.com/wiki/display/Snippets/Howtocreateinternaltable+dynamically]
in your case ...
1.Get filed list based on the type ...make use of "cl_abap_datadescr=>describe_by_type('MARA'), check for syntax or sample programs...
2.Delete fields which you dont want to be in your internal table....
3.Create internal table using method " CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE" ref attached link for sample code by Pinaki...
regards
Prabhu -
Internal table header structure!
Hi friends!
I am creating a dynamic internal table for WAGE TYPES and the internal table structure is like PERNR WT1500 WT1501.
The Wage Types depends on the selection screen and therefore they vary and the dynamic internal table structure is created successfully.
Now, I have another internal table
PERNR WAGETYP AMOUNT
1 1500 200
1 1501 300
2 1500 100
2 1501 500
Final output shall be populated under the dynamic Internal table.
PERNR WT1500 WT1501
1 200 300
2 100 500
Could you please help as to how can I get the desired output or any ideas.
Thank you for your time.Any thoughts!
-
Report output from memory to internal table (corresponding fields)
How can we pick any standard report output such as
RM07DOCS on to memory and from memory to an internal
table.Here by internal table ,i do not mean of type c
containing complete report but data should go from output to corresponding fields of internal table structure of whom is defined as same of the output.SUBMIT rfbila00 AND RETURN
EXPORTING LIST TO MEMORY
WITH sd_ktopl-low = ' '
WITH sd_bukrs IN s_bukrs
WITH sd_prctr IN s_prctr
WITH bilavers = p_fsv
WITH bilaspra = 'EN'
WITH bilbjahr = p_fyear
WITH b-monate IN s_per
WITH bilvjahr = v_cfyear
WITH v-monate = l_per
WITH bilagvar = P_LAYOUT
WITH bilagrid = 'X'
WITH bilabkon = '2'
WITH bilagkon = '3'
WITH bilasumm = '0'
WITH bilavart = '1'
WITH bilaskal = '3/0'.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = t_list
EXCEPTIONS
not_found = 1.
REFRESH t_ascii.
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
listasci = t_ascii " list converted to ASCII
listobject = t_list
EXCEPTIONS
empty_list = 1
list_index_invalid = 2
OTHERS = 3.
u will get the output in t_list...u have to split as per ur requir......
this will help u.....
Reward IF...........
Regards
Anbu -
How to use dynamic internal table when using gui_upload?
Hi Experts,
my scenario is like i have header data, item data and serial numbers.
so with respect to the quantity in unit of measure ,there will be number of serial numbers..
i have declared the dynamic internal table,but i am not getting the logic to change the structure accordingly with respect to the flat file entries..
is it possible to do or its not possible....any suggestion!!!!i have declared like this....
TYPES: BEGIN OF ty_final,
bldat TYPE string, "Document Date
budat TYPE string, "Psting Date
bktxt TYPE string, "Document Header Text
werks TYPE string, "Plant
lgort TYPE string, "Storage Location
matnr TYPE string, "Material Number
erfmg TYPE string, "Quantity in Unit Of Entry
anln1 TYPE string, "Asset Number
anln2 TYPE string, "Asset Subnumber
sernr TYPE string, "serial Number
END OF ty_final.
DATA : it_final TYPE TABLE OF ty_final,
wa_final TYPE ty_final.
FIELD-SYMBOLS : <fs_final> TYPE table.
ASSIGN it_final TO <fs_final>.
after this i called gui upload and passed internal table it_final..
but i have to change the internal table structure dynamically before the upload function.so that it will match with the flat file...
Regards
KarthickThere are at least two approaches you can use to change/generate new dynamic-structured table. Either with [RTTI + RTTS|https://wiki.sdn.sap.com/wiki/display/Snippets/CreatingFlatandComplexInternalTablesDynamicallyusingRTTI] or using [CL_ALV_TABLE_CREATE|http://www.sdn.sap.com/irj/scn/advancedsearch?query=cl_alv_table_create] . In this one just determine fieldcatalog of current table and change it accordingly, then regenarate table.
There are plenty of examples in SCN for this. You should not face difficulties applying this.
Regards
Marcin -
How to populate internal table field with text data?
Hello Experts,
I was able to load text file to a internal table but data is not populating each field. Can someone help me how to populate each field of internal table from text file?
Here is the text file:
io_name, io_type, io_txsht, io_txlng, io_datatype, io_length
ZEA_IO1, CHA, IO Test, IO Test 1, CHAR, 20
ZEA_IO2, CHA, IO Test, IO Test 2, CHAR, 20
Here is the Code:
*& Report ZAS_BAPI_TEST *
*& InfoObject Creation through BAPI.
*& Read the Text file, call a BAPI to create InfoObjects. *
*& Text file will hold the Info Object Structure. Text file will be *
*& located either work station or local PC.
*& Step 1. Create internal table to hold InfoObject structure *
*& Step 2. Retrieve/Load text file into Internal Table structure *
*& Step 3. Call BAPI Function to Create IO *
*& Step 4. Call BAPI Function to Activate IO *
REPORT ZAS_BAPI_TEST .
Make data separator a comma
CONSTANTS: gc_tab TYPE c VALUE ','.
Declaring Internal table for creating InfoObject
DATA: p_file TYPE string.
DATA: BEGIN OF itab-bapi OCCURS 0,
io_name like BAPI6108-infoobject,
io_type like BAPI6108-type,
io_txsht like BAPI6108-textshort,
io_txlng like BAPI6108-textlong,
io_datatype like BAPI6108-datatp,
io_length like BAPI6108-intlen,
END OF itab-bapi.
DATA ibapi LIKE STANDARD TABLE OF itab-bapi.
PARAMETERS: sel_file(1500) TYPE c default ' ' OBLIGATORY LOWER CASE.
PUT THE TEXT FILE PATH TO P_FILE
p_file = sel_file.
Copy the file from the workstation to the server ****
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = SPACE
HEADER_LENGTH = 0
DAT_MODE = SPACE
CODEPAGE = SPACE
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
READ_BY_LINE = 'X'
IMPORTING
FILELENGTH =
HEADER =
TABLES
data_tab = itab-bapi[]
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
not_supported_by_gui = 17
error_no_gui = 18
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.
MESSAGE e012(zea_spms) WITH 'Method' 'GUI_UPLOAD' sy-subrc.
&1 &2 issued return code &3
ELSE.
pit_data[] = lit_data[].
ENDIF.
ENDIF.
loop at itab-bapi.
write: /5 itab-bapi-io_name,
20 itab-bapi-io_type,
30 itab-bapi-io_txsht,
50 itab-bapi-io_txlng,
75 itab-bapi-io_datatype,
85 itab-bapi-io_length.
endloop.
SELECT THE LOCATION FOR TEXT FILE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ''
def_path = 'C:\'
mask = ',Documentos de texto (*.txt), *.txt.'
mode = ''
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
find '.txt' IN p_file.
if sy-subrc <> 0.
concatenate p_file '.txt' into sel_file.
else.
sel_file = p_file.
endif.
Create InfoObject through BAPI Function
*CALL FUNCTION 'BAPI_IOBJ_CREATE'.
*IMPORTING
VALUE(DETAILS) LIKE BAPI6108 STRUCTURE BAPI6108
*EXPORTING
VALUE(INFOOBJECT) LIKE BAPI6108-INFOOBJECT
VALUE(RETURN) LIKE BAPIRET2 STRUCTURE BAPIRET2
TABLES
COMPOUNDS STRUCTURE BAPI6108CM OPTIONAL
ATTRIBUTES STRUCTURE BAPI6108AT OPTIONAL
NAVIGATIONATTRIBUTES STRUCTURE BAPI6108AN OPTIONAL
ATRNAVINFOPROVIDER STRUCTURE BAPI6108NP OPTIONAL
HIERARCHYCHARACTERISTICS STRUCTURE BAPI6108HC OPTIONAL
ELIMINATION STRUCTURE BAPI6108IE OPTIONAL
RETURNTABLE STRUCTURE BAPIRET2 OPTIONAL
Activate InfoObject through BAPI Function
CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE'
*ENDFORM. " RETRIEVE_DATASET
I appreciate your help.
Regards,
MauI have used tab delimited file.
Here are file contents
io_name io_type io_txsht io_txlng io_datatype io_length
ZEA_IO1 CHA IO Test IO Test 1 CHAR 20
ZEA_IO2 CHA IO Test IO Test 2 CHAR 20
And here is program used
*& Report ZAS_BAPI_TEST *
*& InfoObject Creation through BAPI.
*& Read the Text file, call a BAPI to create InfoObjects. *
*& Text file will hold the Info Object Structure. Text file will be *
*& located either work station or local PC.
*& Step 1. Create internal table to hold InfoObject structure *
*& Step 2. Retrieve/Load text file into Internal Table structure *
*& Step 3. Call BAPI Function to Create IO *
*& Step 4. Call BAPI Function to Activate IO *
REPORT ZAS_BAPI_TEST .
Make data separator a comma
CONSTANTS: gc_tab TYPE c VALUE ','.
Declaring Internal table for creating InfoObject
DATA: p_file TYPE string.
DATA: BEGIN OF itab-bapi OCCURS 0,
io_name like BAPI6108-infoobject,
io_type like BAPI6108-type,
io_txsht like BAPI6108-textshort,
io_txlng like BAPI6108-textlong,
io_datatype like BAPI6108-datatp,
io_length like BAPI6108-intlen,
END OF itab-bapi.
DATA ibapi LIKE STANDARD TABLE OF itab-bapi.
PARAMETERS: sel_file(1500) TYPE c default ' ' OBLIGATORY LOWER CASE.
PUT THE TEXT FILE PATH TO P_FILE
p_file = sel_file.
Copy the file from the workstation to the server ****
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
<b>FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'</b>
TABLES
data_tab = itab-bapi[]
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
not_supported_by_gui = 17
error_no_gui = 18
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.
MESSAGE e012(zea_spms) WITH 'Method' 'GUI_UPLOAD' sy-subrc.
&1 &2 issued return code &3
ELSE.
pit_data[] = lit_data[].
ENDIF.
ENDIF.
loop at itab-bapi.
write: /5 itab-bapi-io_name,
20 itab-bapi-io_type,
30 itab-bapi-io_txsht,
50 itab-bapi-io_txlng,
75 itab-bapi-io_datatype,
85 itab-bapi-io_length.
endloop.
SELECT THE LOCATION FOR TEXT FILE
AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ''
def_path = 'C:\'
mask = ',Documentos de texto (*.txt), *.txt.'
mode = ''
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
find '.txt' IN p_file.
if sy-subrc <> 0.
concatenate p_file '.txt' into sel_file.
else.
sel_file = p_file.
endif.
Create InfoObject through BAPI Function
*CALL FUNCTION 'BAPI_IOBJ_CREATE'.
*IMPORTING
VALUE(DETAILS) LIKE BAPI6108 STRUCTURE BAPI6108
*EXPORTING
VALUE(INFOOBJECT) LIKE BAPI6108-INFOOBJECT
VALUE(RETURN) LIKE BAPIRET2 STRUCTURE BAPIRET2
TABLES
COMPOUNDS STRUCTURE BAPI6108CM OPTIONAL
ATTRIBUTES STRUCTURE BAPI6108AT OPTIONAL
NAVIGATIONATTRIBUTES STRUCTURE BAPI6108AN OPTIONAL
ATRNAVINFOPROVIDER STRUCTURE BAPI6108NP OPTIONAL
HIERARCHYCHARACTERISTICS STRUCTURE BAPI6108HC OPTIONAL
ELIMINATION STRUCTURE BAPI6108IE OPTIONAL
RETURNTABLE STRUCTURE BAPIRET2 OPTIONAL
Activate InfoObject through BAPI Function
CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE'
*ENDFORM. " RETRIEVE_DATASET
This program is working fine. You can test it.
Only problem is as the column headings are big for some columns, they are getting truncated which you can always change by changing the column width in declaration
Please let me know if this helps.
ashish -
Creation of dynamic internal table is not synchronous
In my code following lines are used to create a dynamic table.
REFRESH : INCTABL .
CLEAR INCTABL .
INCTABL-LINE = 'data: begin of dyntab occurs 10,'. APPEND INCTABL.
INCTABL-LINE = 'zpltnamec like zvendplt-zpltnamec,'. APPEND INCTABL.
INCTABL-LINE = 'sourcing like zopsdwbom-sourcing,'. APPEND INCTABL.
INCTABL-LINE = 'zmatgrp like zrmrpmaterial-zmatgrp,'. APPEND INCTABL.
INCTABL-LINE = 'zcollection like zrmrpmaterial-zcollection,'.
APPEND INCTABL.
INCTABL-LINE = 'fiscintrodt like zrmrpmaterial-zfiscintrodt,'.
APPEND INCTABL.
INCTABL-LINE = 'bednr like ekpo-bednr,'. APPEND INCTABL.
INCTABL-LINE = 'revlv like ekpo-revlv,'. APPEND INCTABL.
INCTABL-LINE = 'ematn like ekpo-ematn,'. APPEND INCTABL.
INCTABL-LINE = 'menge like mara-eannr,'. APPEND INCTABL.
INCTABL-LINE = 'stprs like mara-eannr,'. APPEND INCTABL.
*inctabl-line = 'kbetr like cdred-f_new,'. append inctabl.
DATA : T_KBETR(72) .
DATA :CNT(2).
DO LIN TIMES .
CNT = SY-INDEX .
CONCATENATE 'kbetr' CNT ' like cdred-f_new,' INTO T_KBETR .
CONDENSE T_KBETR .
INCTABL-LINE = T_KBETR . APPEND INCTABL.
ENDDO .
INCTABL-LINE = 'end of dyntab. '. APPEND INCTABL.
INSERT REPORT 'zcrchangereport_3'(001) FROM INCTABL.
but during run time it is using the previously created dynamic internal table structure and then creating currently required internal table.
how to overcome this problem/
Thanks.Hello,
Instead of creating report, create subroutine pool. Like
INCTABL-LINE = 'report ztest.'. APPEND INCTABL.
INCTABL-LINE = 'form main'. APPEND INCTABL.
INCTABL-LINE = 'data: begin of dyntab occurs 10,'. APPEND INCTABL.
INCTABL-LINE = 'zpltnamec like zvendplt-zpltnamec.'. APPEND INCTABL.
INCTABL-LINE = 'data: end of dyntab.'. APPEND INCTABL.
CATCH SYSTEM-EXCEPTIONS GENERATE_SUBPOOL_DIR_FULL = 9.
GENERATE SUBROUTINE POOL inctabl NAME l_name
MESSAGE L_MESSAGE LINE L_LINE WORD L_WORD.
ENDCATCH.
IF L_MESSAGE IS INITIAL.
PERFORM (L_FORM) IN PROGRAM (L_NAME).
ELSE.
WRITE : L_MESSAGE, L_LINE.
ENDIF.
You can get the message in L_message variable, if any error occurs.
Regards,
Naimesh -
Hi,
I need to export the content of a excel file to an internal table.
I looked for it and I found some samples. But they opened the excel file.
My excel file comes from upload and I have it in a xstring variable.
The functions for excel expect for a file name, but I have the xstring only.
Are there functions (to export the content to an internal table) that expect a xstring as a parameter?
Thanks a lot.
Best Regards,
Jorge Luizhi,
I am uploading excel file. Ensure that columns in your excel are exactly present in the internal table structure that you use.
I am using a TabDelimeted file as input for the below mention case .
Declare context node FILE
with Attributes:
Filename type String
MimeType type String
FILE type xstring.
Place 'Fileupload UI element' on you view , bind DATA property to Attribute u2018FILEu2019 created in the context node.
Create a Button lets call UPLOAD. on its click action put the following code.
method upload_file .
data: s_cont type string,
x_cont type xstring,
convt type ref to cl_abap_conv_in_ce,
item_file type xstringval.
data: input_string type string,
fields type string_table,
fields2 type string_table,
tbl_fields type string_table,
s_table type string_table,
ls_table like line of s_table,
ls like line of fields,
lv_num_cols type i.
data: lt_data type table of ZMYREC, "here
ls_data like line of lt_data,
lv_data type string.
field-symbols: <wa_table> like line of s_table.
wd_this->m_elem_file->get_attribute(
exporting
name = `FILE`
importing
value = item_file ).
convt = cl_abap_conv_in_ce=>create( input = item_file ).
convt->read( importing data = s_cont ).
"Column headers
split s_cont at cl_abap_char_utilities=>cr_lf into table s_table.
read table s_table into ls_table index 1.
"Delete column header
delete s_table index 1.
split ls_table at cl_abap_char_utilities=>horizontal_tab into table fields.
lv_num_cols = lines( fields ).
refresh fields.
loop at s_table assigning <wa_table>.
split <wa_table> at cl_abap_char_utilities=>horizontal_tab into :
ls_data-recordid
ls_data-bstkd
ls_data-kunnr
ls_data-matnr
ls_data-candno
ls_data-fname
ls_data-inits
ls_data-lname
ls_data-gesch.
append ls_data to lt_data.
clear ls_data.
endloop.
wd_this->m_node_data->bind_table(
exporting
new_items = lt_data
set_initial_elements = abap_true ).
endmethod.
I hope it helps.
Thanx.
Maybe you are looking for
-
Since I downlaoded the latest update, I can no longer use Yahoo Messenger within firefox
I was prompted to download the latest security update today, which I did. Since rebooting, although my yahoo messenger contacts appear on the web page, I am unable to open a dialog box to send IM's
-
HPUX-IA64 version for BOE XI 3.1 Sp2
Hello: Can I get confirmation on whether HPUX-IA64 Specifically: B.11.31.0903 if it's supported for BOE XI 3.1 SP2 and SAP IK 3.1 SP2? I would like to use this version for our OS going forward and want to confirm. ============ HPUX11i-VSE-OE
-
IB Error: Unable to read symbols from "UIKit" (not yet mapped into memory)
I created a simple view program for iPhone, using IB to add a button and a label, once the button is clicked, the label text is changed. I am able to compile it fine, and ran it. The program/view showed up. But when I clicked on the button, the conso
-
Playlist sort order not carried to iTouch
After upgrade to IOS 5, playlist (podcasts) sort order in iTunes on MBP is not maintained when syncing w/ iTouch. No options on iTouch to sort. Thoughts or bug? Related...one podcast would not purge from iTouch via sync, so had to restore iTouch. D
-
I saved a live instrument on a garageband track. but when i wanted to listen to it again a window opend and said that the aif recording could not be found. is there anyway I can retrive the recording? I had saved it!