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

macro help!

Former Member
0 Likes
402

I have searched the sdn about the macro ,but i have found nothing valuable information. so i have to post a message for help again. the situation is :

DEFINE assign_comp.

fld = &2.

translate fld to upper case.

assign component fld of structure &1 to &3.

END-OF-DEFINITION.

FIELD-SYMBOLS:<zmst_rec> TYPE any,

<int_table> TYPE SORTED TABLE,

<tmp_table> TYPE SORTED TABLE.

FIELD-SYMBOLS:<fs>,<fs_1>.

SELECT * FROM ( ) INTO TABLE <tmp_table> .

LOOP AT <tmp_table> INTO <zmst_rec>.

assign_comp <zmst_rec>:dateto <fs_1>,datefrom <fs_2>.

ENDLOOP.

My doubt is the macro defined 3 parameters ,but the way which is assigned ....i can't understand. why use a colon,and does it mean pass dateto to datefrom ? and anybody can tell me the reason, thanks much.

2 REPLIES 2
Read only

Clemenss
Active Contributor
0 Likes
361

Hi junchuan,

my first recommendation is not to use macros. Yo can not debug them and they decrease heavily the readability of code. Macros replace the source code at compile-time.

The second ist: Please post code using the above <_> code markup to enhance readability.

And then the colon: This is SAP BASICS. Using a colon after a statement will repeat the statement for all elements in the comma-separeated list behind.

assign_comp <zmst_rec>:dateto <fs_1>,datefrom <fs_2>.

is equal to

assign_comp <zmst_rec> dateto <fs_1>.
assign_comp <zmst_rec> datefrom <fs_2>.

A necessary precondition is that datefrom and dateto are char variables containing the strings 'DATEFROM' and 'DATETO'. Otherwise this will not work.

The macro

DEFINE assign_comp.
fld = &2.
translate fld to upper case.
assign component fld of structure &1 to &3.
END-OF-DEFINITION.

going through the compile-time macro substitution will create

translate dateto to upper case."which makes no sense at all in your case
assign component dateto of structure  <zmst_rec> to  <fs_1>.
translate datefrom to upper case."which makes no sense at all in your case
assign component datefrom of structure  <zmst_rec> to  <fs_2>.

Just to have maximum transparency, I would probably write

ASSIGN COMPONENT:
  'DATETO'    OF STRUCTURE <zmst_rec> to <fs_1>,
  'DATEFROM'  OF STRUCTURE <zmst_rec> to <fs_2>.

Less is more.

Regards,

Clemens

Read only

Former Member
0 Likes
361

thanks Clemens .i understand now thanks a lot.