Monday, June 9, 2008

Starting With ABAP Objects-I

Object Orientation:

It is a problem solving method where the software solution reflects objects in the real world.
Objects:

It is a section of source code which contains data and provides services.
-Data is the attribute
-Services are methods
The attributes can be changed only by the method of the class, hence thus proves the internal consistency.
Classes:

-It describes Objects
-Objects are runtime instances on classes
-we can have any number of objects for a class
-Each Object has unique identity and its own set of values
Object References:

-It helps to identify the address of the objects
-It allows to access attributes and methods of the objects.
Properties of Object Oriented Programming:

Encapsulation:

-Restricts the visibility of attributes and methods to other users.
-Every object has an interface which shows how the objects interact with each other.
-Implementation part is hided so that the process of interaction between the objects is
made invisible to others.
-It is often known as information hiding.
Polymorphism:
-Identical methods behave differently in different classes.
-With the help of an interface it enables to address methods with same name to
different objects.
-The signature or the definition of the method is always the same but the
implementation is different for different classes.
Inheritance:
-Deriving a new class from the existing class
-Can inherit the data and methods of the super class
-Can overwrite the existing methods and can also add new ones.

Simple class Example1:

CLASS LCL_SIMPLE DEFINITION.
PUBLIC SECTION.
DATA: ENAME (15) TYPE C,
EID (5) TYPE N. METHODS DISPLAY_DATA IMPORTING
IM_ENAME TYPE C
IM_NO TYPE N.
ENDCLASS.
CLASS LCL_SIMPLE IMPLEMENTATION.
METHOD DISPLAY_DATA.
ENAME = IM_ENAME.
EID = IM_NO.

WRITE: / ENAME,
EID.
ENDMETHOD. "display data
ENDCLASS. " lcl_simple IMPLEMENTATION

START-OF-SELECTION.

DATA EMP TYPE REF TO LCL_SIMPLE.
CREATE OBJECT EMP.

CALL METHOD EMP->DISPLAY_DATA
EXPORTING im_ename = 'priya'
im_no = '1060'.

Internal process of TYPE REF TO and CREATE OBJECT statements:

DATA EMP TYPE REF TO LCL_SIMPLE.

-When the statement is executed it creates a class reference variable EMP of type
LCL_SIMPLE.
-It can contain all instances of the class
-The class must be declared either globally or locally
-The contents of the variable EMP will be empty.
-It doesn’t point anything now.

EMP - ->

CREATE OBJECT EMP.

-Creates an instance of class.
-Now this reference variable EMP points the object.
-The instance on the class LCL_SIMPLE is LCL_SIMPLE<1> (Internal representation)


EMP - -> ------------> LCL_SIMPLE<1>

DATA: EMP TYPE REF TO LCL_SIMPLE,
EMP1 TYPE REF TO LCL_SIMPLE,
EMP2 TYPE REF TO LCL_SIMPLE,


EMP - ->
EMP1 - ->
EMP2 - ->

All these references will be initial.

CREATE OBJECT EMP, EMP1.

Move EMP to EMP2.

When this statement is executed both reference EMP, EMP2 points to the same object,
We can use either of these references.

EMP - -> ------------> LCL_SIMPLE<1> <------------ <--- EMP2

EMP1 - -> ------------> LCL_SIMPLE<2>


Friday, June 6, 2008

To Delete Table Using BDC


TABLES:
dd02l,
bdcdata.
DATA:
fs_tab TYPE dd02l,
t_tab LIKE
STANDARD TABLE OF fs_tab,
t_bdcdata LIKE
STANDARD TABLE
OF bdcdata.
DATA:
t_messages LIKE
STANDARD TABLE
OF bdcmsgcoll.
DATA:
message TYPE bdcmsgcoll,
msg(72) TYPE c.

