Текущее время: Чт, мар 28 2024, 12:36

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Листинг в качестве журнала. Как сохранить SPOOL в случае прерывания программы.
СообщениеДобавлено: Чт, сен 06 2018, 20:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Часто пользуюсь Write для протоколирования операций в своих утилитах. Как говорится - дёшево и сердито.
Одно плохо, если программа неожиданно закончилась, выпала в дамп или соединение пропало, то и журнал пропадёт.
За сим нашёл решение, всегда пишем в Spool и периодически Commit-им:

Code:
Report ZLOG_WRITE.

Tables:
  UST04.

Parameters:
  Dump as checkbox.

Start-of-Selection.

  Data:
    lv_Cursor       type Cursor,
    A               type F,
    ls_Print_Params type PRI_PARAMS,
    lv_Valid        type C length 1.

  Perform Log_Init.

  Open cursor with hold lv_Cursor for
    select *
      from UST04.

  Do.
    Fetch next cursor lv_Cursor
      into Ust04.
    If sy-subrc <> 0 or
       sy-dbcnt > 10.
      EXIT."Do
    EndIf.

    Write: / sy-dbcnt, Ust04-BName.

    Case sy-dbcnt.

      when 7.
        If Dump = 'X'.
          A = 1 / 0."Дамп
        EndIf.

      when others.
        Perform Log_Commit.

    EndCase.

  EndDo.

  Close cursor lv_Cursor.

  Perform Log_Close.

  Perform Log_Show using sy-spono.

******************************************
Form Log_Init.
  Call function 'GET_PRINT_PARAMETERS'
    exporting
      No_Dialog      = 'X'
    importing
      Out_Parameters = ls_Print_Params
      Valid          = lv_Valid
    exceptions
      others         = 99.

  If lv_Valid is initial or sy-subrc <> 0.
    Leave program.
  EndIf.

  ls_Print_Params-Prnew = 'X'.
  New-Page
    print on
    new-section
    parameters ls_Print_Params
    no-title
    no-heading
    no dialog.
  Write /.
EndForm.

Form Log_Commit.
  New-Page
    print off
    no-title
    no-heading
    no-topofpage.

  ls_Print_Params-Prnew = ''.

  New-Page
    print on
    parameters ls_Print_Params
    no-title
    no-heading
    no dialog.

  Call function 'DB_COMMIT'.


EndForm.

Form Log_Close.
  New-Page
    print off
    no-title
    no-heading
    no-topofpage.
  Call function 'DB_COMMIT'.
EndForm.

Form Log_Show using iv_Id.
  Data:
    lv_Spid     type TSP01-RQIDENT.

  lv_Spid = iv_Id.

  Call function 'RSPO_DISPLAY_SPOOLJOB'
    exporting
      Rqident = lv_Spid.
EndForm.


tags:
List, Write, Spool, Log.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Последний раз редактировалось Parazit Чт, сен 13 2018, 14:05, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 09:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
А почему именно DB_COMMIT?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 09:55 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Не уловил фишки :) Подскажи, если можно коммитить почему не использовать стандартный лог SLG?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 10:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Besa написал:
Не уловил фишки :) Подскажи, если можно коммитить почему не использовать стандартный лог SLG?

Я человек простой - дебажу через write :shumlol:

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 10:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
А почему именно DB_COMMIT?

Это "мягкий" Commit, он выполняется только на уровне БД, его можно вызывать даже внутри Select (в конструкции Open cursor with hold ... ).

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 11:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Besa написал:
Не уловил фишки :) Подскажи, если можно коммитить почему не использовать стандартный лог SLG?

Стандартный SLG слишком громоздкий. Его я конечно использую, но в относительно серьёзных разработках, предназначенных для конечного пользователя.
А в утилитах (для себя), например, импорта-экспорта большого количества файлов с компьютера, мне достаточно простого протокола из одного Write с именем очередного загруженного файла. Чтобы, просто заглянув в Spool, знать, с какого файла продолжить загрузку, если вдруг сессия отвалилась. Городить огород в SLG не имеет смысла, и просто лень. :) А спул не требует много ресурсов, не оставляет мусора (отомрёт сам по себе), не требует дополнительных настроек и создания объектов разработки. Простое решение для специфических, простых и временных задач.
Единственное, что меня не устраивало - листинг не сохранялся при критическом прерывании программы. Кстати, в SLG с этим тоже шаманить приходилось, насколько помню. А из select-а не пробовал, может и не получится.

В общем ещё один способ протоколирования. Что использовать - каждый сам для себя решает.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 12:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Parazit написал:
Kengur написал(а):
А почему именно DB_COMMIT?

