Автор Тема: Вывод сообщений в спул в фоновом режиме с помощью WRITE.  (Прочитано 16258 раз)

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

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Доброе утро.

Есть программа, которая запускается в фоновом режиме. Для отслеживания её статуса выводятся сообщения с помощью оператора WRITE методом класса:

Код: You are not allowed to view links. Register or Login
   METHOD write_log_b.

    DATA:
      l_msg TYPE sy-ucomm,
      l_udate TYPE char10,
      l_utime TYPE char8.

    GET TIME.

    CONCATENATE sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum+0(4) INTO l_udate.
    CONCATENATE sy-uzeit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2) INTO l_utime.

    CONCATENATE l_udate l_utime txt INTO l_msg SEPARATED BY space.

    IF sy-batch EQ 'X'.
      WRITE: / l_msg.
    ENDIF.

  ENDMETHOD.

Проблема в том, что сообщения в спуле появляются только после того, как программа полностью отработала, их нельзя посмотреть во время её работы, ради чего все и затевалось.

Отладка в фоне идет через пустой цикл с проверкой переменной в теле, потом в отладчике (через SM50) изменяю её значение, и дальше иду по коду в отладчике.

В чем может быть дело? SDN копал, разные варианты пробовал: и выводить внутри START-OF-SELECTION одно сообщение, и после END-OF-SELECTION, и NEW-PAGE.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Для динамики фонового отчета выводи сообщения, о ходе выполнения, через MESSAGE типа S/W, эти сообщения попадают в журнал задания, причем их можно, если я правильно помню, смотреть сразу в ходе работы процесса.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
У меня сообщения, которые делают WRITE-ми, дублируют по сути сообщения, выводимые ФМ-ом SAPGUI_PROGRESS_INDICATOR.

В общем, как-то задача решилась, как - сам не понял. Возможно, из-за отладчика вывод в спул сразу не получался. Если поставить в начале и в конце программы WAIT UP TO 60 SECONDS, то лог виден.

И улучшенный код метода вывода лога:
Код: You are not allowed to view links. Register or Login
   METHOD write_log_b.

    CHECK sy-batch EQ 'X'.
    GET TIME.
    WRITE: / sy-datum, sy-uzeit, im_txt.

  ENDMETHOD.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Однако, рано радовался. В продуктиве не показывает.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Однако, рано радовался. В продуктиве не показывает.
Да нет не советую заморачиватся... сделай вывод через сообщения типа S или W и будет тебе счастье это раз и две журнал будет корректным, а спулы обычно ж админы чистить любят в автомате, соответственно история не остается.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Сделаю через MESSAGE. Но что странно: другая программа, где все примерно то же самое - лог выводится.
Может быть даже сделать этот лог через ГФ SBAL.
Или еще каким-то методом...
« Последнее редактирование: Март 30, 2011, 12:47:18 pm от A. »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Сделаю через MESSAGE. Но что странно: другая программа, где все примерно то же самое - лог выводится..
Ну может там LUW закрывается. Если у себя можно по логике, поставь вызов COMMIT и наверное будет счастье.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Ну может там LUW закрывается. Если у себя можно по логике, поставь вызов COMMIT и наверное будет счастье.
Ну, там у меня только выбор из БД идет, никаких записей или обновлений. В целом основная часть построена так: вызов WRITE отдельным методом, затем вызов основного метода, который обрабатывает данные. И так и идет последовательно парами: вывод сообщения - действие, вывод сообщения - действие, ...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Вот после каждой пары или группы обработанных пар поставь COMMIT, наверное все заработает. Просто если это делать после каждой пары записей, то будет замедление обработки, хотя если это не критично, то можно и после каждой пары делать. Но я бы сделал все через журнал сообщений.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
В общем, MESSAGE не работает, COMMIT не работает, SBAL - нужно после каждой записи записывать лог в базу. Похоже, что проще свою таблицу с GUID.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
В общем, MESSAGE не работает, COMMIT не работает, SBAL - нужно после каждой записи записывать лог в базу. Похоже, что проще свою таблицу с GUID.
Нет, что то тут не то. Будет время посмотрю тоже. Я так понял делаем тест в цикле раз в пару секунд выводим информацию...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
В общем, MESSAGE не работает, COMMIT не работает, SBAL - нужно после каждой записи записывать лог в базу. Похоже, что проще свою таблицу с GUID.
Вообще-то странно я проверил на трех разных системах работу вот такой вот простой программки:
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YTSH_TEMP_BACKGROUND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ytsh_temp_background MESSAGE-ID ytsh_temp.

PARAMETERS: p_loops LIKE sy-tabix DEFAULT 100,
            p_delay LIKE sy-tabix DEFAULT 5.

DATA: l_count LIKE sy-tabix.

l_count = 0.

DO p_loops TIMES.
  l_count = l_count + 1.
  WAIT UP TO p_delay SECONDS.
  MESSAGE s001 WITH 'Цикл' l_count.
ENDDO.
Затем запустил через SE37 функцию BP_JOBLOG_READ - Read Background Request Log, так вот сообщения выводимые во время работы этой программы в фоне попадали в журнал в динамике. Поэтому почему у вас как вы говорите ничего не отражается не знаю, надо уже смотреть наверное конкретную систему.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Да уж... У меня нет слов как я тормознул... Переклинило, что лог, выводимый оператором MESSAGE, также должен считываться в тр. SM37 при нажатии на кнопку "Спул". А он считывается через кнопку "Журнал задания"...

Uukrul, в очередной раз спасибо большое!

Sapforum.Biz