SELECT-OPTIONS: s_tab FOR dd02l-tabname.
START-OF-SELECTION.
SELECT tabname
FROM dd02l
INTO TABLE t_tab
WHERE tabname IN s_tab .
IF sy-subrc EQ 0.
PERFORM bdc_dynpro USING 'SAPMSRD0' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RSRD1-TBMA'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CHANGE_RADIO'.
PERFORM bdc_field USING 'RSRD1-TBMA'
'X'.
PERFORM bdc_field USING 'RSRD1-TBMA_VAL'
'TADIR'.
PERFORM bdc_dynpro USING 'SAPMSRD0' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RSRD1-TBMA_VAL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=DELE'.
PERFORM bdc_field USING 'RSRD1-TBMA'
'X'.
PERFORM bdc_field USING 'RSRD1-TBMA_VAL'
'yit_exam1'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
PERFORM bdc_dynpro USING 'SAPMSRD0' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RSRD1-TBMA_VAL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BACK'.
PERFORM bdc_field USING 'RSRD1-TBMA'
'X'.
PERFORM bdc_field USING 'RSRD1-TBMA_VAL'
'YIT_EXAM1'.
CALL TRANSACTION 'SE11' USING t_bdcdata MODE 'N'
MESSAGES INTO t_messages.
LOOP AT t_messages INTO message.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = message-msgid
lang = 'EN'
no = message-msgnr
v1 = message-msgv1
v2 = message-msgv2
v3 = message-msgv3
v4 = message-msgv4
IMPORTING
msg = msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
WRITE / msg.
ENDIF.
ENDLOOP.
ELSE.
WRITE: 'Not Deleted'.
ENDIF.
*---------------------------------------------------------------------*
* Form bdc_dynpro
*---------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --> pv_prog BDC module pool
* --> pv_screen BDC Screen number
*---------------------------------------------------------------------*
FORM bdc_dynpro USING value(pv_prog)
value(pv_screen).
CLEAR bdcdata.
bdcdata-program = pv_prog.
bdcdata-dynpro = pv_screen.
bdcdata-dynbegin = 'X'.
APPEND bdcdata TO t_bdcdata.
ENDFORM. " bdc_dynpro
*---------------------------------------------------------------------*
* Form bdc_field
*---------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --> pv_fname Field name
* --> pv_fval BDC field value
*---------------------------------------------------------------------*
FORM bdc_field USING value(pv_fname)
value(pv_fval).
CLEAR bdcdata.
bdcdata-fnam = pv_fname.
bdcdata-fval = pv_fval.
APPEND bdcdata TO t_bdcdata.
ENDFORM. " bdc_field

ALV List - Auto Refresh list

Source : http://www.geocities.com/mpioud

TYPE-POOLS: slis. " ALV Global Types

DATA :
gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04

*---------------------------------------------------------------------*
START-OF-SELECTION.

PERFORM f_read_data.

PERFORM f_display_data.

*---------------------------------------------------------------------*
* Form F_LIRE_DATA
*---------------------------------------------------------------------*
FORM f_read_data.

REFRESH gt_user.

* Get User's info
CALL FUNCTION 'THUSRINFO'
TABLES
usr_tabl = gt_user.

* Wait in a task
PERFORM f_call_rfc_wait.

ENDFORM. " F_READ_DATA

*---------------------------------------------------------------------*
* Form F_DISPLAY_DATA
*---------------------------------------------------------------------*
FORM f_display_data.

DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
append ls_sort to lt_sort.
END-OF-DEFINITION.

DEFINE m_event_exit.
clear ls_event_exit.
ls_event_exit-ucomm = &1.
ls_event_exit-after = 'X'.
append ls_event_exit to lt_event_exit.
END-OF-DEFINITION.

DATA :
ls_layout TYPE slis_layout_alv,
lt_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv,
lt_event_exit TYPE slis_t_event_exit,
ls_event_exit TYPE slis_event_exit.
* Build Sort Table
m_sort 'ZEIT'.
* Build Event Exit Table
m_event_exit '&NTE'. " Refresh
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
is_layout = ls_layout
i_structure_name = 'UINFO'
it_sort = lt_sort
it_event_exit = lt_event_exit
TABLES
t_outtab = gt_user.
ENDFORM. " F_DISPLAY_DATA

*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING i_ucomm TYPE syucomm
is_selfield TYPE slis_selfield. "#EC CALLED

CASE i_ucomm.
WHEN '&NTE'.
PERFORM f_read_data.
is_selfield-refresh = 'X'.
SET USER-COMMAND '&OPT'. " Optimize columns width
ENDCASE.

