Автор Тема: Ф-ция для работы с JOB"ми  (Прочитано 30494 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Ф-ция для работы с JOB"ми
« : Ноябрь 17, 2008, 08:49:58 pm »
Может кто подскажет НОРМАЛЬНУЮ функцию для планировки заданий, и не сосчтите за наголость хоть с каким-то примером.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми (ФМ: JOB_OPEN, JOB_CLOSE)
« Ответ #1 : Ноябрь 20, 2008, 12:48:06 pm »
Ну функция там не одна, там в группе функций BTCH, много чего интересного есть... но если нужно быстро запланировать и выполнить фоновое задание из программы, то сделать это можно используя следующие ФМ.

JOB_OPEN - Создать фоновое задание
JOB_CLOSE - Завершить формирование задания и далее оно по заданным условиям пойдет работать.

В общем виде на скорую руку, программа планирует выполнение отчета MB51 - Документы движения материала, в фоне по дате запуска.
Код: You are not allowed to view links. Register or Login
DATA: l_jobname LIKE tbtcjob-jobname,
      l_jobcount LIKE tbtcjob-jobcount,
      l_ret TYPE i,
      l_datestart LIKE sy-datum,              "Дата старта задания
      l_timestart LIKE tbtcjob-sdlstrttm,     "Время старта
      l_job_was_released LIKE btch0000-char1.


RANGES: r_werks FOR mseg-werks.

CONCATENATE 'MY_JOB' sy-datum sy-uzeit INTO l_jobname
SEPARATED BY '_'.

CALL FUNCTION 'JOB_OPEN'
  EXPORTING
    delanfrep              = ' '
    jobgroup               = ' '
    jobname                = l_jobname
*   SDLSTRTDT              = NO_DATE
*   SDLSTRTTM              = NO_TIME
*   JOBCLASS               =
  IMPORTING
    jobcount               = l_jobcount
  CHANGING
    ret                    = l_ret
  EXCEPTIONS
    cant_create_job        = 1
    invalid_job_data       = 2
    jobname_missing        = 3
    OTHERS                 = 4.

CLEAR: r_werks, r_werks[].
r_werks-low = '1000'. r_werks-option = 'I'. APPEND r_werks.
SUBMIT rm07docs
   WITH werks IN r_werks
   USER sy-uname VIA JOB l_jobname NUMBER l_jobcount
   AND RETURN.

l_datestart = sy-datum.            "Дата старта задания
l_timestart = sy-uzeit + 10.       "Время старта

CALL FUNCTION 'JOB_CLOSE'
  EXPORTING
*   AT_OPMODE                         = ' '
*   AT_OPMODE_PERIODIC                = ' '
*   CALENDAR_ID                       = ' '
*   EVENT_ID                          = ' '
*   EVENT_PARAM                       = ' '
*   EVENT_PERIODIC                    = ' '
    jobcount                          = l_jobcount
    jobname                           = l_jobname
*   LASTSTRTDT                        = NO_DATE
*   LASTSTRTTM                        = NO_TIME
*   PRDDAYS                           = 0
*   PRDHOURS                          = 0
*   PRDMINS                           = 0
*   PRDMONTHS                         = 0
*   PRDWEEKS                          = 0
*   PREDJOB_CHECKSTAT                 = ' '
*   PRED_JOBCOUNT                     = ' '
*   PRED_JOBNAME                      = ' '
    sdlstrtdt                         = l_datestart
    sdlstrttm                         = l_timestart
*   STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
*   STRTIMMED                         = ' '
*   TARGETSYSTEM                      = ' '
*   START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
*   START_ON_WORKDAY_NR               = 0
*   WORKDAY_COUNT_DIRECTION           = 0
*   RECIPIENT_OBJ                     =
*   TARGETSERVER                      = ' '
*   DONT_RELEASE                      = ' '
  IMPORTING
    job_was_released                  = l_job_was_released
  CHANGING
    ret                               = l_ret
 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.

Параметры JOB_OPEN
delanfrep = Если поставить Х, то задание будет удалено из списка после успешного выполнения, т.е. через SM37 задание будет не видно.
jobgroup - Имя группы задания, типа позволяет сгруппировать несколько заданий
jobname - Имя задания, ну тут полностью ваше творчество как оно будет называться, опять же уникальность имени не обязательно должно соблюдаться.
SDLSTRTDT - Параметр не используется
SDLSTRTTM - Параметр не используется
JOBCLASS - Типа классификация заданий, сам не крутил сказать, что и как не знаю, не испльзовал.

