一鸣要改一个程序,导入excel文件,放后台去执行,我给他改了一个,用了SAP的内存共享轻松传递了2张内表。
A程序,把内表数据放内存中,启动一个后台作业:
EXPORT GT_ALV TO SHARED BUFFER indx(aa) ID 'GT_ALV1'.
EXPORT gt_vlc TO SHARED BUFFER indx(bb) ID 'gt_vlc1'.
"启动一个后台作业
DATA :
lv_jobname TYPE tbtcjob-jobname,
lv_jobcount TYPE btcjobcnt.
lv_jobname = 'ZPDR0037_TSP_BG'.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
JOBNAME = lv_jobname
" SDLSTRTDT = lv_newdate
" SDLSTRTTM = lv_newtime
IMPORTING
jobcount = lv_jobcount.
"调用需要跑JOB的程序
SUBMIT ZPDR0037_TSP_BG
USER SY-UNAME
VIA JOB lv_jobname NUMBER lv_jobcount AND RETURN.
CALL FUNCTION 'JOB_CLOSE' "Release 这个Job
EXPORTING
jobcount = lv_jobcount
jobname = lv_jobname
strtimmed = abap_true "立即执行
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
message '启动了一个后台作业!' TYPE 'I'."上传文件选择失败
B程序,在后台执行,接收内存中的内表数据,然后处理数据:
*&---------------------------------------------------------------------*
*& Report ZPDR0037_TSP_BG
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPDR0037_TSP_BG.
DATA: gt_alv TYPE TABLE OF zspd0037_alv.
DATA: gt_vlc TYPE TABLE OF vlcvehicle.
DATA:
lt_vlcdata TYPE TABLE OF vlcdiavehi,
ls_vlcactdata TYPE vlcactdata.
write:/ '处理...' .
IMPORT GT_ALV FROM SHARED BUFFER indx(aa) ID 'GT_ALV1'.
IMPORT gt_vlc FROM SHARED BUFFER indx(bb) ID 'gt_vlc1'.
DELETE FROM SHARED BUFFER indx(aa) ID 'GT_ALV1'.
DELETE FROM SHARED BUFFER indx(bb) ID 'gt_vlc1'.
DATA n TYPE i.
n = lines( gt_alv ).
write:/ n.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<ls_alv>) WHERE chkbox = 'X' AND id = space.
READ TABLE gt_vlc INTO DATA(ls_vlc) WITH KEY zz_ordno = <ls_alv>-ordno.
IF sy-subrc = 0.
APPEND INITIAL LINE TO lt_vlcdata ASSIGNING FIELD-SYMBOL(<ls_vlcdata>).
MOVE-CORRESPONDING ls_vlc TO <ls_vlcdata>.
APPEND INITIAL LINE TO ls_vlcactdata-actdata_item ASSIGNING FIELD-SYMBOL(<ls_item>).
<ls_item>-vguid = ls_vlc-vguid.
<ls_item>-pddatu = <ls_alv>-pddatu.
<ls_item>-vhvin = <ls_alv>-vhvin.
<ls_item>-vhusg = <ls_alv>-vhusg.
<ls_item>-vhsar = <ls_alv>-vhsar.
<ls_item>-shlvl = <ls_alv>-shlvl.
CALL FUNCTION 'VELO09_SET_ACTION'
EXPORTING
incoming_action_iv = 'Z003'
commit_iv = 'S'
TABLES
vlcdiavehi_ct = lt_vlcdata
* VLCH_MSSG_ET =
* VLCBAPICU_IT =
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.
IF sy-subrc = 0.
<ls_alv>-id = icon_green_light.
<ls_alv>-msg = TEXT-e02.
write:/ <ls_alv>-ordno && '处理完成,' && sy-DATUM && SY-UZEIT .
ELSE.
<ls_alv>-id = icon_red_light.
<ls_alv>-msg = TEXT-e03.
write:/ <ls_alv>-ordno && '处理失败,' && sy-DATUM && SY-UZEIT .
ENDIF.
ENDIF.
ENDLOOP.