Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема розпочата: Паганель від Квітень 02, 2009, 12:31:49 ПП

Назва: Как динамичесски формировать строку сообщения?
Відправлено: Паганель від Квітень 02, 2009, 12:31:49 ПП
В двух словах: делаю вызов транзакции, после вызова имею табличку с кодом ошибки и параметром (номером кредитора) (пример: me025, 1000), по номеру сообщения с T100 вытягиваю строку ошибки "Поставщик & ЗакупОрг & предусмотрен для удаления.".

Внимание вопрос: как сформировать на основе строки ошибки и параметра "нормальное" сообщение, типа "Поставщик 1000 ЗакупОрг 0001 предусмотрен для удаления"?

В Delphi была функция format(str,.....), есть аналог в АБАП?
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Паганель від Квітень 02, 2009, 12:39:42 ПП
Есть конечно replace (http://sapforum.biz/index.php/topic,88.0.html) но как динамичесски, т.е. не по искомой строке, а позиционно.
Назва: Re: Как динамичесски формировать строку сообщения? (ФМ MESSAGE_TEXT_BUILD)
Відправлено: Uukrul від Квітень 02, 2009, 01:06:16 ПП
CALL FUNCTION 'MESSAGE_TEXT_BUILD' - Поможет отцу русской демократии.. параметры там прозрачные.
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Паганель від Квітень 02, 2009, 01:10:05 ПП
Спасибо, самое оно
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Dmitriy від Квітень 02, 2009, 01:14:30 ПП
Если речь идет о внутренней таблице сообщений структуры BDCMSGCOLL (errtab, например), полученной после выполнения команды CALL TRANSACTION ..., то это делается элементарно:
DATA: infotext(400).
MESSAGE ID errtab-msgid TYPE 'S' NUMBER errtab-msgnr WITH errtab-msgv1 errtab-msgv2 errtab-msgv3 errtab-msgv4 INTO infotext.

Можно посмотреть по errtab, классу и номеру сообщений, какие переменные из msgv1 - msgv4 актуальны.

P.S. Хотя сам всегда предпочитал ф-цию, про которую написал Uukrul
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Uukrul від Квітень 02, 2009, 01:21:27 ПП
Цитата: Dmitriy від Квітень 02, 2009, 01:14:30 ПП
MESSAGE ID errtab-msgid TYPE 'S' NUMBER errtab-msgnr WITH errtab-msgv1 errtab-msgv2 errtab-msgv3 errtab-msgv4 INTO infotext.
А вот это INTO, оно кажется только с определенной версии есть... в 4.6 что-то я такого не нахожу...
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Паганель від Квітень 02, 2009, 01:22:31 ПП
Цитата: Dmitriy від Квітень 02, 2009, 01:14:30 ПП
Если речь идет о внутренней таблице сообщений структуры BDCMSGCOLL (errtab, например), полученной после выполнения команды CALL TRANSACTION ..., то это делается элементарно:
DATA: infotext(400).
MESSAGE ID errtab-msgid TYPE 'S' NUMBER errtab-msgnr WITH errtab-msgv1 errtab-msgv2 errtab-msgv3 errtab-msgv4 INTO infotext.

Можно посмотреть по errtab, классу и номеру сообщений, какие переменные из msgv1 - msgv4 актуальны.

P.S. Хотя сам всегда предпочитал ф-цию, про которую написал Uukrul

Тоже нормально MESSAGE ID .... INTO infotext. спасибо тоже можно использовать  :)
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Dmitriy від Квітень 02, 2009, 01:26:39 ПП
Цитата: Uukrul від Квітень 02, 2009, 01:21:27 ПП
А вот это INTO, оно кажется только с определенной версии есть... в 4.6 что-то я такого не нахожу...
Вполне возможно, навскидку не скажу, с 4.6 почти 3 года не работал.
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Uukrul від Квітень 02, 2009, 02:08:16 ПП
Цитата: Dmitriy від Квітень 02, 2009, 01:26:39 ПП
Вполне возможно, навскидку не скажу, с 4.6 почти 3 года не работал.
Ну в документации такой конструкции нет, хотя проверил в программке работает...
Назва: Re: Как динамичесски формировать строку сообщения?
Відправлено: Паганель від Квітень 08, 2009, 10:05:03 ДП
Пишу сюда, что бы не плодить топиков, просто забыл как вообще выводить сообщения после вызова транзакции, ФМ и т.д.


CALL FUNCTION 'XXX'
    .....
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.