jobcount - Собственно говоря это и есть уникальный идентификатор задания, который вам сообщит система и на которое потом и будем ссылаться в последующих функциях.
ret - Типа поле расширенного сообщения об ошибке, если создание было не выполнено и sy-subrc не нулевое, то тут типа дополнительная диагностическая информация.

Параметры JOB_CLOSE, тут большинство полей становится ясным, если вы занимались планированием заданий в диалоге.
AT_OPMODE - Типа задание стартует... ну судя из кода по событию при этом событие будет параметризированым и собственно говоря в этом поле и можно задать строку параметров.
AT_OPMODE_PERIODIC - Задание будет выполняться периодически, флаг имеет смысл только если задан параметр AT_OPMODE
CALENDAR_ID - Календарь, собственно по нему система определяет рабочие/праздничные дни и можно настроить типа ситуацию когда задние не будет выполняться по выходным дням. Само собой для этого надо и задать код производственного календаря.
EVENT_ID - Задание будет выполняться по событию, тут надо задать имя события.
EVENT_PARAM - Параметры события
EVENT_PERIODIC - Задание будет выполняться периодически.
jobcount - Собственно сам номер задания, который вернула функция JOB_OPEN
jobname - Имя задания, должно быть тоже что передавалось в JOB_OPEN
LASTSTRTDT - Не стартовать после заданной в этом поле даты
LASTSTRTTM - Не стартовать после заданного в этом поле времени. Ну в общем-то типа если задание например до 18:00 не стартовало, то типа не очень то уже и надо.

Далее параметры имеют смысл, для периодически выполняемых заданий
PRDDAYS  - Выполняться через заданное количество дней
PRDHOURS - Аналогично часов
PRDMINS - Минут
PRDMONTHS - Месяцев
PRDWEEKS - Недель

PREDJOB_CHECKSTAT - Если задано что задание должно стартовать после какого-то другого задания, то установив в этом поле X, *   PRED_JOBCOUNT - Внутренний код/номер задания
PRED_JOBNAME  - Имя предыдущего задания

sdlstrtdt - Задание должно стартовать в заданную дату
sdlstrttm - И заданное время

STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS - Ограничения по дате старта задания, никогда не  использовал это поле, оно похоже завязано как-то на рабочий календарь который задается выше.

STRTIMMED - Запустить задание немедленно.
TARGETSYSTEM - Имя целевой системы, где должно выполняться задание.

START_ON_WORKDAY_NOT_BEFORE - Типа работать только по рабочим дням, само собой дни берутся из производственного календаря.
START_ON_WORKDAY_NR - Не использовал, не знаю.
WORKDAY_COUNT_DIRECTION - Аналогично... кому надо разбирайтесь.

RECIPIENT_OBJ  - Объект кому будет отправлен супл, тип поля SWOTOBJID, а там можно например задать внутреннего пользователя системы который будет получать спулы или вообще внешний E-Mail если надо отправить данные за пределы системы.

TARGETSERVER - Сервер где будет работать задание.
DONT_RELEASE  - Задание только запланировать но не деблокировать. В принципе предполагается, что деблокирование будет сделано в ручном режиме, например через SM37.

Теперь что касается порядка параметров выполнения, т.е. например задали дату + время выполнения задания + типа стартовать после события. На самом деле из кода ясно, что система отреагирует в этом случае именно на дату выполнения, а поле выполнять после события будет проигнорировано. Последовательность читается из кода:
Код: You are not allowed to view links. Register or Login
  if start_on_workday_nr ne 0.
*       1 - Приоритет по календарю
  elseif sdlstrtdt ne no_date.
*       2 - Заданная дата
  elseif strtimmed eq 'X'.
*       3 -  Флаг выполнить немедленно
  elseif event_id ne space.
*       4 - Стартовать после события
  elseif pred_jobname ne space.
*       5 - Стартовать после задания
  elseif at_opmode ne space.
*       6 - После задания используя эту at_opmode
  endif.
