quarta-feira, 28 de abril de 2010

How to create an F4 for a file

Data: l_file LIKE rlgrap-filename.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'L_FILE'
IMPORTING
file_name = l_file.

another similar way:

DATA: return_code TYPE i,
files LIKE file_table OCCURS 0.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
WINDOW_TITLE = 'Title'
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* WITH_ENCODING =
* INITIAL_DIRECTORY =
* MULTISELECTION =
CHANGING
file_table = files
rc = return_code
* USER_ACTION =
* FILE_ENCODING =
* EXCEPTIONS
* FILE_OPEN_DIALOG_FAILED = 1
* CNTL_ERROR = 2
* ERROR_NO_GUI = 3
* NOT_SUPPORTED_BY_GUI = 4
* others = 5
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

segunda-feira, 26 de abril de 2010

How to dynamicaly select and print a table (example)

PROGRAM test.

PARAMETER:
table TYPE c LENGTH 30 DEFAULT 'SPFLI',
where TYPE c LENGTH 70 DEFAULT 'carrid = ''AA'''.

DATA:
data_ref TYPE REF TO data.

FIELD-SYMBOLS:
‹tab› TYPE ANY TABLE.


*&--------------------------------------------------------------------*
*& Form write_table
*&--------------------------------------------------------------------*
FORM write_table USING p_table TYPE ANY TABLE.

FIELD-SYMBOLS: ‹line› TYPE data,
‹field› TYPE data.

WRITE:/ '{'.
LOOP AT p_table ASSIGNING ‹line›.
WRITE /4 '('.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE ‹line› TO ‹field›.
IF sy-subrc ‹› 0.
EXIT.
ENDIF.
WRITE /8 ‹field›.
ENDDO. "loop a componente
WRITE /4 ')'.
ENDLOOP. "loop a tabela
WRITE / '}'.
ENDFORM. "write_table

START-OF-SELECTION.
CREATE DATA data_ref TYPE TABLE OF (table).
ASSIGN data_ref->* TO ‹tab›.
SELECT * FROM (table) INTO TABLE ‹tab› WHERE (where).
PERFORM write_table USING ‹tab›.

How to declare a variable dynamicaly

DATA r_elemdescr TYPE REF TO cl_abap_elemdescr.

r_elemdescr ?= cl_abap_elemdescr=>describe_by_name( 'DATA_ELEMENT_HERE' ).

DATA r_field TYPE REF TO data.
FIELD-SYMBOLS ‹field› TYPE ANY.

CREATE DATA r_field TYPE HANDLE r_elemdescr.
ASSIGN r_field->* TO ‹field›.
‹field› = .....

"now ‹field› is your dynamic field value

How to force ALV to process PAI

To force an ALV to go to PAI we can call the method CL_GUI_CFW=>SET_NEW_OK_CODE

segunda-feira, 12 de abril de 2010

Program to see all the user exits of a Transaction

*&---------------------------------------------------------------------*
*& Report ZUSEREXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


REPORT zuserexit NO STANDARD PAGE HEADING.
TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
TABLES : tstct.
DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.

SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
IF sy-subrc EQ 0.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name = tstc-pgmna.
MOVE : tadir-devclass TO v_devclass.
IF sy-subrc NE 0.
SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
IF trdir-subc EQ 'F'.
SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
SELECT SINGLE * FROM enlfdir WHERE funcname =
tfdir-funcname.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'FUGR'
AND obj_name EQ enlfdir-area.

MOVE : tadir-devclass TO v_devclass.
ENDIF.
ENDIF.
SELECT * FROM tadir INTO TABLE jtab
WHERE pgmid = 'R3TR'
AND object = 'SMOD'
AND devclass = v_devclass.
SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND
tcode EQ p_tcode.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
SKIP.
IF NOT jtab[] IS INITIAL.
WRITE:/(95) sy-uline.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
WRITE:/(95) sy-uline.
LOOP AT jtab.
SELECT SINGLE * FROM modsapt
WHERE sprsl = sy-langu AND
name = jtab-obj_name.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 sy-vline,
2 jtab-obj_name HOTSPOT ON,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
ENDLOOP.
WRITE:/(95) sy-uline.
DESCRIBE TABLE jtab.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No of Exits:' , sy-tfill.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'No User Exit exists'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.

AT LINE-SELECTION.
GET CURSOR FIELD field1.
CHECK field1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

sexta-feira, 9 de abril de 2010

How to write any table (example2)

REPORT zsl_ex_7.

SELECTION-SCREEN: BEGIN OF BLOCK myblock WITH FRAME TITLE text-001.

PARAMETERS: table TYPE c LENGTH 30 DEFAULT 'SPFLI',
where TYPE c LENGTH 70 DEFAULT 'carrid = ''AA'''.

SELECTION-SCREEN:END OF BLOCK myblock.

DATA: data_ref TYPE REF TO data.

FIELD-SYMBOLS: ‹tab› TYPE ANY TABLE.

*&--------------------------------------------------------------------*
START-OF-SELECTION.
*&--------------------------------------------------------------------*
CREATE DATA data_ref TYPE TABLE OF (table).
ASSIGN data_ref->* TO ‹tab›.
SELECT * FROM (table) INTO TABLE ‹tab› WHERE (where).

PERFORM write_table USING ‹tab›.

How to write any table (example)

*&---------------------------------------------------------------------*
*& Report ZSL_EX_6
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsl_ex_6.

*&--------------------------------------------------------------------*
*& Form write_table
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_TABLE text
*---------------------------------------------------------------------*
FORM write_table USING p_table TYPE ANY TABLE.

FIELD-SYMBOLS: ‹line› TYPE data,
‹field› TYPE data.

WRITE:/ '{'.
LOOP AT p_table ASSIGNING ‹line›.
WRITE /4 '('.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE ‹line› TO ‹field›.
IF sy-subrc ‹› 0.
EXIT.
ENDIF.
WRITE /8 ‹field›.
ENDDO. "loop a componente
WRITE /4 ')'.
ENDLOOP. "loop a tabela
WRITE / '}'.
ENDFORM. "write_table


TYPES: BEGIN OF my_line_type,
name TYPE string,
birth_date TYPE d,
salary TYPE p DECIMALS 2,
END OF my_line_type,

my_table_type TYPE HASHED TABLE OF my_line_type
WITH UNIQUE KEY name birth_date.

DATA: my_wa TYPE my_line_type,
my_table TYPE my_table_type.

*&--------------------------------------------------------------------*
START-OF-SELECTION.
*&--------------------------------------------------------------------*
my_wa-name = 'Peter Smith'.
my_wa-birth_date = '19640303'.
my_wa-salary = '20000.00'.
INSERT my_wa INTO TABLE my_table.

my_wa-name = 'April May June'.
my_wa-birth_date = '19660401'.
my_wa-salary = '1000000.00'.
INSERT my_wa INTO TABLE my_table.

my_wa-name = 'Maria albertina'.
my_wa-birth_date = '19640601'.
my_wa-salary = '1.00'.
INSERT my_wa INTO TABLE my_table.

PERFORM write_table USING my_table.