Это "мягкий" Commit, он выполняется только на уровне БД, его можно вызывать даже внутри Select (в конструкции Open cursor with hold ... ).

И чего? Если ты до этого написал где то update то он ляжет в базу. Я так понимаю не работают только апдейт модули?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 12:51 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
В утилитах можно так поступить: пишем подпрограмму вывода сообщения, в которой ветвим логику: если режим диалоговой - используем write, если фоновый - message.
Итого в фоновом режиме сообщения будут собираться в журнал фонового задания.

По сравнению со спулом поудобнее будет:
1. Насколько помню, спул доступен в sm37 только после отработки фонового задания, а сообщения в журнале появляются в процессе работы.
2. В журнале sm37 сообщения привязаны к моменту времени в отличие от спула, т.е. удобно трейсить производительность, деля программку на логические шаги с выводом сообщения по итогам каждого из них.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 14:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
Parazit написал:
Это "мягкий" Commit, он выполняется только на уровне БД, его можно вызывать даже внутри Select (в конструкции Open cursor with hold ... ).

И чего? Если ты до этого написал где то update то он ляжет в базу. Я так понимаю не работают только апдейт модули?

Мне нужен был commit по логике программы, и я его написал, и сделал его мягким, чтобы была возможность получать неубиваемые логи даже изнутри select-а. Любой другой commit, явный или неявный, в этом случае вывалил бы дамп.
Об особенностях "Open cursor with hold" (в т.ч. DB_COMMIT) подробно написано в стандартном хелпе.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Пт, сен 07 2018, 14:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
LKU написал:
В утилитах можно так поступить: пишем подпрограмму вывода сообщения, в которой ветвим логику: если режим диалоговой - используем write, если фоновый - message.
Итого в фоновом режиме сообщения будут собираться в журнал фонового задания.

По сравнению со спулом поудобнее будет:
1. Насколько помню, спул доступен в sm37 только после отработки фонового задания, а сообщения в журнале появляются в процессе работы.
2. В журнале sm37 сообщения привязаны к моменту времени в отличие от спула, т.е. удобно трейсить производительность, деля программку на логические шаги с выводом сообщения по итогам каждого из них.

Проблема была как раз с Write в диалоге, нужно было как-то делать промежуточное сохранение спула на случай внезапной смерти программы. Что я и сделал.

Возможность выбора удобства тоже удобство! :)
В моём конкретном случае утилита работает в диалоге и в фоне, причём иногда одновременно, поэтому для меня удобней, чтобы все логи были в одном месте.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Чт, сен 13 2018, 10:14 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
а чем не устраивает ASSERT, LOG-POINT и логи транзакции SAAB ?

для логирования технических (отладочных) helloworld-ов - самое оно. Отключил, не логирует (не садит производительность программы лишними коммитами), включил, логирует.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Чт, сен 13 2018, 14:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
pberezin написал:
а чем не устраивает ASSERT, LOG-POINT и логи транзакции SAAB ?

для логирования технических (отладочных) helloworld-ов - самое оно. Отключил, не логирует (не садит производительность программы лишними коммитами), включил, логирует.

По сути тема не о том, какой журнал лучше, а о том, как не потерять листинг. Каждый сам решает, какой способ в каких случаях использовать. Свой случай и свой выбор я уже описал.

Тему создал для того, чтобы описать приём, как делать промежуточное сохранение списка. В первую очередь для себя, т.к. дожил до того, что иногда на некоторые вопросы стал находить в интернете свои же ответы :shock: , написанные много лет назад. Склероз! :D
Ну, может и ещё кому-то пригодится.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Чт, сен 13 2018, 17:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Parazit написал:
Тему создал для того, чтобы описать приём, как делать промежуточное сохранение списка.


Кстати, на эту тему есть еще Secondary Database Connections.
В отличие от мягкого DB_COMMIT точно ничего лишнего в БД не запишет.

Вот здесь обсуждали:
viewtopic.php?f=13&t=91536
8051core написал(а):
Если посмотреть код BAL_DB_SAVE, то он как раз через Secondary Database Connections и работает.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Листинг в качестве журнала.
СообщениеДобавлено: Чт, сен 13 2018, 21:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
LKU написал:
Кстати, на эту тему есть еще Secondary Database Connections.
В отличие от мягкого DB_COMMIT точно ничего лишнего в БД не запишет.
Да, Connection хорошая тема для развязки по коммитам. Если есть своя таблица и остальной сервис (просмотр, удаление, автоматическая чистка по срокам и т.д.).

8051core написал(а):
Если посмотреть код BAL_DB_SAVE, то он как раз через Secondary Database Connections и работает.
В старых версиях SAP таки нет Connection, то есть решение не универсальное, а жаль.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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