Т.е. выходит если задана дата, то флаг стартовать немедленно будет проигнорирован и т.д. в общем вот так вот это было написано и как-то все таки работает  ;)

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #2 : Ноябрь 20, 2008, 02:08:04 pm »
2 Паганель: главное - без фанатизма, были случаи, когда в результате неправильного использования задания запускались 1 раз в 5-10 минут при общем объеме выборки 20 мин... ;), что весьма конкретно нагружало сервер БД.
« Последнее редактирование: Ноябрь 04, 2009, 11:31:25 am от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #3 : Ноябрь 20, 2008, 02:16:26 pm »
You are not allowed to view links. Register or Login
2 Паганель: главное - без фанатизма, были случаи, когда в результате неправильного использования задании запускались 1 раз в 5-10 минут при общем объеме выборки 20 мин... ;), что весьма конкретно нагружало сервер БД.
Ну вообще-то для этого есть BP_JOB_CHECKSTATE, типа неплохо бы проверить какие задания уже крутяться + можно вообще свой объект блокирования сделать и проверять его в начале своей программы.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #4 : Ноябрь 20, 2008, 02:19:28 pm »
Нда, плодовитый мужик - Uukrul, ничего не скажешь. ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #5 : Ноябрь 20, 2008, 04:10:38 pm »
You are not allowed to view links. Register or Login
Нда, плодовитый мужик - Uukrul, ничего не скажешь. ;)
Не это я просто давно с ней общаюсь... вот и накопилось, а как все выскажу... пойду наверное в дворники  ;D

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #6 : Ноябрь 20, 2008, 08:09:37 pm »
You are not allowed to view links. Register or Login
Не это я просто давно с ней общаюсь... вот и накопилось, а как все выскажу... пойду наверное в дворники  ;D
Ну очищать Родину тоже полезно. ;D

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #7 : Ноябрь 21, 2008, 01:05:44 am »
You are not allowed to view links. Register or Login
Ну очищать Родину тоже полезно. ;D
Ага, вот в городе Киеве говорят, что даже иногда... дворникам на шару дают квартиру... как я понимаю за хорошо убранную Родину, а вот за хорошо поставленный и настроенный SAP, квартир почему-то никто не дает  ;) или дают?
« Последнее редактирование: Ноябрь 21, 2008, 01:08:33 am от Uukrul »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #8 : Ноябрь 21, 2008, 08:06:27 am »
You are not allowed to view links. Register or Login
Ага, вот в городе Киеве говорят, что даже иногда... дворникам на шару дают квартиру... как я понимаю за хорошо убранную Родину, а вот за хорошо поставленный и настроенный SAP, квартир почему-то никто не дает  ;) или дают?
Не, не дают. Еще и ругаются иногда, дескать до вашего SAP была у нас система - просто сказка, а вы пришли и попортили нам все... ;D ;D ;D
« Последнее редактирование: Ноябрь 21, 2008, 08:17:55 am от Dmitriy »

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Ф-ция для работы с JOB"ми
« Ответ #9 : Ноябрь 21, 2008, 04:49:14 pm »
You are not allowed to view links. Register or Login
2 Паганель: главное - без фанатизма, были случаи, когда в результате неправильного использования задании запускались 1 раз в 5-10 минут при общем объеме выборки 20 мин... ;), что весьма конкретно нагружало сервер БД.
Да нет, я человек битый, и с бум бацу ничего в продуктив не несу, не протестировав
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #10 : Ноябрь 21, 2008, 04:52:03 pm »
You are not allowed to view links. Register or Login
Да нет, я человек битый, и с бум бацу ничего в продуктив не несу, не протестировав
А вот это зря... такой иногда знаете ли адреналин и вообще потом головомойку получаешь  ;D

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Ф-ция для работы с JOB"ми
« Ответ #11 : Ноябрь 22, 2008, 01:32:04 pm »
You are not allowed to view links. Register or Login
А вот это зря... такой иногда знаете ли адреналин и вообще потом головомойку получаешь  ;D

Зачем мне лишниее ? И итак периодичесски получаю  :)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #12 : Ноябрь 22, 2008, 06:44:32 pm »
You are not allowed to view links. Register or Login
Зачем мнYeе лишниее ? И итак периодичесски получаю  :)
Ну ты без дела получаешь, а так за дело будет  ;D Совсем другой же расклад...

