Wednesday, May 2, 2012

ZUTIL

ZUTIL Program
-------------------

*&---------------------------------------------------------------------*
*& Report ZUTIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------

REPORT ZUTIL line-SIZE 333." NO STANDARD PAGE HEADING.

DATA: gd_ucomm LIKE sy-ucomm.



* Declaration of sel screen buttons
SELECTION-SCREEN begin of BLOCK b1 WITH FRAME .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN PUSHBUTTON (20) w_but1 USER-COMMAND BUT1.
SELECTION-SCREEN END OF line.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (20) w_but2 USER-COMMAND BUT2.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (20) w_but3 USER-COMMAND BUT3.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (20) w_but4 USER-COMMAND BUT4.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (20) w_but5 USER-COMMAND BUT5.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (20) w_but6 USER-COMMAND BUT6.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN end of BLOCK b1.

************************************************************************
*INITIALIZATION.
INITIALIZATION.
* Add displayed text string to buttons
w_but1 = 'ENTER PROJECT'.
w_but2 = 'DISPLAY PROJECT'.
w_but3 = 'ENTER RESOURCE'.
W_BUT4 = 'DISPLAY RESOURCE'.
W_BUT5 = 'ENTER TASKS'.
w_but6 = 'DISPLAY TASKS'.





************************************************************************
*AT SELECTION-SCREEN.
AT SELECTION-SCREEN.

gd_ucomm = sy-ucomm.

* Check if buttons have been
if w_but1 eq 'BUT1'.
gd_ucomm = 'BUT1'.

elseif w_but2 eq 'BUT2'.
gd_ucomm = 'BUT2'.

elseif w_but3 eq 'BUT3'.
gd_ucomm = 'BUT3'.


elseif w_but4 eq 'BUT4'.
gd_ucomm = 'BUT4'.

elseif w_but5 eq 'BUT5'.
gd_ucomm = 'BUT5'.


elseif w_but6 eq 'BUT6'.
gd_ucomm = 'BUT6'.

endif.


************************************************************************
*AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN OUTPUT.
if gd_ucomm eq 'BUT1'.
message 'Enter the Project details' type 'I'.
SUBMIT zproj_util VIA SELECTION-SCREEN AND RETURN.

elseif gd_ucomm eq 'BUT2'.
if gd_ucomm eq 'BUT2'.
message 'Display the Project Details' type 'I'.
SUBMIT zproj_util1 VIA SELECTION-SCREEN AND RETURN.
endif.

elseif gd_ucomm eq 'BUT3'.
if gd_ucomm eq 'BUT3'.
message 'Enter the Resource Details' type 'I'.
SUBMIT zreso_util VIA SELECTION-SCREEN AND RETURN.
endif.

elseif gd_ucomm eq 'BUT4'.
if gd_ucomm eq 'BUT4'.
message 'Display the Resource Details' type 'I'.
SUBMIT zreso_util1 VIA SELECTION-SCREEN AND RETURN.
endif.
*
elseif gd_ucomm eq 'BUT5'.
if gd_ucomm eq 'BUT5'.
message 'Enter the Task Details' type 'I'.
SUBMIT ztask_util VIA SELECTION-SCREEN AND RETURN.
endif.
elseif gd_ucomm eq 'BUT6'.
if gd_ucomm eq 'BUT6'.
message 'Display the Task Details' type 'I'.
SUBMIT ztask_util1 VIA SELECTION-SCREEN AND RETURN.
endif.

endif.


ZPROJ_UTIL
-------------------

*&---------------------------------------------------------------------*
*& Report ZPROJ_UTIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZPROJ_UTIL.


types: begin of ty_project,
PROID type ZPROJ_UTIL-PROID,
TASID type ZPROJ_UTIL-TASID,
PRONA type ZPROJ_UTIL-PRONA,
TASNA type ZPROJ_UTIL-TASNA,
DURAT type ZPROJ_UTIL-DURAT,
SDATE type ZPROJ_UTIL-SDATE,
EDATE type ZPROJ_UTIL-EDATE,
EINMD type ZPROJ_UTIL-EINMD,
LEADN type ZPROJ_UTIL-LEADN,
ZRES_ID type ZPROJ_UTIL-ZRES_ID,
ZRESNAME type ZPROJ_UTIL-ZRES_NAME,
STATU type ZPROJ_UTIL-STATU,
ZLEADSOF type ZPROJ_UTIL-ZLEAD_SIGNOFF,
ZLEADCOM type ZPROJ_UTIL-ZLEAD_COMMENTS,
end of ty_project.
*
* data: wa_project type ty_project,
* it_project type table of ty_project.

data: wa_project type ZPROJ_UTIL,
it_project type table of ZPROJ_UTIL.
DATA: WA_TASK TYPE ZTASK_UTIL,
IT_TASK TYPE TABLE OF ZTASK_UTIL.

DATA: d_ucomm LIKE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS: PROID type ZPROJ_UTIL-PROID,
TASID type ZPROJ_UTIL-TASID,
PRONA type ZPROJ_UTIL-PRONA,
TASNA type ZPROJ_UTIL-TASNA,
DURAT type ZPROJ_UTIL-DURAT,
SDATE type ZPROJ_UTIL-SDATE,
EDATE type ZPROJ_UTIL-EDATE,
EINMD type ZPROJ_UTIL-EINMD,
LEADN type ZPROJ_UTIL-LEADN,
ZRES_ID type ZPROJ_UTIL-ZRES_ID,
ZRESNAME type ZPROJ_UTIL-ZRES_NAME,
STATU type ZPROJ_UTIL-STATU,
ZLEADSOF type ZPROJ_UTIL-ZLEAD_SIGNOFF,
ZLEADCOM type ZPROJ_UTIL-ZLEAD_COMMENTS.

SELECTION-SCREEN END OF BLOCK B1.


*SELECTION-SCREEN PUSHBUTTON /30(10) Execute USER-COMMAND EXEC.

INITIALIZATION.
* Execute = 'SUBMIT'.

"if execute = 'OK'.

AT SELECTION-SCREEN.
d_ucomm = sy-ucomm.

*AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
wa_project-PROID = PROID.
wa_project-TASID = TASID.
WA_TASK-TASID = TASID.
wa_project-PRONA = PRONA.
wa_project-TASNA = TASNA.
wa_project-DURAT = DURAT.
wa_project-SDATE = SDATE.
wa_project-EDATE = EDATE.
wa_project-EINMD = EINMD.
wa_project-LEADN = LEADN.
wa_project-ZRES_ID = ZRES_ID.
WA_TASK-RESID = ZRES_ID.
wa_project-ZRES_NAME = ZRESNAME.
wa_project-STATU = STATU.
wa_project-ZLEAD_SIGNOFF = ZLEADSOF.
wa_project-ZLEAD_COMMENTS = ZLEADCOM.

*INSERT INTO VALUES
*select RESID from ZRESO_UTIL
data it_zreso_util type table of ZRESO_UTIL.
SELECT * from ZRESO_UTIL into table it_ZRESO_UTIL where RESID = wa_project-ZRES_ID.
if sy-subrc = 0.
MODIFY ZPROJ_UTIL FROM WA_PROJECT.
MODIFY ZTASK_UTIL FROM WA_TASK.
MESSAGE 'Project table updated' TYPE 'I'.
Clear PROID. Clear TASID. Clear PRONA. Clear TASNA. Clear DURAT. Clear SDATE. Clear EDATE. Clear EINMD. Clear LEADN. Clear ZRES_ID.
Clear ZRESNAME. Clear STATU. Clear ZLEADSOF. Clear ZLEADCOM.

else.
MESSAGE 'Resource Not available in resourse Table ' TYPE 'I'.
clear PROID. Clear TASID. Clear PRONA. Clear TASNA. Clear DURAT. Clear SDATE. Clear EDATE. Clear EINMD. Clear LEADN. Clear ZRES_ID.
Clear ZRESNAME. Clear STATU. Clear ZLEADSOF. Clear ZLEADCOM.

endif.


Clear PROID.
Clear TASID.
Clear PRONA.
Clear TASNA.
Clear DURAT.
Clear SDATE.
Clear EDATE.
Clear EINMD.
Clear LEADN.
Clear ZRES_ID.
Clear ZRESNAME.
Clear STATU.
Clear ZLEADSOF.
Clear ZLEADCOM.

*insert ZPROJ_UTIL FROM WA_PROJECT.

* insert ZPROJ_UTIL from wa_project.



clear wa_project.


*&---------------------------------------------------------------------*
*& Report ZPROJ_UTIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZPROJ_UTIL1.
tables zproj_util.

types: begin of ty_final,
ZRES_ID type ZPROJ_UTIL-ZRES_ID,
ZRESNAME type ZPROJ_UTIL-ZRES_NAME,
PROID type ZPROJ_UTIL-PROID,
PRONA type ZPROJ_UTIL-PRONA,
TASID type ZPROJ_UTIL-TASID,
TASNA type ZPROJ_UTIL-TASNA,
DURAT type ZPROJ_UTIL-DURAT,
DURAT_hr type numc3,
POSIT type ZPOSIT,
REPTO type ZREPTO,
RESST type ZRESST,
* SDATE type ZPROJ_UTIL-SDATE,
* EDATE type ZPROJ_UTIL-EDATE,
* EINMD type ZPROJ_UTIL-EINMD,
* LEADN type ZPROJ_UTIL-LEADN,
* STATU type ZPROJ_UTIL-STATU,
* ZLEADSOF type ZPROJ_UTIL-ZLEAD_SIGNOFF,
* ZLEADCOM type ZPROJ_UTIL-ZLEAD_COMMENTS,
end of ty_final.
*
* data: wa_project type ty_project,
* it_project type table of ty_project.

