Текущее время: Пн, июл 21 2025, 00:27

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Запуск программы в фоновом режиме.
СообщениеДобавлено: Ср, ноя 28 2007, 18:49 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, май 22 2006, 15:45
Сообщения: 82
Есть необходимость запуска программы ТОЛЬКО в фоновом режиме.
Подскажите как или где на форуме это описано. Поиск мне ничего не дал.
Спасибо заранее.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 28 2007, 18:56 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
В самописной:
Code:
at selection-screen output.
  refresh ITAB.
  append: 'PRIN' to ITAB,
          'ONLI' to ITAB.

  call function 'RS_SET_SELSCREEN_STATUS'
    exporting
      P_STATUS  = SY-PFKEY
    tables
      P_EXCLUDE = ITAB.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск программы в фоновом режиме.
СообщениеДобавлено: Ср, ноя 28 2007, 18:58 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
wax написал(а):
Есть необходимость запуска программы ТОЛЬКО в фоновом режиме.
Подскажите как или где на форуме это описано. Поиск мне ничего не дал.
Спасибо заранее.


Вопрос по запуску фонового режима из ABAP программы
фоновый режим
Подскажите фоновый режим


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 29 2007, 08:37 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
У меня для этих целей написан ФМ

Code:

FUNCTION z_job_submit.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(I_IMMEDIATE) TYPE  C
*"     VALUE(I_REPID) TYPE  PROGRAM
*"     VALUE(I_SERVER_CHOOSE) TYPE  C OPTIONAL
*"  EXCEPTIONS
*"      REPORT_DOES_NOT_EXIST
*"      PROGRAM_IS_NOT_EXECUTA
*"      CANT_CREATE_JOB
*"      INVALID_JOB_DATA
*"      JOBNAME_MISSING
*"      SEL_SCREEEN_DOES_NOT_EXIST
*"----------------------------------------------------------------------
  PERFORM check_report USING i_repid
                             l_exists
                             l_exec.

  IF l_exists <> 'X'.
    RAISE report_does_not_exist.
  ENDIF.

  IF l_exec <> 'X'.
    RAISE program_is_not_executable.
  ENDIF.


*получаем селекционный экран из запущенной программы
    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
      EXPORTING
        curr_report           = i_repid
* IMPORTING
*   SP                    =
      TABLES
        selection_table       = it_rsparams[]
     EXCEPTIONS
       not_found             = 1
       no_report             = 2
       OTHERS                = 3
              .


  CASE sy-subrc.
    WHEN1.
      RAISE sel_screeen_does_not_exist.
    WHEN 3.
      RAISE others.
  ENDCASE.


*Выбор сервера приложений
  IF i_server_choose = 'X'.

    CLEAR: selected_server, target_system.
    PERFORM get_btc_systems USING rc.

    IF rc = 0.
      FREE btc_sys_srv_tbl.

      LOOP AT btc_sys_tbl INTO wa_btc_sys_tbl.
        wa_btc_sys_srv_tbl-srvname = wa_btc_sys_tbl-instname.
        APPEND wa_btc_sys_srv_tbl TO btc_sys_srv_tbl.
      ENDLOOP.


      FREE field_tbl.
      wa_field_tbl-tabname    = 'BTCTGTSRVR'.
      wa_field_tbl-fieldname  = 'SRVNAME'.
      wa_field_tbl-selectflag = 'X'.
      APPEND wa_field_tbl TO field_tbl.

      CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
           EXPORTING
                tabname      = wa_field_tbl-tabname
                fieldname    = wa_field_tbl-fieldname
           IMPORTING
                select_value = selected_server
           TABLES
                fields       = field_tbl
                valuetab     = btc_sys_srv_tbl
           EXCEPTIONS
                OTHERS       = 99.

      READ TABLE btc_sys_tbl WITH KEY instname = selected_server
      INTO wa_serv.

      IF sy-subrc = 0.
        target_system = wa_serv-btcsystem.
      ELSE.
        CLEAR: selected_server, target_system.
      ENDIF.
    ENDIF.
  ENDIF.
*ApplServerChoose


* Получаем номер задачи
  MOVE i_repid TO l_job.

  CALL FUNCTION 'JOB_OPEN'
       EXPORTING
            jobname          = l_job
       IMPORTING
            jobcount         = l_jobcount
       EXCEPTIONS
            cant_create_job  = 1
            invalid_job_data = 2
            jobname_missing  = 3
            OTHERS           = 8.

  CASE sy-subrc.
    WHEN 1.
      RAISE cant_create_job.
    WHEN 2.
      RAISE invalid_job_data.
    WHEN 3.
      RAISE jobname_missing.
    WHEN 8.
      RAISE others.
  ENDCASE.

  TRANSLATE i_repid TO UPPER CASE.

  SUBMIT (i_repid) WITH SELECTION-TABLE it_rsparams
  USER sy-uname VIA JOB l_job NUMBER l_jobcount AND RETURN.