Оффлайн rudeman

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #13 : Ноябрь 26, 2008, 03:20:14 pm »
Доброго времени суток!
Я вот сделал все, вроде получилось красиво, но  delanfrep = 'X' - ничего не дает...
висит в sm37 со статусом выполнено...
Я хочу сделать "вертушку" которая постоянно будет жрать файлы из папки... и если поставить ему ран каждую минуту, например, то оно зафлудить весь лог в sm37...
Код грубо говоря весь приведенный Uukrul ' ом, только другое имя репорта и стоит Х.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #14 : Ноябрь 26, 2008, 04:03:32 pm »
You are not allowed to view links. Register or Login
Доброго времени суток!
Я вот сделал все, вроде получилось красиво, но  delanfrep = 'X' - ничего не дает...
висит в sm37 со статусом выполнено...
Я хочу сделать "вертушку" которая постоянно будет жрать файлы из папки... и если поставить ему ран каждую минуту, например, то оно зафлудить весь лог в sm37...
Код грубо говоря весь приведенный Uukrul ' ом, только другое имя репорта и стоит Х.
Ну что могу сказать, ну во-первых, если вы ставите 1 минуту, то значит у вас все поступившие за минуту файлы точно типа успеют обработаться за 59 секунд, а иначе ставить период 60 секунд нет смысла... т.е. первое пересмотрите  все таки периодичность, к примеру если это уже раз в 30 минут, то в логе будет 48 записей а это уже не так и много, плюс логи всегда можно чистить.

Во-вторых, что касается этого флажка delanfrep, короче похоже оно не работает так как закоментировано... т.е. функция JOB_OPEN в своем коде вызывает функциюя WIZARD_JOB_OPEN, передавая туда этот флажок, а та всвою очередь вызывает BP_JOB_CREATE, но так, что внутри этой самой WIZARD_JOB_OPEN написано следующее:
Код: You are not allowed to view links. Register or Login
  global_job-jobname   = jobname.
* global_job-delanfrep = delanfrep.
* GLOBAL_JOB-SDLSTRTDT = SDLSTRTDT.
* GLOBAL_JOB-SDLSTRTTM = SDLSTRTTM.
Т.е. в BP_JOB_CREATE как видим этот флажок не передается... так что или надо вызывать дополнительно ФМ, который будет чистить лог, но я бы поручил это администраторам, опять же чистить лог даже раз в день плохо, а вдруг был сбой, надо хотя бы неделю, две давать чтобы системные логи оставались.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #15 : Ноябрь 26, 2008, 04:07:17 pm »
Можно поиграться с вызовом BP_JOB_CREATE, может можно напрямую вызвать ее с этим флажком... там в принципе заполняется структура:
Код: You are not allowed to view links. Register or Login
data begin of global_job.
        include structure tbtcjob.
data end of global_job.

PS: Если будут результаты отпишитесь если не сложно... но я бы все таки не удалял бы лог из SM37, а то потом же концов не найдете, что и почему перестало работать, а так хоть ошибки в логах будут...

Оффлайн rudeman

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #16 : Ноябрь 26, 2008, 04:36:04 pm »
Ну я планирую так, что то что задача будет выполняться каждую минуту, еще не значит, что она будет выполняться полностью )
Т.е. файлы туда будут бросаться не каждую минуту, а допустим раз час (период может изменяться), но мне надо чтоб файлы обработались грубо говоря как только они упадут в папку.
Было бы конечно шикарно сделать так, чтоб в журнал sm37 вешались только те задачи, которые прошли со сбоем ) Вот над этим подумаю, на фоне ваших советов по BP_JOB_CREATE

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #17 : Ноябрь 26, 2008, 05:12:03 pm »
You are not allowed to view links. Register or Login
Было бы конечно шикарно сделать так, чтоб в журнал sm37 вешались только те задачи, которые прошли со сбоем ) Вот над этим подумаю, на фоне ваших советов по BP_JOB_CREATE
Ну тогда так делать нельзя... т.е. про BP_JOB_CREATE забудь... так как ошибочные задания тоже будут удалены... посмотри группу функций по BP_JOB_CREATE на предмет удаления данных из логов... там функций много, может найдется которая чистит лог...тогда можно сделать так чтобы переде запуском каждое задание проверяло а нет ли в логе данных о выполненных заданиях и если есть проверять их статус, если они без ошибки удалять, иначе оставить в логе... вообще-то между нами все задания хранятся в таблицах TBTC*, так что если ФМ нужный не найдется, можно чистить эти таблицы по номеру задания, ну если админы не будут сильно возражать... Я бы если честно на месте админов бы возражал вообще то по поводу любого удаления любых логов (через ФМ или руками в таблицах, это не имеет значения), так как это их область контроля.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #18 : Март 02, 2009, 03:38:25 pm »
Небольшой пример запроса параметров старта фонового задания у пользователя и дальнейшего запуска фонового задания. По поводу редактора/диалога параметров планирования написано тут: You are not allowed to view links. Register or Login, остальное как бы собрано в одну приятную заготовку, которую можно использовать в своих программах, практически без особых изменений.
Код: You are not allowed to view links. Register or Login
INCLUDE lbtchdef.
DATA: ls_stdt_input LIKE tbtcstrt,
      l_stdt_modify_type LIKE btch0000-int4,
      ls_stdt_output LIKE tbtcstrt,
      l_job_count LIKE tbtcjob-jobcount,
      l_job_relased LIKE btch0000-char1,
      l_job_name LIKE tbtcjob-jobname.