ENDFORM. " USER_COMMAND
*---------------------------------------------------------------------*
* Form F_CALL_RFC_WAIT
*---------------------------------------------------------------------*
FORM f_call_rfc_wait.

DATA lv_mssg(80). "#EC NEEDED

* Wait in a task
CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001'
PERFORMING f_task_end ON END OF TASK
EXPORTING
seconds = 5 " Refresh time
busy_waiting = space
EXCEPTIONS
RESOURCE_FAILURE = 1
communication_failure = 2 MESSAGE lv_mssg
system_failure = 3 MESSAGE lv_mssg
OTHERS = 4.

ENDFORM. " F_CALL_RFC_WAIT
*---------------------------------------------------------------------*
* Form F_TASK_END
*---------------------------------------------------------------------*
FORM f_task_end USING u_taskname.

DATA lv_mssg(80). "#EC NEEDED

* Receiving task results
RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'
EXCEPTIONS
RESOURCE_FAILURE = 1
communication_failure = 2 MESSAGE lv_mssg
system_failure = 3 MESSAGE lv_mssg
OTHERS = 4.

CHECK sy-subrc EQ 0.
SET USER-COMMAND '&NTE'. " Refresh

ENDFORM. " F_TASK_END

E-mail an Abap report

Source: http://www.geocities.com/mpioud

DATA : w_name TYPE sos04-l_adr_name.

SELECT-OPTIONS :
* Recipient address
s_name FOR w_name DEFAULT sy-uname NO INTERVALS.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* E-mail Abap report
PERFORM f_send_mail.

*---------------------------------------------------------------------*
* Form f_send_mail
*---------------------------------------------------------------------*
FORM f_send_mail.

* Data Declaration
DATA:
l_datum(10),
ls_docdata TYPE sodocchgi1,
ls_objpack TYPE sopcklsti1,
lt_objpack TYPE TABLE OF sopcklsti1,
lt_objhead TYPE TABLE OF solisti1,
ls_objtxt TYPE solisti1,
lt_objtxt TYPE TABLE OF solisti1,
ls_objbin TYPE solisti1,
lt_objbin TYPE TABLE OF solisti1,
ls_reclist TYPE somlreci1,
lt_reclist TYPE TABLE OF somlreci1,
lt_listobject TYPE TABLE OF abaplist,

l_tab_lines TYPE i,
l_att_type TYPE soodk-objtp.

WRITE sy-datum TO l_datum.
IF sy-saprl >= '700'.
SUBMIT bcalv_fullscreen_demo_classic
EXPORTING LIST TO MEMORY AND RETURN.
ELSE.
* List of Users According to Logon Date and Password Change
* NOTE: Create ALI/OTF Document in Spool
SUBMIT rsusr200 WITH valid = 'X'
WITH notvalid = space
WITH unlocked = 'X'
WITH locked = space
EXPORTING LIST TO MEMORY AND RETURN.
ENDIF.

* Read list from memory into table
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = lt_listobject
EXCEPTIONS
not_found = 1
OTHERS = 2.

IF sy-subrc <> 0.
* Error in function module &1
MESSAGE ID '61' TYPE 'E' NUMBER '731'
WITH 'LIST_FROM_MEMORY'.
ENDIF.

* Because listobject is of size RAW(1000)
* and objbin is of size CHAR(255) we make this table copy
CALL FUNCTION 'TABLE_COMPRESS'
TABLES
in = lt_listobject
out = lt_objbin
EXCEPTIONS
compress_error = 1
OTHERS = 2.

IF sy-subrc <> 0.
* Error in function module &1
MESSAGE ID '61' TYPE 'E' NUMBER '731'
WITH 'TABLE_COMPRESS'.
ENDIF.

* NOTE: Creation of attachment is finished yet.
* For your report, the attachment should be placed into table
* objtxt for plain text or
* objbin for binary content.
* Now create the message and send the document.
* Create Message Body
* Title and Description
ls_docdata-obj_name = 'USERS_LIST'.
CONCATENATE 'List of Users' sy-sysid '-' l_datum "#EC *
INTO ls_docdata-obj_descr SEPARATED BY space.

