Как динамичесски формировать строку сообщения?

Автор Паганель, Квітень 02, 2009, 12:31:49 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

В двух словах: делаю вызов транзакции, после вызова имею табличку с кодом ошибки и параметром (номером кредитора) (пример: me025, 1000), по номеру сообщения с T100 вытягиваю строку ошибки "Поставщик & ЗакупОрг & предусмотрен для удаления.".

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

В Delphi была функция format(str,.....), есть аналог в АБАП?

Паганель

Есть конечно replace (http://sapforum.biz/index.php/topic,88.0.html) но как динамичесски, т.е. не по искомой строке, а позиционно.

Uukrul

CALL FUNCTION 'MESSAGE_TEXT_BUILD' - Поможет отцу русской демократии.. параметры там прозрачные.


Dmitriy

#4
Если речь идет о внутренней таблице сообщений структуры 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

Uukrul

Цитата: 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 что-то я такого не нахожу...

Паганель

Цитата: 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. спасибо тоже можно использовать  :)

Dmitriy

Цитата: Uukrul від Квітень 02, 2009, 01:21:27 ПП
А вот это INTO, оно кажется только с определенной версии есть... в 4.6 что-то я такого не нахожу...
Вполне возможно, навскидку не скажу, с 4.6 почти 3 года не работал.

Uukrul

Цитата: Dmitriy від Квітень 02, 2009, 01:26:39 ПП
Вполне возможно, навскидку не скажу, с 4.6 почти 3 года не работал.
Ну в документации такой конструкции нет, хотя проверил в программке работает...

Паганель

Пишу сюда, что бы не плодить топиков, просто забыл как вообще выводить сообщения после вызова транзакции, ФМ и т.д.


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.