ls_stdt_input-startdttyp = btc_stdt_datetime.
ls_stdt_input-sdlstrtdt = sy-datum.
ls_stdt_input-sdlstrttm = sy-uzeit.
CALL FUNCTION 'BP_START_DATE_EDITOR'
     EXPORTING
          stdt_dialog                    = 'Y'
          stdt_input                     = ls_stdt_input
          stdt_opcode                    = btc_edit_startdate
     IMPORTING
          stdt_modify_type               = l_stdt_modify_type
          stdt_output                    = ls_stdt_output
     EXCEPTIONS
          fcal_id_not_defined            = 1
          incomplete_last_startdate      = 2
          incomplete_startdate           = 3
          invalid_dialog_type            = 4
          invalid_eventid                = 5
          invalid_opcode                 = 6
          invalid_opmode_name            = 7
          invalid_periodbehaviour        = 8
          invalid_predecessor_jobname    = 9
          last_startdate_in_the_past     = 10
          no_period_data_given           = 11
          no_startdate_given             = 12
          period_and_predjob_no_way      = 13
          period_too_small_for_limit     = 14
          predecessor_jobname_not_unique = 15
          startdate_interval_too_large   = 16
          startdate_in_the_past          = 17
          startdate_is_a_holiday         = 18
          startdate_out_of_fcal_range    = 19
          stdt_before_holiday_in_past    = 20
          unknown_fcal_error_occured     = 21
          no_workday_nr_given            = 22
          invalid_workday_countdir       = 23
          invalid_workday_nr             = 24
          notbefore_stdt_missing         = 25
          workday_starttime_missing      = 26
          no_eventid_given               = 27
          OTHERS                         = 28.
CHECK sy-subrc = 0.

* Имя задания = MY_<имя пользователя>+<Дата>+<Время>
CONCATENATE 'MY' sy-uname sy-datum sy-uzeit
INTO l_job_name SEPARATED BY '_'.
* Создать задание для запуска программы
CALL FUNCTION 'JOB_OPEN'
     EXPORTING
          jobname          = l_job_name
     IMPORTING
          jobcount         = l_job_count
     EXCEPTIONS
          cant_create_job  = 1
          invalid_job_data = 2
          jobname_missing  = 3
          OTHERS           = 4.
IF sy-subrc <> 0.
* Что-то тут пошло не так, плакаться администраторам системы
ENDIF.

* Вызов своей программы в фоне
SUBMIT my_programm
   WITH p_ebeln = <номер заказа>
   WITH p_ebelp IN <позиции закза>
   WITH p_commit = true
USER sy-uname VIA JOB l_job_name NUMBER l_job_count
AND RETURN.

* Планирование выполнено, закрыть задание для дальнейшего старта.
CALL FUNCTION 'JOB_CLOSE'
  EXPORTING
*   AT_OPMODE                         = ' '
    at_opmode_periodic                = space
    calendar_id                       = ls_stdt_output-calendarid
    event_id                          = ls_stdt_output-eventid
    event_param                       = ls_stdt_output-eventparm
*   EVENT_PERIODIC                    = ' '
    jobcount                          = l_job_count
    jobname                           = l_job_name
    predjob_checkstat                 = ls_stdt_output-checkstat
    pred_jobcount                     = ls_stdt_output-predjobcnt
    pred_jobname                      = ls_stdt_output-predjob
    sdlstrtdt                         = ls_stdt_output-sdlstrtdt
    sdlstrttm                         = ls_stdt_output-sdlstrttm
*   STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
    strtimmed                         = ls_stdt_output-startdttyp
*   TARGETSYSTEM                      = ' '
*   START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
*   START_ON_WORKDAY_NR               = 0
*   WORKDAY_COUNT_DIRECTION           = 0
*   RECIPIENT_OBJ                     =
*   TARGETSERVER                      = ' '
*   DONT_RELEASE                      = ' '
  IMPORTING
    job_was_released                  = l_job_relased
* CHANGING
*   RET                               =
  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.