* Main Text
ls_objtxt = 'List of Users According to Logon Date' &
' and Password Change'. "#EC *
APPEND ls_objtxt TO lt_objtxt.
* Write Packing List (Main)
DESCRIBE TABLE lt_objtxt LINES l_tab_lines.
READ TABLE lt_objtxt INDEX l_tab_lines INTO ls_objtxt.
ls_docdata-doc_size = ( l_tab_lines - 1 ) * 255 + STRLEN( ls_objtxt ).
CLEAR ls_objpack-transf_bin.
ls_objpack-head_start = 1.
ls_objpack-head_num = 0.
ls_objpack-body_start = 1.
ls_objpack-body_num = l_tab_lines.
ls_objpack-doc_type = 'RAW'.
APPEND ls_objpack TO lt_objpack.

* Create Message Attachment
* Write Packing List (Attachment)
l_att_type = 'ALI'.
DESCRIBE TABLE lt_objbin LINES l_tab_lines.
READ TABLE lt_objbin INDEX l_tab_lines INTO ls_objbin.
ls_objpack-doc_size = ( l_tab_lines - 1 ) * 255 + STRLEN( ls_objbin ).
ls_objpack-transf_bin = 'X'.
ls_objpack-head_start = 1.
ls_objpack-head_num = 0.
ls_objpack-body_start = 1.
ls_objpack-body_num = l_tab_lines.
ls_objpack-doc_type = l_att_type.
ls_objpack-obj_name = 'ATTACHMENT'.
ls_objpack-obj_descr = 'List_of_Users'. "#EC *
APPEND ls_objpack TO lt_objpack.

* Create receiver list
LOOP AT s_name.
ls_reclist-receiver = s_name-low.
ls_reclist-rec_type = 'B'.
APPEND ls_reclist TO lt_reclist.
ENDLOOP.

* Send Message
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = ls_docdata
put_in_outbox = 'X'
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_bin = lt_objbin
contents_txt = lt_objtxt
receivers = lt_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.

IF sy-subrc = 0.
* Document sent
MESSAGE ID 'SO' TYPE 'S' NUMBER '022'.
ELSE.
* Document <&> could not be sent
MESSAGE ID 'SO' TYPE 'S' NUMBER '023'
WITH ls_docdata-obj_name.
ENDIF.

ENDFORM. " F_SEND_MAIL

Thursday, June 5, 2008

Simple ALV Tree structure program

TYPE-POOLS : fibs,stree.
DATA : t_node TYPE snodetext.

DATA : it_node LIKE TABLE OF t_node,
wa_node LIKE t_node.

*Internal Table declarations
DATA: BEGIN OF fs_scarr,
carrid LIKE scarr-carrid,
END OF fs_scarr.

DATA:BEGIN OF fs_spfli,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
END OF fs_spfli.

DATA:BEGIN OF fs_sflight,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
END OF fs_sflight.

DATA:BEGIN OF fs_sbook,
carrid LIKE sbook-carrid,
connid LIKE sbook-connid,
fldate LIKE sbook-fldate,
bookid LIKE sbook-bookid,
END OF fs_sbook.

DATA:t_scarr LIKE TABLE OF fs_scarr,
t_spfli LIKE TABLE OF fs_spfli,
t_sflight LIKE TABLE OF fs_sflight,
t_sbook LIKE TABLE OF fs_sbook.
********************************************************
START-OF-SELECTION.
PERFORM get_data.
PERFORM build_tree.
PERFORM display_tree.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data .

SELECT carrid
FROM scarr
INTO TABLE t_scarr.

SELECT carrid
connid
FROM spfli
INTO TABLE t_spfli
FOR ALL ENTRIES IN t_scarr
WHERE carrid EQ t_scarr-carrid.

SELECT carrid
connid
fldate
FROM sflight
INTO TABLE t_sflight
FOR ALL ENTRIES IN t_spfli
WHERE carrid EQ t_spfli-carrid
AND connid EQ t_spfli-connid.

