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

Часовой пояс: 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 часа


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

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


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

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