IF sy-subrc <> 0.
* Тоже не все хорошо... плакаться можно на форум :-)
ENDIF.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #19 : Март 02, 2009, 04:00:27 pm »
Идем дальше по работе с фоновыми заданиями. В общем задание запланировали это хорошо. Неплохо теперь бы еще дать пользователю полномочия на просмотра того, как оно работает. Нет конечно стандартную SM37 никто не отменял, но админы не очень жалуют ее раздачу пользователям, а все потому, что на первом экране можно задавать имя пользователя, причем похоже сделать это поле доступным для просмотра нельзя никаким образом, а это значит, что пользователи получают возможность работы с чужими заданиями, что с одной стороны плохо, а с другой (знаете ли были случаи), когда найти крайнего, кто удалил задание, не представляется возможным. Почему SAP не сделал руление полномочиями? Ну наверное потому, что нарисовать транзакцию вида SМ37 имея функциональные модули BP_JOB_SELECT и BP_JOBLIST_PROCESSOR_SM37B, можно минут за 30  ::).

И так:
BP_JOB_SELECT - Позволяет по маске выбрать список заданий.
BP_JOBLIST_PROCESSOR_SM37B - Выводит задания на экран, причем дальше можно с этими заданиями работать в диалоге, типа изменить задание, перепланировать запуск задания и т.д. Короче, можно делать все то, что позволяет делать транзакция SM37.

В примере ниже показан как выбрать задания по маске и показать их на экране. Если дорисовать свой экранчик запроса маски, то будет полная аналогия SM37. Пример выдран из кода большой программы, где пользователь управляет заданиями по обработки неких файлов + у него есть инструмент по просмотру статусов заданий. Кстати товарищу rudeman, используя данный функционал, вы можете показывать только те задания которые завершились с ошибкой, что вроде как и требовалось по вашей задаче (You are not allowed to view links. Register or Login).
Код: You are not allowed to view links. Register or Login
  data: ls_jobsel_params like btcselect,
        l_error_code type i,
        lt_jobselect_joblist like tbtcjob occurs 1 with header line.
  data: ls_jobsel_params like btcselect,
        l_error_code type i,
        lt_jobselect_joblist like tbtcjob occurs 1 with header line.

  concatenate 'MY_' sy-uname '*'
  into ls_jobsel_params-jobname.

  ls_jobsel_params-username = sy-uname.
* Показать задания во всех статусах true = 'X'.
  ls_jobsel_params-prelim = true.
  ls_jobsel_params-schedul = true.
  ls_jobsel_params-ready = true.
  ls_jobsel_params-running = true.
  ls_jobsel_params-finished = true.
  ls_jobsel_params-aborted = true.

* Задания выбрать все, за весь период!!!
  call function 'BP_JOB_SELECT'
    exporting
      jobselect_dialog          = 'N'
      jobsel_param_in           = ls_jobsel_params
*     ENDDATE                   = '        '
*     ENDTIME                   = '      '
      selection                 = 'AL'
    importing
      jobsel_param_out          = ls_jobsel_params
    tables
      jobselect_joblist         = lt_jobselect_joblist
    changing
      error_code                = l_error_code
    exceptions
     invalid_dialog_type       = 1
     jobname_missing           = 2
     no_jobs_found             = 3
     selection_canceled        = 4
     username_missing          = 5
     others                    = 6.
  if sy-subrc <> 0.
*  Как говориться плакать на форум, если что плохо, может поможем :-)
  endif.

  call function 'BP_JOBLIST_PROCESSOR_SM37B'
    exporting
      joblist_opcode                   = '21'
      joblist_refr_param               = ls_jobsel_params
* IMPORTING
*   JOBLIST_SEL_JOB                  =
    tables
      joblist                          = lt_jobselect_joblist
   exceptions
     invalid_opcode                   = 1
     joblist_is_empty                 = 2
     joblist_processor_canceled       = 3
     others                           = 4.

  if sy-subrc <> 0.
*  Аналогично, плакать на форум, если что плохо, может поможем :-)
  endif.

Для констант можно включить INCLUDE lbtchdef и тогда joblist_opcode = '21', можно задать через константу... btc_joblist_edit, т.е. список заданий возможно редактировать, но можно как обычно его показать в статусе просмотра btc_joblist_show = '22'. Тогда пользователь сможет просмотреть параметры выполнения и статус выполнения задания, но изменить/удалить задание не сможет. Опять же в даном случае ls_jobsel_params-username = sy-uname, т.е. только задания пользователя который зарегистрирован в системе и выполняет данный код.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми (BP_JOBLOG_READ)
« Ответ #20 : Март 24, 2009, 12:48:54 am »
BP_JOBLOG_READ - Получить записи журнала задания. Если для получения списка использовалась функция BP_JOB_SELECT, то в принципе параметрами входа будут данные из таблицы lt_jobselect_joblist.
Код: You are not allowed to view links. Register or Login
DATA: lt_jobselect_joblist LIKE tbtcjob OCCURS 1 WITH HEADER LINE,
      lt_joblogtbl LIKE tbtc5 OCCURS 1 WITH HEADER LINE.