SELECT carrid
connid
fldate
bookid
FROM sbook
INTO TABLE t_sbook
FOR ALL ENTRIES IN t_sflight
WHERE carrid EQ t_sflight-carrid
AND connid EQ t_sflight-connid
AND fldate EQ t_sflight-fldate.

ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form build_tree
*----------------------------------------------------------------------*

FORM build_tree .
CLEAR: it_node,
wa_node.

SORT: t_scarr BY carrid,
t_spfli BY carrid connid,
t_sflight BY carrid connid fldate,
t_sbook BY carrid connid fldate bookid.

wa_node-type = 'T'.
wa_node-name = 'Flight Details'.
wa_node-tlevel = '01'.
wa_node-nlength = '15'.
wa_node-color = '4'.
wa_node-text = 'Flight'.
wa_node-tlength ='20'.
wa_node-tcolor = 3.
APPEND wa_node TO it_node.
CLEAR wa_node.

LOOP AT t_scarr INTO fs_scarr.

wa_node-type = 'P'.
wa_node-name = 'CARRID'.
wa_node-tlevel = '02'.
wa_node-nlength = '8'.
wa_node-color = '1'.
wa_node-text = fs_scarr-carrid.
wa_node-tlength ='20'.
wa_node-tcolor = 4.
APPEND wa_node TO it_node.
CLEAR wa_node.

LOOP AT t_spfli INTO fs_spfli WHERE carrid EQ fs_scarr-carrid.
wa_node-type = 'P'.
wa_node-name = 'CONNID'.
wa_node-tlevel = '03'.
wa_node-nlength = '8'.
wa_node-color = '1'.
wa_node-text = fs_spfli-connid.
wa_node-tlength ='20'.
wa_node-tcolor = 4.
APPEND wa_node TO it_node.
CLEAR wa_node.

LOOP AT t_sflight INTO fs_sflight WHERE carrid EQ fs_spfli-carrid
AND connid EQ fs_spfli-connid.

wa_node-type = 'P'.
wa_node-name = 'FLDATE'.
wa_node-tlevel = '04'.
wa_node-nlength = '8'.
wa_node-color = '3'.
wa_node-text = fs_sflight-fldate.
wa_node-tlength ='20'.
wa_node-tcolor = 4.
APPEND wa_node TO it_node.
CLEAR wa_node.

LOOP AT t_sbook INTO fs_sbook WHERE carrid EQ fs_sflight-carrid
AND connid EQ fs_sflight-connid
AND fldate EQ fs_sflight-fldate.
wa_node-type = 'P'.
wa_node-name = 'BOOkID'.
wa_node-tlevel = '05'.
wa_node-nlength = '8'.
wa_node-color = '1'.
wa_node-text = fs_sbook-bookid.
wa_node-tlength ='20'.
wa_node-tcolor = 4.
APPEND wa_node TO it_node.
CLEAR wa_node.

ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.

ENDFORM. " build_tree
*&---------------------------------------------------------------------*
*& Form display_tree
*----------------------------------------------------------------------*

FORM display_tree .

CALL FUNCTION 'RS_TREE_CONSTRUCT'
* EXPORTING
* INSERT_ID = '000000'
* RELATIONSHIP = ' '
* LOG = LOG
TABLES
nodetab = it_node
* EXCEPTIONS
* TREE_FAILURE = 1
* ID_NOT_FOUND = 2
* WRONG_RELATIONSHIP = 3
.

CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
EXPORTING
callback_program = sy-repid
check_duplicate_name = '1'
color_of_node = '4'
color_of_mark = '3'
color_of_link = '1'
color_of_match = '5'
node_length = 30
text_length = 75
use_control = stree_use_list
* IMPORTING
* F15 = F15
.

ENDFORM. " display_tree

Interactive ALV and colouring the cells

TYPE-POOLS:slis.

DATA:w_repid LIKE sy-repid.
DATA:fs_layout TYPE slis_layout_alv.

DATA: t_fieldcat TYPE slis_t_fieldcat_alv,
fs_fieldcat TYPE slis_fieldcat_alv,
t_fieldcat1 TYPE slis_t_fieldcat_alv,
fs_fieldcat1 TYPE slis_fieldcat_alv.
DATA:
t_eventcat TYPE slis_t_event,
w_eventcat LIKE LINE OF t_eventcat.

