Application Development and Automation 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: 
Read only

Pass Structured table into dynamic table parameter in public method

Former Member
0 Kudos
341

Ladies and Gentlemen,

I have a requiremet to pass (1 at a time) any number of tables into a reuseable method in a custom class. The Method code is as follows:

 method CREATE_OUTBOUND_FILE.
*--------------------------------------------------------------------------------*
* Importing VALUE( IV_PATHNAME )  TYPE PATHEXTERN File Destination
* Importing VALUE( IT_FILE_RECORD ) TYPE REF TO DATA  Table with Output
* Importing VALUE( IV_RECORD_STRUCTURE )  TYPE STRING OPTIONAL  Record Structure
* Importing VALUE( IV_DELIMITER )	TYPE STRING	File Delimiter
* Exporting VALUE( EV_RECORD_CNT )  TYPE STRING Record Count
*--------------------------------------------------------------------------------*
  Data:
        ls_line_cnt(6) type n,
        lt_data_struc  type zty_ddic_struc_T,
        ls_string      type string.

  field-SYMBOLS: <fs_string> type any.

* Open Dataset for outputting file details
  Open dataset iv_pathname for output in text mode encoding default.

  Assign ls_string to <fs_string> CASTING TYPE (iv_record_structure).
  loop at it_file_record into <fs_string>.
    transfer <fs_string> to iv_pathname.
    Add 1 to ls_line_cnt.
    clear <fs_string>.
  endloop.

  ev_record_cnt = ls_line_cnt.

where IV_PATHNAME = output destination & filename

IT_FILE_REC = data table

IV_RECORD_STRUCTURE = is ddic structure definition for the data table

IV_DELIMITER = file delimiter, in this case, let's say it's C (for CSV)

and EV_RECORD_CNT is a count of numbe of records processed.

Lets say, for example, I wish to load data from table SFLIGHT into the method when program A is executed. Then another time I wish to excute Program B which is passing in data of table SFLCONN2. I hope that by using the "type ref to data" defintion, I can pass the table contents through. Is this true?

Secondly, I'm getting a syntax error saying that "IT_FILE_RECORD" is not defined as a table (and therefore can't be looped at), and therefore can't be read. How can I access the data in this table in preparation for output.

Any assistance or thoughts would be greatly appreciated.

Regards,

Steve

1 ACCEPTED SOLUTION
Read only

GrahamRobbo
SAP Mentor
SAP Mentor
0 Kudos
293

Hi Steve,

Yes you can do this.

I would change your interface to remove the IV_RECORD_STRUCTURE parameter and determine the structure of the table at runtime using Runtime Type Services (RTTS).

The reason that you are getting the syntax error is because IT_FILE_RECORD is defined as a reference to a data type, not a table itself.

You will probably need to assign the dereferenced parameter to a field symbol.

Something like..

FIELD-SYMBOLS: <table> TYPE ANY TABLE.

ASSIGN it_file_record->* to <table>.

LOOP AT <table> into <fs_string>.
...
ENDLOOP.

I haven't tried this so apologies if you need to tweak the syntax.

Cheers

Graham Robbo

3 REPLIES 3
Read only

GrahamRobbo
SAP Mentor
SAP Mentor
0 Kudos
294

Hi Steve,

Yes you can do this.

I would change your interface to remove the IV_RECORD_STRUCTURE parameter and determine the structure of the table at runtime using Runtime Type Services (RTTS).

The reason that you are getting the syntax error is because IT_FILE_RECORD is defined as a reference to a data type, not a table itself.

You will probably need to assign the dereferenced parameter to a field symbol.

Something like..

FIELD-SYMBOLS: <table> TYPE ANY TABLE.

ASSIGN it_file_record->* to <table>.

LOOP AT <table> into <fs_string>.
...
ENDLOOP.

I haven't tried this so apologies if you need to tweak the syntax.

Cheers

Graham Robbo

Read only

Clemenss
Active Contributor
0 Kudos
293

Hi Stephen ,

Graham already gve part of the solution.

If you declare

Importing VALUE( IT_FILE_RECORD ) TYPE REF TO DATA

it does not make sense to declare to pass by VALUE because you will not change this refernce in the method. Calling this method, you must pass a refefernce.

data:

lr_ref type ref to data.

get reference of <your itab here> into lr_ref.

CREATE_OUTBOUND_FILE( ...IT_FILE_RECORD = lr_ref ... )

In the method, it goes as graham explained.

Anyway, I would declare the table parameter as

Importing IT_FILE_RECORD TYPE TABLE

The your code could work, but you will have troube with any non-character fields in the tables.

Regards,

Clemens

Read only

Former Member
0 Kudos
293

Thank you all for your assistance. The secret was to build up the table using RTTC methods, then pass out to a parameter defined as 'any table'.