* Преполагаем что список заданий получили используюя ФМ BP_JOB_SELECT
READ TABLE lt_jobselect_joblist INDEX 1.

* Прочитаем лог работы задания
CALL FUNCTION 'BP_JOBLOG_READ'
 EXPORTING
   client                      = sy-mandt
   jobcount                    = lt_jobselect_joblist-jobcount
*  JOBLOG                      = ' '
   jobname                     = lt_jobselect_joblist-jobname
  TABLES
    joblogtbl                   = lt_joblogtbl
 EXCEPTIONS
   cant_read_joblog            = 1
   jobcount_missing            = 2
   joblog_does_not_exist       = 3
   joblog_is_empty             = 4
   joblog_name_missing         = 5
   jobname_missing             = 6
   job_does_not_exist          = 7
   OTHERS                      = 8.

* Собственно говоря тут все сообщения журнала, как представленные как тексты
* для сообщений так и уже готовые сформированные строки.
LOOP AT lt_joblogtbl.
  write: / lt_joblogtbl-TEXT
ENDLOOP.
Так сказать все прозрачно и просто... и часто полезно  :D

-=[DrDe@D]=-

  • Гость
Своя JobOpen с заданием даты и времени
« Ответ #21 : Июль 07, 2010, 09:02:08 am »
Залез в JobOpen и раскомментил поля даты и времени, получилась форма:
Код: You are not allowed to view links. Register or Login
form job_open using
_DELANFREP LIKE  TBTCJOB-DELANFREP
_JOBGROUP LIKE  TBTCJOB-JOBGROUP
_JOBNAME LIKE  TBTCJOB-JOBNAME
_SDLSTRTDT LIKE  TBTCJOB-SDLSTRTDT
_SDLSTRTTM LIKE  TBTCJOB-SDLSTRTTM
_JOBCLASS LIKE  TBTCJOB-JOBCLASS
changing
_JOBCOUNT LIKE  TBTCJOB-JOBCOUNT
_RET TYPE  I
_excetion type i
      .

constants:
  CANT_CREATE_JOB type i value 11,
  INVALID_JOB_DATA value 12,
  JOBNAME_MISSING value 13.


data: btc_no like btch0000-char1 value 'N',
      central_adk_abap(8) value 'RSARDISP',
      btc_scheduled     like tbtco-status value 'P'.
      data begin of global_step_tbl occurs 10.
        include structure tbtcstep.
      data end of global_step_tbl.
      data begin of global_job.
              include structure tbtcjob.
      data end of global_job.
      data:

   btc_jobclass_a value 'A',
   btc_jobclass_b value 'B',
   btc_jobclass_c value 'C'.

  data: err_invalid_step_number          type i value 1.
  data: err_no_authority                 type i value 2.
  data: err_job_doesnt_have_this_step    type i value 3.
  data: err_child_register_error         type i value 4.
  data: err_wrong_selection_par          type i value 5.
  data: err_invalid_jobclass             type i value 6.
  data: err_spoollist_recipient          type i value 7.
  data: err_plain_recipient              type i value 8.

  data:  btc_abap like tbtcstep-typ value 'A',
         calling_abap           like sy-repid.
         data begin of global_start_date.
        include structure tbtcstrt.
data end of global_start_date.
  data: jobname_class_a        like tbtco-jobname.

***** c5034979 XBP20, change *****
  clear: _ret,_excetion.

*
* Parameter verproben
*
  if _jobname eq space.
    _excetion =  jobname_missing.
  endif.
* break-point.
  refresh global_step_tbl.
  clear   global_step_tbl.
  clear   global_job.

* Name des Aufrufers ermitteln
  call 'AB_GET_CALLER' id 'PROGRAM' field calling_abap.
*
* Uebergabe-Struktur fuer Jobdaten fuellen. Starttermindaten werden
* absichtlich nicht mehr berucksichtigt, sondern nur aus Kompatibili-
* tatsgrunden in der Schnittstelle belassen ( wird spater entfernt )
*
  global_job-jobname   = _jobname.
  global_job-delanfrep = _delanfrep.
  GLOBAL_JOB-SDLSTRTDT = _SDLSTRTDT.
  GLOBAL_JOB-SDLSTRTTM = _SDLSTRTTM.