**********Structure and internal table for basic alv*
DATA:BEGIN OF fs_string,
color(3),
checkbox,
cell TYPE slis_t_specialcol_alv,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
countryfr LIKE spfli-countryfr,
countryto LIKE spfli-countryto,
END OF fs_string.

DATA:t_spfli LIKE TABLE OF fs_string.
***************************************************
DATA:BEGIN OF fs_string1,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
paymentsum LIKE sflight-paymentsum,
END OF fs_string1.

DATA:t_sflight LIKE TABLE OF fs_string1.

DATA:fs_cell LIKE LINE OF fs_string-cell.

PERFORM get_data.
PERFORM prepare_fieldcatalog.
PERFORM t_eventcat1.
PERFORM display_output.

*&---------------------------------------------------------------------*
*& Form prepare_fieldcatalog
*&---------------------------------------------------------------------*
* Fill the Fieldcatalog
*----------------------------------------------------------------------*
FORM prepare_fieldcatalog .

fs_fieldcat-col_pos = 1.
fs_fieldcat-fieldname = 'CARRID'.
fs_fieldcat-seltext_m = 'Airlinecarrier'.
fs_fieldcat-key = 'X'.
fs_fieldcat-hotspot = 'X'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.

fs_fieldcat-col_pos = 2.
fs_fieldcat-fieldname = 'CONNID'.
fs_fieldcat-seltext_m = 'Connectionid'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.

fs_fieldcat-col_pos = 3.
fs_fieldcat-fieldname = 'COUNTRYFR'.
fs_fieldcat-seltext_m = 'Countryfrom'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.

fs_fieldcat-col_pos = 4.
fs_fieldcat-fieldname = 'COUNTRYTO'.
fs_fieldcat-seltext_m = 'Countryto'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.

LOOP AT t_spfli INTO fs_string WHERE carrid EQ 'AA'.
fs_cell-fieldname = 'CONNID'.
fs_cell-color-col = 5.
fs_cell-nokeycol = 'X'.

APPEND fs_cell TO fs_string-cell.

MODIFY t_spfli FROM fs_string TRANSPORTING cell.
ENDLOOP.

fs_layout-info_fieldname = 'COLOR'.
fs_layout-box_fieldname = 'CHECKBOX'.
fs_layout-coltab_fieldname = 'CELL'.

ENDFORM. " prepare_fieldcatalog
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* get data from database to internal table
*----------------------------------------------------------------------*
FORM get_data .

SELECT carrid
connid
countryfr
countryto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE t_spfli.

w_repid = sy-repid.

ENDFORM. " get_data

*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*----------------------------------------------------------------------*
* Display ALV
*----------------------------------------------------------------------*
FORM display_output .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING

i_callback_program = w_repid
i_callback_user_command = 'PICK'
is_layout = fs_layout
it_fieldcat = t_fieldcat[]
TABLES
t_outtab = t_spfli
* EXCEPTIONS
* PROGRAM_ERROR = 1
.

ENDFORM. " DISPLAY_OUTPUT

*&---------------------------------------------------------------------*
*& Form pick
*----------------------------------------------------------------------*
* -->COMMAND text
* -->ENDFORM text
*----------------------------------------------------------------------*
FORM pick USING command LIKE sy-ucomm
selfield TYPE slis_selfield.

READ TABLE t_spfli INTO fs_string INDEX selfield-tabindex.
CLEAR t_fieldcat1[].

CASE command.

WHEN '&IC1'.
SELECT carrid
connid
fldate
paymentsum
FROM sflight
INTO TABLE t_sflight
WHERE carrid = fs_string-carrid
AND connid = fs_string-connid.

fs_fieldcat1-col_pos = 1.
fs_fieldcat1-fieldname = 'CARRID'.
fs_fieldcat1-seltext_m = 'Airlinecarrier'.
fs_fieldcat1-key = 'X'.
fs_fieldcat1-hotspot = 'X'.
APPEND fs_fieldcat1 TO t_fieldcat1.
CLEAR fs_fieldcat1.