* Если запуск отложенный
  IF i_immediate IS INITIAL.

* ... то запускаем менеджер планирования задачи
    CALL FUNCTION 'BP_START_DATE_EDITOR'
         EXPORTING
              stdt_dialog      = 'Y'
              stdt_input       = l_startspecs
              stdt_opcode      = 14
         IMPORTING
              stdt_modify_type = l_start_modify_flag
              stdt_output      = l_startspecs
         EXCEPTIONS
              OTHERS           = 1.

    IF l_startspecs-startdttyp  = 'I'.
*    IF l_startspecs-startdttyp  = 'X'.
      l_start_immediate = 'X'.
    ENDIF.

    IF i_server_choose = 'X'.
      l_startspecs-instname = target_system.
    ENDIF.

*  и зупускаем фоновое выполнение согласно заданному расписанию
    CALL FUNCTION 'JOB_CLOSE'
         EXPORTING
              at_opmode_periodic          = l_startspecs-periodic
              calendar_id                 = l_startspecs-calendarid
              event_id                    = l_startspecs-eventid
              event_param                 = l_startspecs-eventparm
              event_periodic              = l_startspecs-periodic
              jobcount                    = rsjobinfo-jobnumb
              jobname                     = rsjobinfo-jobname
              laststrtdt                  = l_startspecs-laststrtdt
              laststrttm                  = l_startspecs-laststrttm
              prddays                     = l_startspecs-prddays
              prdhours                    = l_startspecs-prdhours
              prdmins                     = l_startspecs-prdmins
              prdmonths                   = l_startspecs-prdmonths
              prdweeks                    = l_startspecs-prdweeks
              predjob_checkstat           = l_startspecs-checkstat
              pred_jobcount               = l_startspecs-predjobcnt
              pred_jobname                = l_startspecs-predjob
              sdlstrtdt                   = l_startspecs-sdlstrtdt
              sdlstrttm                   = l_startspecs-sdlstrttm
              startdate_restriction       = l_startspecs-prdbehav
              strtimmed                   = l_start_immediate
              targetsystem                = l_startspecs-instname
              start_on_workday_not_before = l_startspecs-notbefore
              start_on_workday_nr         = l_startspecs-wdayno
              workday_count_direction     = l_startspecs-wdaycdir
              targetserver                = selected_server
         EXCEPTIONS
              OTHERS                      = 1.

  ELSE.

*  ... иначе немедленный запуск фонового выполнения
    l_start_immediate = 'X'.

    CALL FUNCTION 'JOB_CLOSE'
         EXPORTING
              jobcount     = rsjobinfo-jobnumb
              jobname      = rsjobinfo-jobname
              strtimmed    = l_start_immediate
              targetsystem = target_system
              targetserver = selected_server
         EXCEPTIONS
              OTHERS       = 1.

  ENDIF.


  MESSAGE ... WITH 'Отчет запущен в фоновом режиме'.

ENDFUNCTION.



Модуль позволяет вызвать стандартный диалог по планированию задачи или пропустить его. А также выбрать сервер приложений, на котором будет крутиться задача.

Пример использования в программе
Code:
REPORT z_job.

TABLES:
bseg.


SELECT-OPTIONS:
so_bukrs FOR bseg-bukrs.

PARAMETERS: p_test(10) TYPE c,
p_job TYPE c AS CHECKBOX,
p_server TYPE c AS CHECKBOX,
p_immed TYPE c AS CHECKBOX.


START-OF-SELECTION.

  IF p_job = 'X'.

*Чтобы не зациклить
   CLEAR:  p_job.

    CALL FUNCTION 'Z_JOB_SUBMIT'
         EXPORTING
              i_immediate                = p_immed
              i_repid                    = 'Z_JOB'
              i_server_choose            = p_server
         EXCEPTIONS
              report_does_not_exist      = 1
              program_is_not_executable  = 2
              cant_create_job            = 3
              invalid_job_data           = 4
              jobname_missing            = 5
              sel_screeen_does_not_exist = 6
              OTHERS                     = 7.

    IF sy-subrc <> 0.
      WRITE / 'Error'.
    ENDIF.

  ELSE.
    WRITE p_test.
    WRITE / p_job.
  ENDIF.

Также возможен принудительный запуск только в фоне, если p_job сделать NO-DISPLAY DEFAULT 'X'. Мой способ позволяет с минимальными переделками интегрировать фоновый запуск в любой отчет. Только в таком случае надо учесть, чтобы в обработке экранной логики не было диалогов, типа вызова дополнительных экранов итд, а иначе не дождаться, когда же отчет выполнится :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB