Sapforum.Biz
Инструменты => SE37 - Построитель функций => ABAP - Инструментальные средства => SE37 - Подскажите ФМ => Тема начата: Паганель от Январь 20, 2010, 01:49:48 pm
-
Делаю такой вызов:
DATA: lt_batchattributes1 TYPE STANDARD TABLE OF bapibatchatt.
DATA: ls_batchattributes LIKE LINE OF lt_batchattributes1.
DATA: lt_batchattributesx TYPE STANDARD TABLE OF bapibatchattx.
DATA: ls_batchattributesx LIKE LINE OF lt_batchattributesx.
DATA: w_bapibatchatt TYPE bapibatchatt.
DATA: lt_bapiret TYPE STANDARD TABLE OF bapiret2. " WITH HEADER LINE.
ls_batchattributes-prod_date = wa_xmkpf-budat.
APPEND ls_batchattributes TO lt_batchattributes1.
ls_batchattributesx-prod_date = 'X'.
APPEND ls_batchattributesx TO lt_batchattributesx.
CALL FUNCTION 'BAPI_BATCH_CHANGE'
EXPORTING
material = wa_xmseg-matnr
batch = wa_xmseg-charg
plant = wa_xmseg-werks
batchattributes = lt_batchattributes1
batchattributesx = lt_batchattributesx
IMPORTING
batchattributes = w_bapibatchatt.
При вызове падает в дамп:
In the function module interface, you can specify only
fields of a specific type and length under "BATCHATTRIBUTES".
Although the currently specified field
"LT_BATCHATTRIBUTES1" is the correct type, its length is incorrect.
Как может быть длина не такой? В чем то траблы? Лыжи не едут?
-
Спасибо, тут друг-разработчик подсказал, там надо передавать структуру, а я табличку (блин пример выдрал а он то не рабочий)
-
В итоге мы получаем следующий код (простенький)
DATA: lt_batchattributes1 TYPE STANDARD TABLE OF bapibatchatt.
DATA: ls_batchattributes LIKE LINE OF lt_batchattributes1.
DATA: lt_batchattributesx TYPE STANDARD TABLE OF bapibatchattx.
DATA: ls_batchattributesx LIKE LINE OF lt_batchattributesx.
DATA: w_bapibatchatt TYPE bapibatchatt.
DATA: lt_bapiret TYPE STANDARD TABLE OF bapiret2. " WITH HEADER LINE.
ls_batchattributes-prod_date = wa_xmkpf-budat.
ls_batchattributesx-prod_date = 'X'.
CALL FUNCTION 'BAPI_BATCH_CHANGE'
EXPORTING
material = wa_xmseg-matnr
batch = wa_xmseg-charg
plant = wa_xmseg-werks
batchattributes = ls_batchattributes1 " <<<< = структура, а не табличка
batchattributesx = ls_batchattributesx " <<<< = структура, а не табличка
IMPORTING
batchattributes = w_bapibatchatt.
-
Дополнительно возникает вопрос концептуального характера,
в данную бапишку, дополнительно передается таблица для возвртата сообщения и ошибок
TABLES
return = lt_bapiret.
Судя по коду в самой бапи, она должна быть WITH HEADER LINE (см. код бапи).
Так вот вопрос: как обойти ограничение построителя классов (se18, я делаю внедрение)
Класс ZCL_IM_MB_DOCUMENT_BADI,Метод IF_EX_MB_DOCUMENT_BADI~MB_DOCUMENT_BEFORE_UPDATE
Tables with headers are no longer supported in the OO context.
-
Нужно попробовать внутри своего внедрения выполнить такое объявление таблицы сообщений:
DATA: lt_bapiret TYPE TABLE OF bapiret2.
И как можно быстрее забыть про конструкцию DATA: ... LIKE ... OCCURS n WITH HEADER LINE, это прошлый век. В теме про оптимизацию много написано про рабочую область (оптимизация циклов по вн. таблицам).
-
Ок, спасибо, приму на воружение