data: wa_project type ZPROJ_UTIL,
it_project type table of ZPROJ_UTIL.
data: wa_final type ty_final,
it_final type table of ty_final.
DATA: WA_TASK TYPE ZTASK_UTIL,
IT_TASK TYPE TABLE OF ZTASK_UTIL.
data wa_res type ZRESO_UTIL.
data it_res type TABLE OF ZRESO_UTIL.

DATA: d_ucomm LIKE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : PROID for ZPROJ_UTIL-PROID,
TASID for ZPROJ_UTIL-TASID,
SDATE for ZPROJ_UTIL-SDATE,
EDATE for ZPROJ_UTIL-EDATE,
* LEADN type ZPROJ_UTIL-LEADN,
ZRES_ID for ZPROJ_UTIL-ZRES_ID,
STATU for ZPROJ_UTIL-STATU.

parameters : zRESST type ZRESO_UTIL-RESST.


SELECTION-SCREEN END OF BLOCK B1.


* SELECTION-SCREEN PUSHBUTTON /30(10) Execute USER-COMMAND EXEC.
*
*INITIALIZATION.
* Execute = 'SUBMIT'.

"if execute = 'OK'.

AT SELECTION-SCREEN.
d_ucomm = sy-ucomm.
START-OF-SELECTION.

select * from ZPROJ_UTIL into table it_project
where PROID in proid and
TASID in tasid and
ZRES_ID in zres_id. "and
* RESST = resst.

select * from ZRESO_UTIL into table it_res
where RESID in zres_id ."and
* RESST = zresst.

loop at it_project into wa_project.

READ TABLE it_res INTO wa_res WITH KEY resid = wa_project-zres_id." mandt = '800'.
if sy-subrc = 0.

wa_final-zres_id = wa_project-zres_id.
wa_final-zresname = wa_res-RESNA.
wa_final-PROID = wa_project-proid.
wa_final-PRONA = wa_project-prona.
wa_final-TASID = wa_project-tasid.
wa_final-tasna = wa_project-tasna.
wa_final-durat = wa_project-DURAT.
wa_final-durat_hr = wa_project-DURAT * 8 .
wa_final-POSIT = wa_res-POSIT.
wa_final-REPTO = wa_res-REPTO.
wa_final-RESST = wa_res-RESST.
APPEND wa_final to it_final.
endif.

ENDLOOP.


LOOP AT it_final into wa_final.
write: wa_final.
endloop.



*&---------------------------------------------------------------------*
*& Report ZRESO_UTIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZRESO_UTIL.

Data: wa_ZRESO_UTIL type ZRESO_UTIL,
it_ZRESO_UTIL type table of ZRESO_UTIL.


DATA: d_ucomm LIKE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS: RESID type ZRESO_UTIL-RESID OBLIGATORY,
RESNA type ZRESO_UTIL-RESNA OBLIGATORY,
POSIT type ZRESO_UTIL-POSIT OBLIGATORY,
REPTO type ZRESO_UTIL-REPTO OBLIGATORY,
RESST type ZRESO_UTIL-RESST.


SELECTION-SCREEN END OF BLOCK B1.

* SELECTION-SCREEN PUSHBUTTON /30(10) Execute USER-COMMAND EXEC.

INITIALIZATION.
* Execute = 'SUBMIT'.

"if execute = 'OK'.

AT SELECTION-SCREEN.
d_ucomm = sy-ucomm.

*AT SELECTION-SCREEN OUTPUT.


start-OF-SELECTION.
if resid <> ' '.

wa_ZRESO_UTIL-RESID = RESID.
wa_ZRESO_UTIL-RESNA = RESNA.
wa_ZRESO_UTIL-POSIT = POSIT.
wa_ZRESO_UTIL-REPTO = REPTO.
wa_ZRESO_UTIL-RESST = RESST.

select * from ZRESO_UTIL into table it_zreso_util where RESID = wa_zreso_util-resid.

if sy-subrc ne 0.
MODIFY ZRESO_UTIL FROM wa_ZRESO_UTIL.
MESSAGE 'Resource Table updated ' TYPE 'I'.
Clear RESID.
Clear RESNA.
Clear POSIT.
Clear REPTO.
Clear RESST.
else.
MESSAGE 'Resource is already available in resourse Table ' TYPE 'I'.
endif.

else.
MESSAGE 'Please enter the details' TYPE 'I'.
endif.

*INSERT INTO VALUES

*data it_zreso_util type table of ZRESO_UTIL.
* SELECT * from ZRESO_UTIL into table it_ZRESO_UTIL where RESID = wa_project-ZRES_ID.
* if sy-subrc = 0.

* select * from ZRESO_UTIL into table it_zreso_util where RESID = wa_zreso_util-resid.
* if sy-subrc ne 0.
* MODIFY ZRESO_UTIL FROM wa_ZRESO_UTIL.
* MESSAGE 'Resource Table updated ' TYPE 'I'.
* Clear RESID.
* Clear RESNA.
* Clear POSIT.
* Clear REPTO.
* Clear RESST.
* else.
* MESSAGE 'Resource is already available in resourse Table ' TYPE 'I'.
*
* endif.
*insert ZPROJ_UTIL FROM WA_PROJECT.

* insert ZPROJ_UTIL from wa_project.



clear wa_ZRESO_UTIL.


*&---------------------------------------------------------------------*
*& Report ZRESO_UTIL1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZRESO_UTIL1.

tables: ZRESO_UTIL.

types: BEGIN OF TY_ZRESO_UTIL,
RESID type ZRESO_UTIL-RESID,
RESNA type ZRESO_UTIL-RESNA,
POSIT type ZRESO_UTIL-POSIT,
REPTO type ZRESO_UTIL-REPTO,
RESST type ZRESO_UTIL-RESST,
END OF ty_ZRESO_UTIL.

data: wa_ZRESO_UTIL type ZRESO_UTIL,
it_ZRESO_UTIL type table of ZRESO_UTIL.

data: wa_final type ty_ZRESO_UTIL,
it_final type table of ty_ZRESO_UTIL.


DATA: d_ucomm LIKE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : RESID for ZRESO_UTIL-RESID,
RESNA for ZRESO_UTIL-RESNA,
POSIT for ZRESO_UTIL-POSIT,
REPTO for ZRESO_UTIL-REPTO,
RESST for ZRESO_UTIL-RESST.
SELECTION-SCREEN END OF BLOCK B1.


select * from zreso_util
into table it_ZRESO_UTIL
where resid in resid and
resna in resna.


write:5 'Resource Id ', 20 'Resource name', 61 'Position', 105 'Reported to', 143 'Status'.
uline.

loop at it_zreso_util into wa_zreso_util.

write:/5 wa_zreso_util-resid,20 wa_zreso_util-resna,61 wa_zreso_util-posit,105 wa_zreso_util-repto,143 wa_zreso_util-resst.

endloop.

* BREAK-POINT.


*&---------------------------------------------------------------------*
*& Report ZTASK_UTIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZTASK_UTIL.


TABLES : ZTASK_UTIL.

types: begin of ty_ZTASK_UTIL,
TASID type ZTASK_UTIL-TASID,
RESID type ZTASK_UTIL-RESID,
EFF_HOURS type ZTASK_UTIL-EFF_HOURS,
EFF_DAYS type ZTASK_UTIL-EFF_DAYS,
ASDATE type ZTASK_UTIL-ASDATE,
AEDATE type ZTASK_UTIL-AEDATE,
end of ty_ztask_util.

data: wa_ZTASK_UTIL type ZTASK_UTIL,
it_ZTASK_UTIL type TABLE OF ZTASK_UTIL.
data: it_zproj_util type TABLE OF zproj_util,
it_zreso_util type TABLE OF zreso_util.

DATA: d_ucomm LIKE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS:
TASID type ZTASK_UTIL-TASID,
RESID type ZTASK_UTIL-RESID,
EHOURS type ZTASK_UTIL-EFF_HOURS,
EDAYS type ZTASK_UTIL-EFF_DAYS,
ASDATE type ZTASK_UTIL-ASDATE,
AEDATE type ZTASK_UTIL-AEDATE.
SELECTION-SCREEN END OF BLOCK B1.


INITIALIZATION.

AT SELECTION-SCREEN.
d_ucomm = sy-ucomm.

START-OF-SELECTION.

if tasid <> ' '.

wa_ZTASK_UTIL-TASID = TASID.
wa_ZTASK_UTIL-RESID = RESID.
wa_ZTASK_UTIL-EFF_HOURS = EHOURS.
wa_ZTASK_UTIL-EFF_DAYS = EDAYS.
wa_ZTASK_UTIL-ASDATE = ASDATE.
wa_ZTASK_UTIL-AEDATE = AEDATE.

select * from Zreso_UTIL into table it_zreso_UTIL where RESID = wa_ztask_util-resid. " find out wethere resource is maintain in resource table.

if sy-subrc eq 0.

select * from zproj_util into table it_zproj_util where tasid = wa_ztask_util. " find out where task is maintain in resource table or not.

if sy-subrc eq 0.

modify ztask_util from wa_ztask_util.

MESSAGE 'Task table updated' type 'I'.
else.
MESSAGE 'Task id does not maintain in project table' type 'I'.
endif.
else.
message 'Resource id not maintain in Resource Table' type 'I'.
endif.

else.
message 'please enter the details' type 'I'.
endif.



clear wa_ztask_util.



*&---------------------------------------------------------------------*
*& Report ZTASK_UTIL1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZTASK_UTIL1.

tables: ztask_util.

data: wa_ztask_util type ztask_util,
it_ztask_util type TABLE OF ztask_util.

data: d_ucomm like sy-ucomm.


SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : TASID for ztask_util-TASID,
RESID for ztask_util-RESID,
EHOURS for ztask_util-eff_HOURS,
EDAYS for ztask_util-eff_days,
ASDATE for ztask_util-ASDATE,
AEDATE for ztask_util-AEDATE.

SELECTION-SCREEN END OF BLOCK B1.


select * from ztask_util
into table it_ztask_util
where tasid in tasid and
resid in resid.


write:5 'Task Id ', 20 'Resource ID', 35 'Effort in Hours', 50 'Effort in days', 70 'Actual Start Date', 90 'Actual End Date'.
uline.

loop at it_ztask_util into wa_ztask_util.

write:/5 wa_ztask_util-tasid,20 wa_ztask_util-resid,35 wa_ztask_util-eff_hours,50 wa_ztask_util-eff_days,70 wa_ztask_util-asdate,90 wa_ztask_util-aedate.

endloop.


Tables:
----------------



BDC upload infotype 0006 from excel and note pad

*&---------------------------------------------------------------------*
*& Report ZHR0006_UPLOAD_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZHR0006_UPLOAD.

tables: PA0006.
TYPE-POOLS: SLIS.
*---Global Data declarations
*include ZHR0006_UPLOAD2_top.

TYPES: BEGIN OF ty_pa0006,
PERNR TYPE PERNR_D,
SUBTY TYPE SUBTY,
OBJPS TYPE OBJPS,
SPRPS TYPE SPRPS,
ENDDA TYPE ENDDA,
BEGDA TYPE BEGDA,
SEQNR TYPE SEQNR,
AEDTM TYPE AEDTM,
UNAME TYPE AENAM,
HISTO TYPE HISTO,
ITXEX TYPE ITXEX,
REFEX TYPE REFEX,
ORDEX TYPE ORDEX,
ITBLD TYPE ITBLD,
PREAS TYPE PREAS,
FLAG1 TYPE NUSED,
FLAG2 TYPE NUSED,
FLAG3 TYPE NUSED,
FLAG4 TYPE NUSED,
RESE1 TYPE NUSED2,
RESE2 TYPE NUSED2,
GRPVL TYPE PCCE_GPVAL,
ANSSA TYPE ANSSA,
NAME2 TYPE PAD_CONAM,
STRAS TYPE PAD_STRAS,
ORT01 TYPE PAD_ORT01,
ORT02 TYPE PAD_ORT02,
PSTLZ TYPE PSTLZ_HR,
LAND1 TYPE LAND1,
TELNR TYPE TELNR,
ENTKM TYPE ENTKM,
WKWNG TYPE WKWNG,
BUSRT TYPE BUSRT,
LOCAT TYPE PAD_LOCAT,
ADR03 TYPE AD_STRSPP1,
ADR04 TYPE AD_STRSPP2,
STATE TYPE REGIO,
HSNMR TYPE PAD_HSNMR,
POSTA TYPE PAD_POSTA,
BLDNG TYPE AD_BLD_10,
FLOOR TYPE AD_FLOOR,
STRDS TYPE STRDS,
ENTK2 TYPE ENTKM,
COM01 TYPE COMKY,
NUM01 TYPE COMNR,
COM02 TYPE COMKY,
NUM02 TYPE COMNR,
COM03 TYPE COMKY,
NUM03 TYPE COMNR,
COM04 TYPE COMKY,
NUM04 TYPE COMNR,
COM05 TYPE COMKY,
NUM05 TYPE COMNR,
COM06 TYPE COMKY,
NUM06 TYPE COMNR,
INDRL TYPE P22J_INDRL,
COUNC TYPE COUNC,
RCTVC TYPE P22J_RCTVC,
OR2KK TYPE P22J_ORKK2,
CONKK TYPE P22J_PCNKK,
OR1KK TYPE P22J_ORKK1,
RAILW TYPE RAILW,
END OF ty_pa0006.


data : wa_pa0006 type ty_pa0006. "pa0006. "ty_pa0006.
data : wa_pa0006_t type p0006.
DATA : it_pa0006 type table of ty_pa0006. "pa0006. " ty_pa0006
*data : wl_pa0006 type ty_pa0006.
data : la_pa0006 type table of ty_pa0006.
data : number type num8.

*-----------ALV FIELD CATLOG----------------------------------
DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV.

DATA:IS_LAY TYPE SLIS_LAYOUT_ALV.
*--------------------------------------------------------------
*-------------------store unsucessful records------------------

