Designed using the BPS exit planning function, functionality. the planning function is called as a button in the web interface. Here is the sample code.
its broken into two, a main program which trigger the process chain and an exit function module which calls the program in process chain.
*&---------------------------------------------------------------------*
*& Report Z_BPS_SELECTIVECOPY
*&
*&---------------------------------------------------------------------*
*&this program triggers the pc Z_BPS_SELECTCOPY_PROJ
*&and collects the messages which could be monitored.
*&---------------------------------------------------------------------*
REPORT Z_BPS_SELECTIVECOPY.
data L_LID type RSPC_LOGID.
data L_STATUS type RSPC_STATE.
data L_T_LOG type table of RSPC_S_MSG.
data L_S_LOG like line of L_T_LOG.
data: G_S_LOG type BAL_S_LOG.
data: L_S_MSG type BAL_S_MSG.
data: LS_RETURN type RSPC_S_MSG.
data: LT_RETURN type RSPC_S_MSG occurs 0.
data: L_LOG_HANDLE type BALLOGHNDL.
data: LT_LOG_HANDLE type BAL_T_LOGH.
call function 'RSPC_API_CHAIN_START'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
importing
E_LOGID = L_LID
* EXCEPTIONS
* FAILED = 1
* OTHERS = 2
.
if SY-SUBRC <> 0.
MESSAGE ID 'ZBW_NIBS2' TYPE 'E' NUMBER 008.
endif.
if SY-SUBRC = 0.
L_STATUS = 'A'.
while L_STATUS = 'A'.
call function 'RSPC_API_CHAIN_GET_STATUS'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
I_LOGID = L_LID
importing
E_STATUS = L_STATUS.
if L_STATUS = 'A'.
wait up to 60 seconds.
endif.
endwhile.
call function 'RSPC_API_CHAIN_GET_LOG'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
I_LOGID = L_LID
tables
E_T_LOG = lt_return.
if L_STATUS eq 'R' or L_STATUS eq 'X'.
LS_RETURN-MSGTY = 'E'.
LS_RETURN-MSGID = 'ZBW_NIBS2'.
LS_RETURN-MSGNO = '006'.
append LS_RETURN to LT_RETURN.
elseif L_STATUS eq 'G'.
LS_RETURN-MSGTY = 'I'.
LS_RETURN-MSGID = 'ZBW_NIBS2'.
LS_RETURN-MSGNO = '007'.
append LS_RETURN to LT_RETURN.
endif.
G_S_LOG-EXTNUMBER = 'PROCESS CHAIN'.
G_S_LOG-ALUSER = SY-UNAME.
G_S_LOG-ALPROG = SY-REPID.
G_S_LOG-OBJECT = 'SEM-BPS'.
G_S_LOG-SUBOBJECT = 'FUNC'.
* create a log
call function 'BAL_LOG_CREATE'
exporting
I_S_LOG = G_S_LOG
importing
E_LOG_HANDLE = L_LOG_HANDLE
exceptions
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
loop at LT_RETURN into LS_RETURN.
* define data of message for Application Log
clear: L_S_MSG.
L_S_MSG-MSGTY = LS_RETURN-MSGTY.
L_S_MSG-MSGID = LS_RETURN-MSGID.
L_S_MSG-MSGNO = LS_RETURN-MSGNO.
L_S_MSG-MSGV1 = LS_RETURN-MSGV1.
L_S_MSG-MSGV2 = LS_RETURN-MSGV2.
L_S_MSG-MSGV3 = LS_RETURN-MSGV3.
L_S_MSG-MSGV4 = LS_RETURN-MSGV4.
call function 'BAL_LOG_MSG_ADD'
exporting
I_LOG_HANDLE = L_LOG_HANDLE
I_S_MSG = L_S_MSG
exceptions
LOG_NOT_FOUND = 0
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endloop.
if not LT_RETURN is initial.
append L_LOG_HANDLE to LT_LOG_HANDLE.
call function 'BAL_DB_SAVE'
exporting
I_T_LOG_HANDLE = LT_LOG_HANDLE.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
clear LT_LOG_HANDLE.
endif.
call function 'BAL_DSP_LOG_DISPLAY'
exceptions
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type 'S' number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endif.
-------------------------------------------------------------------------------
FUNCTION zbps_selectivecopy.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_AREA) TYPE UPC_Y_AREA
*" REFERENCE(I_PLEVEL) TYPE UPC_Y_PLEVEL
*" REFERENCE(I_METHOD) TYPE UPC_Y_METHOD
*" REFERENCE(I_PARAM) TYPE UPC_Y_PARAM
*" REFERENCE(I_PACKAGE) TYPE UPC_Y_PACKAGE
*" REFERENCE(IT_EXITP) TYPE UPF_YT_EXITP
*" REFERENCE(ITO_CHASEL) TYPE UPC_YTO_CHASEL
*" REFERENCE(ITO_CHA) TYPE UPC_YTO_CHA
*" REFERENCE(ITO_KYF) TYPE UPC_YTO_KYF
*" EXPORTING
*" REFERENCE(ETO_CHAS) TYPE ANY TABLE
*" REFERENCE(ET_MESG) TYPE UPC_YT_MESG
*"----------------------------------------------------------------------
DATA: ls_exitp LIKE LINE OF it_exitp,
ls_mesg LIKE LINE OF et_mesg,
l_jobname LIKE tbtcjob-jobname,
l_jobcount LIKE tbtcjob-jobcount,
l_bundle LIKE upf_bsteps-bundle.
MOVE 'PC_Z_BPS_SELECTIVECOPY' TO l_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = l_jobname
IMPORTING
jobcount = l_jobcount
EXCEPTIONS
cant_create_job = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = sy-msgid.
ls_mesg-msgty = sy-msgty.
ls_mesg-msgno = sy-msgno.
ls_mesg-msgv1 = sy-msgv1.
ls_mesg-msgv2 = sy-msgv2.
ls_mesg-msgv3 = sy-msgv3.
ls_mesg-msgv4 = sy-msgv4.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
* l_bundle = ls_exitp-chavl.
SUBMIT z_bps_selectivecopy
USER sy-uname VIA JOB l_jobname NUMBER l_jobcount
AND RETURN.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = 'UPC'.
ls_mesg-msgty = 'E'.
ls_mesg-msgno = '306'.
ls_mesg-msgv1 = 'Z_BPS_SELECTIVECOPY'.
ls_mesg-msgv2 = l_jobname.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = l_jobcount
jobname = l_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = sy-msgid.
ls_mesg-msgty = sy-msgty.
ls_mesg-msgno = sy-msgno.
ls_mesg-msgv1 = sy-msgv1.
ls_mesg-msgv2 = sy-msgv2.
ls_mesg-msgv3 = sy-msgv3.
ls_mesg-msgv4 = sy-msgv4.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
CLEAR ls_mesg.
ls_mesg-msgid = 'UPC'.
ls_mesg-msgty = 'S'.
ls_mesg-msgno = '305'.
ls_mesg-msgv1 = l_jobname.
APPEND ls_mesg TO et_mesg.
ENDFUNCTION.
*& Report Z_BPS_SELECTIVECOPY
*&
*&---------------------------------------------------------------------*
*&this program triggers the pc Z_BPS_SELECTCOPY_PROJ
*&and collects the messages which could be monitored.
*&---------------------------------------------------------------------*
REPORT Z_BPS_SELECTIVECOPY.
data L_LID type RSPC_LOGID.
data L_STATUS type RSPC_STATE.
data L_T_LOG type table of RSPC_S_MSG.
data L_S_LOG like line of L_T_LOG.
data: G_S_LOG type BAL_S_LOG.
data: L_S_MSG type BAL_S_MSG.
data: LS_RETURN type RSPC_S_MSG.
data: LT_RETURN type RSPC_S_MSG occurs 0.
data: L_LOG_HANDLE type BALLOGHNDL.
data: LT_LOG_HANDLE type BAL_T_LOGH.
call function 'RSPC_API_CHAIN_START'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
importing
E_LOGID = L_LID
* EXCEPTIONS
* FAILED = 1
* OTHERS = 2
.
if SY-SUBRC <> 0.
MESSAGE ID 'ZBW_NIBS2' TYPE 'E' NUMBER 008.
endif.
if SY-SUBRC = 0.
L_STATUS = 'A'.
while L_STATUS = 'A'.
call function 'RSPC_API_CHAIN_GET_STATUS'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
I_LOGID = L_LID
importing
E_STATUS = L_STATUS.
if L_STATUS = 'A'.
wait up to 60 seconds.
endif.
endwhile.
call function 'RSPC_API_CHAIN_GET_LOG'
exporting
I_CHAIN = 'Z_BPS_SELECTCOPY_PROJ'
I_LOGID = L_LID
tables
E_T_LOG = lt_return.
if L_STATUS eq 'R' or L_STATUS eq 'X'.
LS_RETURN-MSGTY = 'E'.
LS_RETURN-MSGID = 'ZBW_NIBS2'.
LS_RETURN-MSGNO = '006'.
append LS_RETURN to LT_RETURN.
elseif L_STATUS eq 'G'.
LS_RETURN-MSGTY = 'I'.
LS_RETURN-MSGID = 'ZBW_NIBS2'.
LS_RETURN-MSGNO = '007'.
append LS_RETURN to LT_RETURN.
endif.
G_S_LOG-EXTNUMBER = 'PROCESS CHAIN'.
G_S_LOG-ALUSER = SY-UNAME.
G_S_LOG-ALPROG = SY-REPID.
G_S_LOG-OBJECT = 'SEM-BPS'.
G_S_LOG-SUBOBJECT = 'FUNC'.
* create a log
call function 'BAL_LOG_CREATE'
exporting
I_S_LOG = G_S_LOG
importing
E_LOG_HANDLE = L_LOG_HANDLE
exceptions
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
loop at LT_RETURN into LS_RETURN.
* define data of message for Application Log
clear: L_S_MSG.
L_S_MSG-MSGTY = LS_RETURN-MSGTY.
L_S_MSG-MSGID = LS_RETURN-MSGID.
L_S_MSG-MSGNO = LS_RETURN-MSGNO.
L_S_MSG-MSGV1 = LS_RETURN-MSGV1.
L_S_MSG-MSGV2 = LS_RETURN-MSGV2.
L_S_MSG-MSGV3 = LS_RETURN-MSGV3.
L_S_MSG-MSGV4 = LS_RETURN-MSGV4.
call function 'BAL_LOG_MSG_ADD'
exporting
I_LOG_HANDLE = L_LOG_HANDLE
I_S_MSG = L_S_MSG
exceptions
LOG_NOT_FOUND = 0
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endloop.
if not LT_RETURN is initial.
append L_LOG_HANDLE to LT_LOG_HANDLE.
call function 'BAL_DB_SAVE'
exporting
I_T_LOG_HANDLE = LT_LOG_HANDLE.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
clear LT_LOG_HANDLE.
endif.
call function 'BAL_DSP_LOG_DISPLAY'
exceptions
others = 1.
if SY-SUBRC <> 0.
message id SY-MSGID type 'S' number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endif.
-------------------------------------------------------------------------------
FUNCTION zbps_selectivecopy.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_AREA) TYPE UPC_Y_AREA
*" REFERENCE(I_PLEVEL) TYPE UPC_Y_PLEVEL
*" REFERENCE(I_METHOD) TYPE UPC_Y_METHOD
*" REFERENCE(I_PARAM) TYPE UPC_Y_PARAM
*" REFERENCE(I_PACKAGE) TYPE UPC_Y_PACKAGE
*" REFERENCE(IT_EXITP) TYPE UPF_YT_EXITP
*" REFERENCE(ITO_CHASEL) TYPE UPC_YTO_CHASEL
*" REFERENCE(ITO_CHA) TYPE UPC_YTO_CHA
*" REFERENCE(ITO_KYF) TYPE UPC_YTO_KYF
*" EXPORTING
*" REFERENCE(ETO_CHAS) TYPE ANY TABLE
*" REFERENCE(ET_MESG) TYPE UPC_YT_MESG
*"----------------------------------------------------------------------
DATA: ls_exitp LIKE LINE OF it_exitp,
ls_mesg LIKE LINE OF et_mesg,
l_jobname LIKE tbtcjob-jobname,
l_jobcount LIKE tbtcjob-jobcount,
l_bundle LIKE upf_bsteps-bundle.
MOVE 'PC_Z_BPS_SELECTIVECOPY' TO l_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = l_jobname
IMPORTING
jobcount = l_jobcount
EXCEPTIONS
cant_create_job = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = sy-msgid.
ls_mesg-msgty = sy-msgty.
ls_mesg-msgno = sy-msgno.
ls_mesg-msgv1 = sy-msgv1.
ls_mesg-msgv2 = sy-msgv2.
ls_mesg-msgv3 = sy-msgv3.
ls_mesg-msgv4 = sy-msgv4.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
* l_bundle = ls_exitp-chavl.
SUBMIT z_bps_selectivecopy
USER sy-uname VIA JOB l_jobname NUMBER l_jobcount
AND RETURN.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = 'UPC'.
ls_mesg-msgty = 'E'.
ls_mesg-msgno = '306'.
ls_mesg-msgv1 = 'Z_BPS_SELECTIVECOPY'.
ls_mesg-msgv2 = l_jobname.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = l_jobcount
jobname = l_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF sy-subrc <> 0.
CLEAR ls_mesg.
ls_mesg-msgid = sy-msgid.
ls_mesg-msgty = sy-msgty.
ls_mesg-msgno = sy-msgno.
ls_mesg-msgv1 = sy-msgv1.
ls_mesg-msgv2 = sy-msgv2.
ls_mesg-msgv3 = sy-msgv3.
ls_mesg-msgv4 = sy-msgv4.
APPEND ls_mesg TO et_mesg.
EXIT.
ENDIF.
CLEAR ls_mesg.
ls_mesg-msgid = 'UPC'.
ls_mesg-msgty = 'S'.
ls_mesg-msgno = '305'.
ls_mesg-msgv1 = l_jobname.
APPEND ls_mesg TO et_mesg.
ENDFUNCTION.

0 comments:
Post a Comment