Z Commusage Update PRL
Z Commusage Update PRL
report z_commusage_update_prl.
selection-screen skip 1.
selection-screen begin of block one with frame title text1.
selection-screen skip 1.
* Parameters for selection
parameters: pckgsize type ad_pc_size default '1000' obligatory,
serv_grp like rzllitab-classname,
job_cnt type i default '10'.
selection-screen skip.
selection-screen comment /1(70) comm1.
selection-screen comment /1(70) comm2.
select-options: seladr for adrc-addrnumber.
selection-screen skip 1.
selection-screen comment /1(70) comm3.
parameters: adru_cre like szad_field-flag default space.
selection-screen: end of block one.
at selection-screen output.
comm1 = 'Address Number selection.'.
comm2 = 'If blank, picks up all address numbers.'.
comm3 = 'Create ADRU entries only.'.
initialization.
text1 = 'Correction report - Address Communication Usages'.
start-of-selection.
constants : c_yes value 'X',
gc_true value 'X',
gc_false value ' '.
types:
begin of task,
index type sytabix, "Index
statu type char1, "Status
desti like rfcdes-rfcdest, "Destination
tname type text20, "Task name
end of task.
*&---------------------------------------------------------------------*
*& Form COMM_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0025 text
*----------------------------------------------------------------------*
form comm_update using value(iv_tabname)
value(iv_commtype)
value(iv_commusage).
lv_max_tasks = job_cnt.
clear: end_of_select.
define select_db_adrc.
if seladr_flag ne space.
select distinct addrnumber from adrc
into corresponding fields of table sel_tab
up to pckgsize rows where addrnumber in seladr and
addrnumber gt ls_addrnumber and &1 eq 'X' order by addrnumber
ascending.
else.
select distinct addrnumber from adrc
into corresponding fields of table sel_tab
up to pckgsize rows where addrnumber gt ls_addrnumber and
&1 eq 'X' order by addrnumber ascending.
endif.
end-of-definition.
define select_db_adcp.
if seladr_flag ne space.
select distinct s~persnumber p~addrnumber p~comp_pers
into corresponding fields of table sel_tab up to pckgsize rows
from adrp as s inner join adcp as p on p~persnumber = s~persnumber
where p~addrnumber in seladr and s~persnumber ge ls_persnumber
and &1 eq 'X' order by s~persnumber ascending .
else.
select distinct s~persnumber p~addrnumber p~comp_pers
into corresponding fields of table sel_tab up to pckgsize rows
from adrp as s inner join adcp as p on p~persnumber = s~persnumber
where s~persnumber ge ls_persnumber and &1 eq 'X'
order by s~persnumber ascending .
endif.
end-of-definition.
*TYPE 1 addresses.
do.
clear: sel_tab.
if end_of_select = 'X'.
exit.
endif.
case iv_tabname.
when 'FLAGCOMM2'. select_db_adrc flagcomm2.
when 'FLAGCOMM3'. select_db_adrc flagcomm3.
when 'FLAGCOMM4'. select_db_adrc flagcomm4.
when 'FLAGCOMM5'. select_db_adrc flagcomm5.
when 'FLAGCOMM6'. select_db_adrc flagcomm6.
when 'FLAGCOMM7'. select_db_adrc flagcomm7.
when 'FLAGCOMM8'. select_db_adrc flagcomm8.
when 'FLAGCOMM9'. select_db_adrc flagcomm9.
when 'FLAGCOMM10'. select_db_adrc flagcomm10.
when 'FLAGCOMM11'. select_db_adrc flagcomm11.
when 'FLAGCOMM12'. select_db_adrc flagcomm12.
when 'FLAGCOMM13'. select_db_adrc flagcomm13.
endcase.
enddo.
clear: sel_tab.
if end_of_select = 'X'.
exit.
endif.
case iv_tabname.
when 'FLAGCOMM2'. select_db_adcp flagcomm2.
when 'FLAGCOMM3'. select_db_adcp flagcomm3.
when 'FLAGCOMM4'. select_db_adcp flagcomm4.
when 'FLAGCOMM5'. select_db_adcp flagcomm5.
when 'FLAGCOMM6'. select_db_adcp flagcomm6.
when 'FLAGCOMM7'. select_db_adcp flagcomm7.
when 'FLAGCOMM8'. select_db_adcp flagcomm8.
when 'FLAGCOMM9'. select_db_adcp flagcomm9.
when 'FLAGCOMM10'. select_db_adcp flagcomm10.
when 'FLAGCOMM11'. select_db_adcp flagcomm11.
when 'FLAGCOMM12'. select_db_adcp flagcomm12.
when 'FLAGCOMM13'. select_db_adcp flagcomm13.
endcase.
enddo.
clear: sel_tab, end_of_select, ls_persnumber , ls_addrnumber,
lines_read.
*&---------------------------------------------------------------------*
*& Form DETERMINE_END_OF_TASK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form determine_end_of_task using iv_taskname.
gv_rcv_jobs = gv_rcv_jobs + 1.
if sy-subrc eq 0.
delete gt_taskx index lv_index.
endif.
lv_running_tasks = 0.
loop at gt_taskx
where statu <> gc_statu_error.
lv_running_tasks = 1.
exit.
endloop.
if lv_running_tasks = 0.
gv_all_tasks_finished = gc_true.
endif.
lv_taskname = lv_taskname + 1.
gt_taskx-tname = lv_taskname.
gt_taskx-index = lv_taskname.
gt_taskx-statu = gc_statu_working.
if sy-subrc = 0.
" Processing the logic in different threads - parallelization.
call function 'Z_ADRU_ADJ_PRL'
starting new task gt_taskx-tname
destination in group lv_group
performing determine_end_of_task on end of task
exporting
iv_commtype = iv_commtype
tables
sel_tab = sel_tab
exceptions
system_failure = 01
communication_failure = 02
resource_failure = 03.
case sy-subrc.
when 0.
call function 'SPBT_GET_PP_DESTINATION'
importing
rfcdest = gt_taskx-desti.
when 1 or 2.
call function 'SPBT_GET_PP_DESTINATION'
importing
rfcdest = gt_taskx-desti.
move gt_taskx-desti to lv_server_name.
gt_taskx-statu = gc_statu_error.
gv_err_jobs = gv_err_jobs + 1.
when 3.
wait until gv_rcv_jobs ge lv_snd_jobs.
endcase.
endif.
*--> Append to task-table
append gt_taskx.
*--> Statistics
add 1 to lv_snd_jobs.
lv_cur_jobs = lv_snd_jobs - gv_rcv_jobs.
using value(iv_commusage).