DATA: lo_gui TYPE REF TO cl_gui_frontend_services,
lv_title TYPE string,
lv_folder TYPE string,
lv_dir TYPE string,
v_filetype TYPE string,
v_filename TYPE string,
lv_filename type string.

DATA : WE_PA0006 TYPE TY_PA0006.
data : er_pa0006 type table of ty_pa0006.

*--------------------SUCESSFULL AND UNSUCESSFUL RECORDS-------------

DATA : SU_RECORDS TYPE i,
UN_RECORDS TYPE i.

SU_RECORDS = 0.
UN_RECORDS = 0.

DATA : OUT_PUT TYPE CHAR7.

*-------------------------------------------------------------------

*-----------------IT_EVENTS-----------------------------------------
types: begin of TY_eventS,
name(30),
form(30),
end of TY_eventS.

DATA : WA_EVENTS TYPE TY_EVENTS,
IT_EVENTS TYPE TABLE OF TY_EVENTS.



*-----------------------------------------------------------

DATA: P_RETURN TYPE BAPIRETURN1.






DATA: d_ucomm LIKE sy-ucomm.
data : g_file type ibipparms-path.
data : g_file1 type ibipparms-path.
selection-screen begin of block b1 with frame title text-999.
PARAMETERS: p_TXT RADIOBUTTON GROUP rad1 USER-COMMAND ACT DEFAULT 'X',
p_XLS RADIOBUTTON GROUP rad1.
selection-SCREEN end of block b1.


selection-screen begin of block b2 with frame title text-998.
PARAMETERS: p_file type string MODIF ID A, "Text file
p_file1 type RLGRAP-FILENAME MODIF ID a,
p1_file type RLGRAP-FILENAME MODIF ID b, "Xls/Csv file
p_file2 type RLGRAP-FILENAME MODIF ID b.
selection-SCREEN end of block b2.


AT SELECTION-SCREEN.
d_ucomm = sy-ucomm.

AT SELECTION-SCREEN OUTPUT.
LOOP AT screen.
IF p_TXT = 'X'.
IF screen-group1 = 'B'.
screen-active = 0.
ENDIF.
ELSEIF p_XLS = 'X'.
IF screen-group1 = 'A'.
screen-active = 0.
ENDIF.
ENDIF.
MODIFY screen.
ENDLOOP.



at SELECTION-SCREEN on VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'p_file'
IMPORTING
FILE_NAME = g_file.
p_file = g_file.


at SELECTION-SCREEN on VALUE-REQUEST FOR p1_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'p1_file'
IMPORTING
FILE_NAME = g_file.
p1_file = g_file.

if p_txt = 'X'.
p_file = g_file.
endif.

if p_xls = 'X'.
p1_file = g_file.

endif.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
PERFORM f_browse CHANGING p_file1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2.
PERFORM f_browse CHANGING p_file2.

* at SELECTION-SCREEN on VALUE-REQUEST FOR p_file1.
* CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME = 'p_file'
* IMPORTING
* FILE_NAME = g_file1.
*p_file1 = g_file1.

START-OF-SELECTION.

*-----------------------CODE FOR TEXT UPLOAD--------------------------

if p_txt = 'X'.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = P_FILE
* FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = IT_pa0006
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
OTHERS = 17
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.

IF p_XLS = 'X'.

*------This logic is for executing Excel and csv file------------

data : l_intern type alsmex_tabline occurs 0 with header line.
data : l_index type i.
data : l_start_col type i value '1',
l_start_row type i value '1',
l_end_col type i value '256',
l_end_row type i value '65536'.

if p1_file is not initial.
field-symbols : .
call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p1_file
i_begin_col = l_start_col
i_begin_row = l_start_row
i_end_col = l_end_col
i_end_row = l_end_row
TABLES
intern = l_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
others = 3.

if l_intern[] is initial.
* message i010(z1).
exit.
else.
sort l_intern by row col.
loop at l_intern.
move l_intern-col to l_index.
assign component l_index of structure wa_pa0006 to .
if sy-subrc = 0. " Incase there are more xls columns than fields
move l_intern-value to .
endif.
at end of row.
append wa_pa0006 to it_pa0006.
clear wa_pa0006.
endat.
endloop.
endif.

endif.
endif.
LOOP AT IT_pa0006 INTO WA_pa0006.
MOVE-CORRESPONDING wa_pa0006 to wa_pa0006_t.
*----------------------------------------------------------

CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
EXPORTING
number = WA_pa0006-PERNR
IMPORTING
RETURN = P_RETURN
LOCKING_USER = SY-UNAME.

*------------------------------------------------------------

*------------------------------------------------------------
if WA_pa0006-SUBTY LT 4 and WA_pa0006-SUBTY <> 0.

CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0006'
number = WA_pa0006-PERNR
SUBTYPE = WA_pa0006-SUBTY
OBJECTID = WA_pa0006-OBJPS
LOCKINDICATOR = WA_pa0006-SPRPS
VALIDITYEND = WA_pa0006-ENDDA
VALIDITYBEGIN = WA_pa0006-BEGDA
RECORDNUMBER = WA_pa0006-SEQNR
record = WA_pa0006_t
* operation = insert
operation = 'INS'
* TCLAS = 'A'
DIALOG_MODE = '0'
* NOCOMMIT = 'X'
* VIEW_IDENTIFIER =
* SECONDARY_RECORD =
IMPORTING
RETURN = P_RETURN
* KEY =
.

IF SY-SUBRC eq 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
message s000(zms) with 'database updated'.

IF P_RETURN-TYPE EQ 'E'." and wa_pa0006_t-pernr eq 0 .
UN_RECORDS = UN_RECORDS + 1.
APPEND WA_PA0006 TO er_pa0006.
ENDIF.
IF P_RETURN-TYPE <> 'E'." and wa_pa0006_t-pernr <> 0.
SU_RECORDS = SU_RECORDS + 1.
APPEND WA_PA0006 TO la_pa0006.
ENDIF.


ENDIF.
else.
APPEND WA_PA0006 TO er_pa0006.
endif.

*----------------------------------------------------------

CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
EXPORTING
number = WA_pa0006-PERNR
* IMPORTING
* RETURN =
.
*------------------------------------------------------------
clear wa_pa0006.
endloop.

*ENDIF.

*------------END OF HR INFOTYPE OPERATIONS---------------------

*-------------DOWNLOADED ERROR FILE-----------------------------

IF ER_PA0006[] IS NOT INITIAL.

"This part of code to add column name in the downloaded file.

data : begin of int_head occurs 0,
Filed1(20) type c, " Header Data
end of int_head.

PERFORM INT_HEADS.


v_filetype = '.xls'. "I just manipulate the file name using XLS file type.

if p_txt = 'X'.
v_filename = p_file1.
CONCATENATE p_file1 v_filetype INTO lv_filename.
endif.

if p_xls = 'X'.
v_filename = p_file2.
CONCATENATE p_file2 v_filetype INTO lv_filename.
endif.

* v_filename = u_file.
* CONCATENATE u_file v_filetype INTO lv_filename.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
filetype = 'ASC'
write_field_separator = 'X'
TABLES
data_tab = ER_PA0006
FIELDNAMES = int_head
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.

IF sy-subrc <> 0.

ENDIF.

ENDIF.

*-------------END OF DOWNLOADED ERROR FILE-----------------------------


*--------------DISPLAY THE REPORT IN THE ALV FORMAT---------------------

IF LA_PA0006[] IS NOT INITIAL.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
* I_INTERNAL_TABNAME =
I_STRUCTURE_NAME = 'P0006'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_INCLNAME =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = IT_FCAT
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


PERFORM FILL_EVENTS.
DATA WA_PRINT TYPE SLIS_PRINT_ALV.
WA_PRINT-reserve_lines = 2.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = IS_LAY
IT_FIELDCAT = IT_FCAT
IT_EVENTS = IT_EVENTS
IS_PRINT = WA_PRINT
TABLES
t_outtab = LA_PA0006
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDIF.



*--------------END OF DISPLAY THE REPORT IN THE ALV FORMAT--------------

*&---------------------------------------------------------------------*
*& Form FILL_EVENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_EVENTS .

* TOP_OF_PAGE

CLEAR WA_EVENTS.
WA_EVENTS-NAME = 'TOP_OF_PAGE'.
WA_EVENTS-FORM = 'PRINT_DATA'.
APPEND WA_EVENTS TO IT_EVENTS.

ENDFORM. " FILL_EVENTS

*&---------------------------------------------------------------------*
*& Form PRINT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PRINT_DATA.

types: begin of TY_LIST,
typ(1) type c, " H = Header, S = Selection, A = Action
key(20) type c,
info(60) TYPE C,
end of TY_LIST.

DATA : WA_LIST TYPE TY_LIST,
IT_LIST TYPE TABLE OF TY_LIST.

data: t_header type slis_t_listheader,
wa_header type slis_listheader,
t_line like wa_header-info,
ld_lines type i,
ld_linesc(10) type c.

ld_lines = su_records.
*-----------------------------ALV TOP-OF-PAGE-------------------

* Title
wa_header-typ = 'H'.

wa_header-info = 'ALV REPORT'.
append wa_header to It_LIST.
clear wa_header.

*1ST LINE
CLEAR WA_LIST.
clear ld_lines.
* Total No. of Records Selected
describe table LA_PA0006 lines ld_lines.
ld_linesc = ld_lines.
concatenate 'Total No. of Sucessfull Records: ' ld_linesc
into t_line separated by space.