* GLOBAL_JOB-EXECSERVER = _server_name. "имя сервера(для datasets)

***** c5034979 XBP20, change *****
* Jobklasse zunachst gema? dem Parameter jobclass setzen.
* Dies kann danach noch ubersteuert werden.
* translate _jobclass to upper case.
  if _jobclass = btc_jobclass_a.
    global_job-jobclass  = btc_jobclass_a.
  elseif _jobclass = btc_jobclass_b.
    global_job-jobclass  = btc_jobclass_b.
  elseif _jobclass = btc_jobclass_c.
    global_job-jobclass  = btc_jobclass_c.
  elseif _jobclass is initial.
    global_job-jobclass  = btc_jobclass_c.
  else.
    _ret = cant_create_job.
  endif.

* Jobklasse setzen / NEWFLAG auf 'O'(Open) setzen
* (der Workflow-Job 'SWWDHEX_' bekommt immer Jobklasse A).
* Weiterhin bekommt ein spezieller Einplaner immer Jobklasse A
* wg. der Archivierung auf Datenbankhosts (->F.Hoffmann).
  if ( _jobname eq 'SWWDHEX' ) or
     ( calling_abap eq central_adk_abap ).
    global_job-jobclass  = btc_jobclass_a.
  endif.

*** hgk  begin
  import job_a = jobname_class_a
  from memory id 'BW_JOBNAME_CLASS_A'.
  if sy-subrc = 0.
    if jobname_class_a = _jobname.
      global_job-jobclass  = btc_jobclass_a.
      free memory id 'BW_JOBNAME_CLASS_A'.
    endif.
  endif.
***hgk  end

  global_job-newflag   = 'O'.
*
* Steptabelle mit Dummy-ABAP fuellen
*
  global_step_tbl-program = 'RSBTCPT3'.
  global_step_tbl-typ     = btc_abap.
  global_step_tbl-status  = btc_scheduled.
  global_step_tbl-authcknam = sy-uname.
  append global_step_tbl.

  call function 'BP_JOB_CREATE'
    exporting
      job_cr_dialog    = btc_no
      job_cr_head_inp  = global_job
    importing
      job_cr_head_out  = global_job
      job_cr_stdt_out  = global_start_date
    tables
      job_cr_steplist  = global_step_tbl
    exceptions
      invalid_job_data = 1
      others           = 99.

  case sy-subrc.
    when 0.
      _jobcount = global_job-jobcount.
    when 1.
      _ret =  invalid_job_data.
    when others.
      _ret =  cant_create_job.
  endcase.
endform.

Запускать:
Код: You are not allowed to view links. Register or Login
*длинным не называть!иначе сабмит не стработает

CONCATENATE 'MY_JOB:' sy-datum ':' sy-uzeit into name.

perform job_open using
''
''
name
_date
_time
'A'
changing
number
m_RET
m_extension
  .

if m_RET eq 0.
  submit....
endif.

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 636
  • Репутация: +23/-0
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #22 : Июль 07, 2010, 12:38:20 pm »
Цитата: Uukrul  link=topic=381.msg3002#msg3002 date=1236002427
Неплохо теперь бы еще дать пользователю полномочия на просмотра того, как оно работает. Нет конечно стандартную SM37 никто не отменял, но админы не очень жалуют ее раздачу пользователям, а все потому, что на первом экране можно задавать имя пользователя, причем похоже сделать это поле доступным для просмотра нельзя никаким образом, а это значит, что пользователи получают возможность работы с чужими заданиями, что с одной стороны плохо, а с другой (знаете ли были случаи), когда найти крайнего, кто удалил задание, не представляется возможным. Почему SAP не сделал руление полномочиями?
Это админы от незнания, что есть SMX или по пути: Система->Собственные задания.  :)
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Ф-ция для работы с JOB"ми
« Ответ #23 : Июль 07, 2010, 06:39:55 pm »
You are not allowed to view links. Register or Login
Это админы от незнания, что есть SMX или по пути: Система->Собственные задания.  :)
Ну это оно в 6.0 уже стало прилично выглядеть, а вот до этого там полная фигня показывалась к сожалению...

Оффлайн nick_mi

  • Newbie
  • *
  • Сообщений: 6
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Ф-ция для работы с JOB"ми
« Ответ #24 : Июль 08, 2010, 08:49:51 am »
 В 4.0 там есть кнопочка "Обзор заданий" жмем ее и выходим опять на запрос пользователя и задания.