2017-11-06 7 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. 
関連する問題