Professional Documents
Culture Documents
TABLES: spta_dt1.
TYPE-POOLS: spta.
TYPES : BEGIN OF ty_table,
tabname TYPE tabname,
tabrows TYPE int4,
END OF ty_table.
DATA : lv_total TYPE i, " Total no of dialog work process available in the g
roup server
lv_available TYPE i, " No of dialog work process that are free.
lv_occupied TYPE i, " No of occupied dialog process
lv_diff TYPE i, "Percentage difference of available work process
lv_split TYPE i. " No of partitions the main data is to be split
DATA : lv_lines TYPE i, " No of records in the internal table
lv_lines_tab TYPE i, " No of lines per tab
lv_start TYPE i, " Start point for processing
lv_end TYPE i. " End point for processing
CLEAR: lv_total ,
lv_available ,
lv_occupied ,
lv_diff.
PARAMETERS:
rfcgroup TYPE spta_rfcgr OBLIGATORY MEMORY ID spta_rfcgr,
maxtasks LIKE sy-index DEFAULT '4'.
* lo_numbr LIKE sy-index DEFAULT '10',
* hi_numbr LIKE sy-index DEFAULT '12'.
SELECTION-SCREEN SKIP 1.
*SELECT-OPTIONS:
* err_nrs FOR spta_dt1-number.
DATA:
gd_repid LIKE sy-repid,
gd_error_count LIKE sy-index,
gd_taskstat TYPE LINE OF spta_t_statistics-taskstat.
DATA:
gt_work_area LIKE spta_dt1 OCCURS 0 WITH HEADER LINE,
gt_result_area TYPE STANDARD TABLE OF cdpos.
START-OF-SELECTION.
DATA : pck_size TYPE sy-tabix.
gd_repid = sy-repid.
CLEAR: gd_error_count.
DATA ls_table LIKE exp_tablrows.
DATA lt_table TYPE STANDARD TABLE OF ty_table.
CLEAR ls_table.
ls_table-tabname = 'CDPOS'.
SELECT COUNT(*)
FROM (ls_table-tabname)
INTO ls_table-tabrows.
APPEND ls_table TO lt_table.
* Call the function module spbt_initialize the list of application server availa
ble and those that are free
CALL FUNCTION 'SPBT_INITIALIZE'
EXPORTING
group_name = rfcgroup
IMPORTING
max_pbt_wps = lv_total
free_pbt_wps = lv_available
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7.
* IF sy-subrc = 0.
* Split the data to be processed into no of work processes.
* lv_occupied = lv_total z- lv_available.
* IF lv_available IS INITIAL.
* lv_available = 4.
* ELSE.
* pck_size = ls_table-tabrows / lv_available.
* ENDIF.
pck_size = 130000.
* ENDIF.
END-OF-SELECTION.
BREAK-POINT.
* SKIP.
* LOOP AT gt_result_area.
* WRITE: / sy-tabix, text-res,
* gt_result_area-number,' : '.
* sy-index = strlen( gt_result_area-string ).
* WRITE: AT (sy-index) gt_result_area-string.
* ENDLOOP.
* SKIP.
* Define a type that contains ALL the input & output data
* needed for the RFC
DATA it_exp_data TYPE STANDARD TABLE OF cdpos.
TYPES: BEGIN OF t_rfcdata,
BEGIN OF importing,
workarea LIKE ls_table,
END OF importing,
BEGIN OF exporting,
exp_data LIKE it_exp_data,
END OF exporting,
END OF t_rfcdata.
*---------------------------------------------------------------------*
* FORM BEFORE_RFC *
*---------------------------------------------------------------------*
* Callback-Form invoked before each RFC *
*---------------------------------------------------------------------*
FORM before_rfc
USING
p_before_rfc_imp TYPE spta_t_before_rfc_imp
CHANGING
p_before_rfc_exp TYPE spta_t_before_rfc_exp
pt_rfcdata TYPE spta_t_indxtab
p_failed_objects TYPE spta_t_failed_objects
p_objects_in_process TYPE spta_t_objects_in_process
p_user_param .
DATA:
ld_package_size LIKE sy-tabix,
ld_task_data TYPE t_rfcdata,
ld_work_area TYPE ty_table,
ld_failed_obj LIKE LINE OF p_failed_objects,
ld_obj_in_process LIKE LINE OF p_objects_in_process.
*---------------------------------------------------------------------*
* FORM IN_RFC *
*---------------------------------------------------------------------*
* Callback-Form invoked within the RFC *
*---------------------------------------------------------------------*
FORM in_rfc
USING
p_in_rfc_imp TYPE spta_t_in_rfc_imp
CHANGING
p_in_rfc_exp TYPE spta_t_in_rfc_exp
p_rfcdata TYPE spta_t_indxtab.
DATA:
ld_taskdata TYPE t_rfcdata.
* Force synchronous update
* This is the most efficient method for parallel processing
* since no update data will be written to the DB but rather
* stored in memory.
* This statement must be reissued after each COMMIT WORK !!!!
SET UPDATE TASK LOCAL.
** Unpack RFC input data (that has been packed in the BEFORE_RFC form)
* CALL FUNCTION 'SPTA_INDX_PACKAGE_DECODE'
* EXPORTING
* indxtab = p_rfcdata
* IMPORTING
* data = ld_taskdata.
*
** Begin processing of RFC
* CALL FUNCTION 'SPTA_SAMPLES_PRIMEFACTORS_GET'
* TABLES
* data = ld_taskdata-importing-workarea.
* Fill result tables
* This would include data for result lists, message handler etc.
*****Select Query
SELECT *
FROM cdpos
PACKAGE SIZE pck_size
INTO TABLE it_exp_data.
APPEND LINES OF it_exp_data TO ld_taskdata-exporting-exp_data .
ENDSELECT.