wa_header-typ = 'A'.
wa_header-info = t_line.
APPEND WA_HEADER TO IT_LIST.

*2ND LINE

CLEAR WA_LIST.
clear ld_lines.
clear ld_linesc.

describe table er_pa0006 lines ld_lines.
ld_linesc = ld_lines.
ld_lines = UN_RECORDS.
concatenate 'Total No. of UnSucessfull Records: ' ld_linesc
into t_line separated by space.

wa_header-typ = 'A'.
wa_header-info = t_line.
APPEND WA_HEADER TO IT_LIST.

* ---------------------------------------------------------------

call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
IT_LIST_COMMENTARY = IT_LIST
* I_LOGO = 'EXXOVA'
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.

ENDFORM. "PRINT_DATA

*&---------------------------------------------------------------------
*
*& Form f_browse
*&---------------------------------------------------------------------

form f_browse CHANGING fc_file.
DATA: lo_gui TYPE REF TO cl_gui_frontend_services,
lv_title TYPE string,
lv_folder TYPE string,
lv_dir TYPE string.

CREATE OBJECT lo_gui.
lv_title = 'Define download location'.
lv_folder = 'C:'.
CALL METHOD lo_gui->directory_browse
EXPORTING
window_title = lv_title
initial_folder = lv_folder
CHANGING
selected_folder = lv_dir.
fc_file = lv_dir.

endform. "f_browse


*&---------------------------------------------------------------------*
*& Form INT_HEADS
*&---------------------------------------------------------------------*

FORM INT_HEADS .
int_head-Filed1 = 'PERNR'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'SUBTY'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'OBJPS'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'SPRPS'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ENDDA'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'BEGDA'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'SEQNR'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'AEDTM'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'UNAME'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'HISTO'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ITXEX'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'REFEX'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ORDEX'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ITBLD'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'PREAS'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'FLAG1'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'FLAG2'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'FLAG3'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'FLAG4'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'RESE1'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'RESE2'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'GRPVL'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ANSSA'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NAME2'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'STRAS'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ORT01'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ORT02'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'PSTLZ'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'LAND1'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'TELNR'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ENTKM'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'WKWNG'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'BUSRT'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'LOCAT'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ADR03'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ADR04'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'STATE'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'HSNMR'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'POSTA'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'BLDNG'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'FLOOR'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'STRDS'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'ENTK2'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM01'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM01'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM02'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM02'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM03'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM03'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM04'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM04'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM05'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM05'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COM06'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'NUM06'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'INDRL'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'COUNC'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'RCTVC'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'OR2KK'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'CONKK'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'OR1KK'.
APPEND int_head.
CLEAR int_head.

int_head-Filed1 = 'RAILW'.
APPEND int_head.
CLEAR int_head.

ENDFORM. " INT_HEADS

Tuesday, April 24, 2012

WORKFLOW 1st day


Business Process Automation TOOL.
Workflow is a chain (flow chat) at transactions.
Using WF, we represent the business process in a graphical format.
Benefits of Workflow :
Every Transaction can be Monitored.
            Sending Reminders to start Transactions.
            Sending Reminders to Complete Transactions.
Every Transaction done on transaction can be Documented.
è Inputs
è Comments
è Attachments.
Next Transaction to be executed is automatically identified.
Person responsible for next transaction is automatically identified.
Required data for next transaction is also passed automatically.
Support Multiple Languages.
Workflow can be used for error handling in ALV/IDOCS.

Triggering Transactions :- Source Transactions
Create PO, So, Invoice, Travel forms, Payment Run.
Change PO, So, Invoice, Travel forms, Payment Run.
Delete PO, So, Invoice, Travel forms, Payment Run.
Triggering Techniques : BADI, User Exits, Infotype, Change Document, Business Transaction, CRM Actions, Z Programs, Other Workflow, Test Tool and Utility.
Triggering Events : Used to Start Workflow.
Terminating Events : Used to  Complete the Workflow.
Step: There is Two type of steps .
1.      Foreground Step
2.      Background Step.

Foreground Step : Foreground Step  are executed by the agent.
Background Step : System could execute this step.
Standard Task and Customer task (similar to Data element) :  It Contains What is
1.      Background object
2.      Method
3.      Background
4.      Email Subject
5.      Email Body text.
Customer task is Client Dependent (800,300, 500…..).
Standard task is Client Independent (800).

There are Two Types of Workflow
1.      Workflow Template – Client Independent.
2.      Workflow Task         _ Client Dependent.

Tutorials on SAP-ABAP

Adobe Interactive Forms Tutorials

Business Server Pages (BSP)

Userexits/BADIs

Web Dynpro for ABAP (Step by step procedure for web dynpro,Tutorials on Web Dynpro,)

ALV Tutorials

goodsites