fs_fieldcat1-col_pos = 2.
fs_fieldcat1-fieldname = 'CONNID'.
fs_fieldcat1-seltext_m = 'Connectionid'.
APPEND fs_fieldcat1 TO t_fieldcat1.
CLEAR fs_fieldcat1.

fs_fieldcat1-col_pos = 3.
fs_fieldcat1-fieldname = 'FLDATE'.
fs_fieldcat1-seltext_m = 'Countryfrom'.
APPEND fs_fieldcat1 TO t_fieldcat1.
CLEAR fs_fieldcat1.

fs_fieldcat1-col_pos = 4.
fs_fieldcat1-fieldname = 'PAYMENTSUM'.
fs_fieldcat1-seltext_m = 'Countryto'.
APPEND fs_fieldcat1 TO t_fieldcat1.
CLEAR fs_fieldcat1.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = w_repid
it_fieldcat = t_fieldcat1[]
it_events = t_eventcat
TABLES
t_outtab = t_sflight
* EXCEPTIONS
* PROGRAM_ERROR = 1
.

ENDCASE.

ENDFORM. "pick

*&---------------------------------------------------------------------*
*& Form T_EVENTCAT
*&---------------------------------------------------------------------*
* This subtoutine is which captures the event that is to be triggered
*----------------------------------------------------------------------*
FORM t_eventcat1.

w_eventcat-name = 'TOP_OF_PAGE'.
w_eventcat-form = 'TOP'.
APPEND w_eventcat TO t_eventcat.

ENDFORM. "T_EVENTCAT
*&---------------------------------------------------------------------*
*& Form TOP
*&---------------------------------------------------------------------*
* To display TOP OF PAGE
* it displays the carried id selected to display.
*----------------------------------------------------------------------*
FORM top.

READ TABLE t_sflight INTO fs_string1 INDEX 1.
WRITE:/'CARRIER ID'(001),
30 fs_string-carrid.
EndForm.

Firsr step in alv-simple program

**mandatory Fields required for alv

TYPE-POOLS:slis.

DATA:w_repid LIKE sy-repid.

DATA:fs_layout TYPE slis_layout_alv.

DATA: t_fieldcat TYPE slis_t_fieldcat_alv,
fs_fieldcat TYPE slis_fieldcat_alv.
*********************************************
DATA:BEGIN OF fs_string,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
countryfr LIKE spfli-countryfr,
countryto LIKE spfli-countryto,
END OF fs_string.
DATA:t_spfli LIKE TABLE OF fs_string.


PERFORM get_data.
PERFORM prepare_fieldcatalog.
PERFORM display_output.


*&---------------------------------------------------------------------*
*& Form prepare_fieldcatalog
*&---------------------------------------------------------------------*
* Fills data to the fieldcatalaog
*----------------------------------------------------------------------*
FORM prepare_fieldcatalog .


fs_fieldcat-col_pos = 1.
fs_fieldcat-fieldname = 'CARRID'.
fs_fieldcat-seltext_m = 'Airlinecarrier'.
fs_fieldcat-key = 'X'.
fs_fieldcat-hotspot = 'X'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.


fs_fieldcat-col_pos = 2.
fs_fieldcat-fieldname = 'CONNID'.
fs_fieldcat-seltext_m = 'Connectionid'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.


fs_fieldcat-col_pos = 3.
fs_fieldcat-fieldname = 'COUNTRYFR'.
fs_fieldcat-seltext_m = 'Countryfrom'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.


fs_fieldcat-col_pos = 4.
fs_fieldcat-fieldname = 'COUNTRYTO'.
fs_fieldcat-seltext_m = 'Countryto'.
APPEND fs_fieldcat TO t_fieldcat.
CLEAR fs_fieldcat.


ENDFORM. " prepare_fieldcatalog


*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Fetch data from database table to internal table
*----------------------------------------------------------------------*
FORM get_data .


SELECT carrid
connid
countryfr
countryto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE t_spfli.
w_repid = sy-repid.

ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*----------------------------------------------------------------------*
* Function module to display ALV
*----------------------------------------------------------------------*
FORM display_output .


CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = w_repid
it_fieldcat = t_fieldcat[]
TABLES
t_outtab = t_spfli
* EXCEPTIONS
* PROGRAM_ERROR = 1
.
Endform.