2017-11-06 8 views
-3

나는 체크 박스를 가지고 있으며, 사용자가 사용하도록 설정하는 경우는 아래의 코드를 백그라운드에서 프로그램을 실행하는 프로그램이 있습니다 실패 배경에 ABAP을 실행하십시오

REPORT zfile_creation_app2. 
*&---------------------------------------------------------------------* 
*& Create file on Application Server 
*& if the file exist, it will be deleted and created with new content 
*&---------------------------------------------------------------------* 

TABLES : sflight. 

TYPES: BEGIN OF ty_sflight, 
     carrid TYPE sflight-carrid, 
     connid TYPE sflight-connid, 
     fldate TYPE sflight-fldate, 
     END OF ty_sflight. 

DATA: lv_file(255). 
DATA: lt_sflight   TYPE TABLE OF ty_sflight. 
FIELD-SYMBOLS: <fs_sflight> LIKE LINE OF lt_sflight. 

"-----------------------------------------" 
" Selection Screen 
"-----------------------------------------" 
SELECT-OPTIONS: s_carid FOR sflight-carrid, 
       s_fldte FOR sflight-fldate. 

" File Path on Application Server 
PARAMETERS: p_path  TYPE btcxpgpar DEFAULT '/tmp', 
      p_bckgrd(1) TYPE c DEFAULT 'X'. 


"-----------------------------------------" 
" Help Search for SAP Folder 
"-----------------------------------------" 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. 
    DATA: c_fnh_mask TYPE dxfields-filemask VALUE '*', 
     search_dir TYPE dxfields-longpath. 

    CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE' 
    EXPORTING 
     directory  = search_dir 
     filemask   = c_fnh_mask 
    IMPORTING 
     serverfile  = p_path 
    EXCEPTIONS 
     canceled_by_user = 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. 

    "-----------------------------------------" 
    " Processing 
    "-----------------------------------------" 

START-OF-SELECTION. 

    IF p_bckgrd = 'X'. 
    PERFORM start_in_background. 
    ELSE. 
    PERFORM get_data. 
    PERFORM extract_to_file. 
    ENDIF. 

END-OF-SELECTION. 
    WRITE: lv_file , ' is created' . 


*&---------------------------------------------------------------------* 
*&  Form GET_DATA 
*&---------------------------------------------------------------------* 
*  text 
*----------------------------------------------------------------------* 
* --> p1  text 
* <-- p2  text 
*----------------------------------------------------------------------* 
FORM get_data . 

    SELECT carrid connid fldate FROM sflight INTO TABLE lt_sflight 
    WHERE carrid IN s_carid[] AND 
     fldate IN s_fldte. 

    IF sy-subrc NE 0 . 
    RETURN. 
    ENDIF. 

ENDFORM. 

*&---------------------------------------------------------------------* 
*&  Form EXTRACT_TO_FILE 
*&---------------------------------------------------------------------* 
*  text 
*----------------------------------------------------------------------* 
* --> p1  text 
* <-- p2  text 
*----------------------------------------------------------------------* 
FORM extract_to_file . 

    " Build FineName 
    CONCATENATE p_path '/' 'Flight' sy-datum sy-uzeit '.txt' INTO lv_file. 
    REPLACE ALL OCCURRENCES OF '//' IN lv_file WITH '/'. 

    " Check if File exists 
    OPEN DATASET lv_file FOR INPUT IN BINARY MODE. 
    IF sy-subrc EQ 0. 
    " If File Exists -> Delete it 
    CLOSE DATASET lv_file. 
    DELETE DATASET lv_file. 
    CLOSE DATASET lv_file. 
    ENDIF. 

    " Open file for Output 
    OPEN DATASET lv_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. 
    IF sy-subrc NE 0 . 
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 
    ENDIF. 

    " Transfer Data to file 
    LOOP AT lt_sflight ASSIGNING <fs_sflight>. 
    TRANSFER <fs_sflight> TO lv_file . 
    ENDLOOP. 

    " Close File 
    CLOSE DATASET lv_file. 

ENDFORM. 

*&---------------------------------------------------------------------* 
*&  Form START_IN_BACKGROUND 
*&---------------------------------------------------------------------* 
*  text 
*----------------------------------------------------------------------* 
* --> p1  text 
* <-- p2  text 
*----------------------------------------------------------------------* 
FORM start_in_background . 

    DATA: d_jobcount LIKE tbtcjob-jobcount, 
     d_jobname LIKE tbtcjob-jobname. 

    d_jobname = 'ZFILE_CREATION_APP2'. 

    CALL FUNCTION 'JOB_OPEN' 
    EXPORTING 
     jobname   = d_jobname 
    IMPORTING 
     jobcount   = d_jobcount 
    EXCEPTIONS 
     cant_create_job = 1 
     invalid_job_data = 2 
     jobname_missing = 3 
     OTHERS   = 4. 

    IF sy-subrc NE 0. 
    MESSAGE s368(00) WITH 'Error Creating Job' 
    sy-subrc. 
    EXIT. 
    ENDIF. 

    SUBMIT zfile_creation_app2 
    WITH s_carid = s_carid 
    WITH s_fldte = s_fldte 
    WITH p_bckgrd = space 
    WITH p_path = p_path 
     VIA JOB d_jobname 
      NUMBER d_jobcount 
     AND RETURN. 

    CALL FUNCTION 'JOB_CLOSE' 
    EXPORTING 
     jobcount   = d_jobcount 
     jobname   = d_jobname 
     strtimmed   = 'X' " Immediate 
    EXCEPTIONS 
     invalid_startdate = 1 
     jobname_missing = 2 
     job_close_failed = 3 
     job_nosteps  = 4 
     job_notex   = 5 
     lock_failed  = 6 
     OTHERS   = 7. 

    IF sy-subrc > 0. 
    MESSAGE s368(00) WITH 'Closing Job Failed' 
    sy-subrc. 
    EXIT. 
    ENDIF. 

ENDFORM. 

는 불행하게도 백그라운드 작업은 항상 다음과 같이 취소를 오류 : 날짜를 __.__.____ 형식으로 입력하십시오. 이것은 사용자를위한 기본 설정입니다.

누구든지 문제의 원인과 해결 방법을 알 수 있습니까? 사전 엘리아스

+2

zfor_get_bkrf_bseg 코드 및 입력 매개 변수 값을 보지 않고도 말하기 어렵습니다. 배경 작업으로 이것을 실행하기 위해 어떤 사용자를 사용합니까? 매개 변수 값이 SU01에 정의 된 사용자의 기본 형식과 일치합니까? – st4hoo

+0

전체 코드를 추가합니다. – ekekakos

+0

또한, 기본을 사용하는 대신 자신의 배경 작업 시동기를 코딩하는 바퀴를 재발 명하는 이유는 무엇입니까? – vwegert

답변

1

문제에

덕분에 so_budat 함께. so_budat가 선택 옵션 인 경우 "="대신 "in"을 사용하십시오. 아래를 참조하십시오.

so_budat IN so_budat.