SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Есть ли возможность расширения BAPI? https://www.sapboard.ru/forum/viewtopic.php?f=13&t=41286 |
Страница 1 из 2 |
Автор: | Nelson [ Вс, сен 14 2008, 14:57 ] |
Заголовок сообщения: | Есть ли возможность расширения BAPI? |
Всем доброго времени суток. У меня возникла проблема в проведении ретракции данных из BW в R/3. Стандартным способом это сделано путем BAPI_REQUISITION_CREATE она создает заявки в R/3 и сразу оговорюсь что форма заявки расширена при помощи user-exit и тут возникает проблема как мне расширить структуру BAPI для передачи дополнительных полей. Существует ли для этого user-exit? |
Автор: | Alex80 [ Вс, сен 14 2008, 15:34 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
Nelson написал(а): Всем доброго времени суток. Если пользовательские поля добавлены через customer include CI_EBANDB, то можно поробовать передавать их в таблице EXTENSIONIN этой BAPI. EXTENSIONIN-STRUCTURE = "BAPI_TE_REQUISITION_ITEM", а EXTENSIONIN+30 = структура типа BAPI_TE_REQUISITION_ITEM. У меня возникла проблема в проведении ретракции данных из BW в R/3. Стандартным способом это сделано путем BAPI_REQUISITION_CREATE она создает заявки в R/3 и сразу оговорюсь что форма заявки расширена при помощи user-exit и тут возникает проблема как мне расширить структуру BAPI для передачи дополнительных полей. Существует ли для этого user-exit? Ещё что-то похожее есть через стурктуру BAPI_TE_REQUISITION_ACCOUNT (если поля добавлены в EBKN через CI_COBL). Есть ещё BAPI_PR_CREATE. Из документации по EXTENSIONIN Цитата: Reference Structure for BAPI Parameters EXTENSIONIN/EXTENSIONOUT
Description Tthis table parameter can be used to populate customers' own fields that have been added to the database tables EBAN and EBKN. These extension parameters serve as containers in which all customer enhancements are passed on. The extension parameters are based on the structure BAPIPAREX. The data is passed on in a table. The format of the individual data records of this table is determined by the structure BAPIPAREX. This contains several data record fields (VALUEPART1, VALUEPART2, ...) plus a field for the name of an auxiliary structure (STRUCTURE). Validation of the data can be carried out via the Business AddIn (BAdI) definition ME_BAPI_PR_CUST. The INBOUND( ) method is available for this purpose. Value range The auxiliary structure can have the following instances: BAPI_TE_MEREQITEM for the enhancement of the database table EBAN (via MEREQ_ITEM) BAPI_TE_MEREQITEMX for the enhancement of the database table EBAN (via MEREQ_ITEMX) BAPI_TE_MEREQACCOUNT for the enhancement of the database table EBKN BAPI_TE_MEREQACCOUNTX for the enhancement of the database table EBKN To allow transfer of the data from the structure BAPI_TE_MEREQ, it is necessary to populate the associated X data structure. The data is transferred only if an X has been set for the relevant data field in the X data structure. In the process, The X information simulates manual entry via the online transaction. Default Note that only fields of the data type CHAR and similar data types may be used in the BAPI table ExtensionIn. |
Автор: | Nelson [ Чт, сен 18 2008, 13:50 ] |
Заголовок сообщения: | |
Привет, Alex80! Спасибо за ответ. Но правда мне никогда не приходилось настраивать BADI. Не подскажете как это можно будет проделать с учетом того, что для расширения используется структура CI_EBANDB. |
Автор: | vahtang [ Чт, сен 18 2008, 14:03 ] |
Заголовок сообщения: | |
Объявляешь и заполняешь стректуру содержащую поля из расширения: Code: DATA: extensionin TYPE TABLE OF bapiparex WITH HEADER LINE, e_item TYPE bapi_te_requisition_item. e_item-preq_item = ebanc-preq_item. e_item-field1 = 'aaaaa'. e_item-field2 = 'bbbbb'. extensionin-structure = 'BAPI_TE_REQUISITION_ITEM'. extensionin-valuepart1 = e_item. APPEND extensionin. Потом вызов: Code: CALL FUNCTION 'BAPI_REQUISITION_CREATE'
... TABLES ... extensionin = extensionin[]. И всё |
Автор: | Nelson [ Чт, окт 09 2008, 08:17 ] |
Заголовок сообщения: | |
vahtang написал(а): Объявляешь и заполняешь стректуру содержащую поля из расширения:
Code: DATA: extensionin TYPE TABLE OF bapiparex WITH HEADER LINE, e_item TYPE bapi_te_requisition_item. e_item-preq_item = ebanc-preq_item. e_item-field1 = 'aaaaa'. e_item-field2 = 'bbbbb'. extensionin-structure = 'BAPI_TE_REQUISITION_ITEM'. extensionin-valuepart1 = e_item. APPEND extensionin. Потом вызов: Code: CALL FUNCTION 'BAPI_REQUISITION_CREATE' ... TABLES ... extensionin = extensionin[]. И всё Не мог долго выйти на связь по причине того, что разработочная система не работала. А сейчас я обнаружил что указанные структуры: BAPI_TE_REQUISITION_ITEM и ebanc в BW системе отсутствуют и у меня возник соответственный вопрос как быть в данном случае создать пользовательские структуры для передачи параметров или есть другой более правильный вариант? |
Автор: | vahtang [ Чт, окт 09 2008, 10:44 ] |
Заголовок сообщения: | |
Попробуйте через SE37 поискать в ФМ BAPI_REQUISITION_CREATE как обработывается параметр extensionin. Я нашёл такой код: Code: PERFORM pr_extensionin TABLES extensionin xebkn xeban return USING lp_number_of_items lp_number_of_account. и далее в FORM pr_extensionin Code: ...
LOOP AT extensionin. CASE extensionin-structure. * accounting WHEN 'BAPI_TE_REQUISITION_ACCOUNT'. ... * items WHEN 'BAPI_TE_REQUISITION_ITEM'. ... У вас должно быть что-то подобное, соответственно будет понятно как передавать данные. |
Автор: | csander [ Пн, фев 28 2011, 10:55 ] |
Заголовок сообщения: | Re: |
vahtang написал(а): Объявляешь и заполняешь стректуру содержащую поля из расширения: Code: DATA: extensionin TYPE TABLE OF bapiparex WITH HEADER LINE, e_item TYPE bapi_te_requisition_item. e_item-preq_item = ebanc-preq_item. e_item-field1 = 'aaaaa'. e_item-field2 = 'bbbbb'. extensionin-structure = 'BAPI_TE_REQUISITION_ITEM'. extensionin-valuepart1 = e_item. APPEND extensionin. Потом вызов: Code: CALL FUNCTION 'BAPI_REQUISITION_CREATE' ... TABLES ... extensionin = extensionin[]. И всё Делаю также: Code: clear e_item. clear extension_str. e_item-preq_item = 1. e_item-zrsnum = '11'. e_item-zrspos = '22'. extension_str-structure = 'BAPI_TE_MEREQITEM'. extension_str-valuepart1 = e_item. APPEND extension_str to extensionin. Ошибка : "EXTENSION_STR-VALUEPART1" and "E_ITEM" are not mutually convertible in a Unicode program. Делаю по другому: Code: clear e_item. clear extension_str. e_item-preq_item = 1. e_item-zrsnum = '11'. e_item-zrspos = '22'. extension_str-structure = 'BAPI_TE_MEREQITEM'. assign e_item to <X_VBAP> casting. assign extension_str-valuepart1 to <X_EXTN> casting. <X_EXTN> = <X_VBAP>. APPEND extension_str to extensionin. Ошибки нет. Заявка создается. Но значения полей ZRSNUM и ZRSPOS в таблице EBAN отсутствуют. Если использую BAPI_PR_CREATE, то в RETURN следующее: Code: S BAPI 000 10000103 PurchaseRequisition создан(а,о). Внешняя ссылка: 000000 10000103 PurchaseRequisition PRHEADER 1
S 06 402 Заявка введена под номером 10000103. 000000 10000103 PRHEADER 1 S 06 402 Заявка введена под номером 10000103. 000000 10000103 PRHEADER 1 W ME 887 Ошибка при копировании ExtensionIn-данных для расширения CI_EBANDB 000000 CI_EBANDB PRITEM 1 W FICUSTOM 000 Позиция 00001 содержит финансовую позицию с фин. операцией, неравной 30. 000000 00001 PRACCOUNT 1 |
Автор: | Alex80 [ Пн, фев 28 2011, 11:21 ] |
Заголовок сообщения: | Re: Re: |
csander написал(а): Ошибка : "EXTENSION_STR-VALUEPART1" and "E_ITEM" are not mutually convertible in a Unicode program. Используйте cl_abap_container_utilities=>fill_container_c по аналогии с How to use CL_ABAP_CONTAINER_UTILITIES csander написал(а): Ошибки нет. Заявка создается. Но значения полей ZRSNUM и ZRSPOS в таблице EBAN отсутствуют. Если использую BAPI_PR_CREATE, то в RETURN следующее: Code: W ME 887 Ошибка при копировании ExtensionIn-данных для расширения CI_EBANDB 000000 CI_EBANDB PRITEM 1 CI_EBANDB содержит поля типа P, F, I. Нужно создать внедрение для BADI ME_BAPI_PR_CUST и в методе MAP2I_EXTENSIONIN переложить данные из IM_CONTAINER в CH_STRUC используя cl_abap_container_utilities=>read_container_c по аналогии с Transfer customer fields type P into Purchase Contract |
Автор: | PK [ Пн, фев 28 2011, 16:20 ] |
Заголовок сообщения: | Re: Re: |
Alex80 написал: CI_EBANDB содержит поля типа P, F, I. Нужно создать внедрение для BADI ME_BAPI_PR_CUST и в методе MAP2I_EXTENSIONIN переложить данные из IM_CONTAINER в CH_STRUC используя cl_abap_container_utilities=>read_container_c по аналогии с Transfer customer fields type P into Purchase Contract Когда подобная ситуация возникла с BAPI для изменения СПП-Элемента, то саповская нота вещала, что требуется создать свою include структуру с полями соответствующей длины и грубо вставить её в BAPI_TE_WBS_ELEMENT вместо CI_PRPS. Правда тогда ещё был маленький ньюанс, BAPI при запуске не ругалась ошибкой, а насколько я помню валилась в дамп. |
Автор: | aivengo [ Вт, мар 08 2011, 21:37 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
Подскажите пожалуйста что не так имею: Вызов бапи Code: data T_EXTENSIONIN type BAPIPAREX OCCURS 0 WITH HEADER LINE. data ls_extensionin TYPE bapiparex. data e_item TYPE BAPI_TE_MEREQITEM. loop at P_GT_EBAN. CLEAR: T_EXTENSIONIN. " доп поля CLEAR: e_item. MOVE P_GT_EBAN-BNFPO TO e_item-preq_item. MOVE 'X' TO e_item-ZZPPMCR. MOVE P_GT_EBAN-ZZPPMUP TO e_item-ZZPPMUP. MOVE P_GT_EBAN-ZZPPMUPDT TO e_item-ZZPPMUPDT. ......................... ls_EXTENSIONIN-structure = 'BAPI_TE_MEREQITEM'. CALL METHOD cl_abap_container_utilities=>fill_container_c EXPORTING im_value = e_item IMPORTING ex_container = ls_EXTENSIONIN+30. append ls_EXTENSIONIN to T_EXTENSIONIN. endloop. CALL FUNCTION 'BAPI_PR_CHANGE' EXPORTING NUMBER = P_GT_EBAN_OTMDB-BANFN TABLES RETURN = T_RETURN PRITEM = T_PRITEM PRITEMX = T_PRITEMX EXTENSIONIN = T_EXTENSIONIN. расширение бади как описывали выше Code: method IF_EX_ME_BAPI_PR_CREATE_02~MAP2I_EXTENSIONIN. data ls_eban TYPE BAPI_TE_MEREQITEM. CASE im_name. WHEN 'CI_EBANDB'. CALL METHOD cl_abap_container_utilities=>read_container_c EXPORTING im_container = im_container IMPORTING ex_value = ls_eban EXCEPTIONS illegal_parameter_type = 1 OTHERS = 2. MOVE-CORRESPONDING ls_eban TO ch_struc. ENDCASE. endmethod. бади для бапи активировано, вызов успешно происходит но все равно изменение заявки выдает: Инстанцию 10002611 типа объекта PurchaseRequisition изменить не удалось. Ошибка при копировании ExtensionIn-данных для расширения CI_EBANDB В чем проблема? |
Автор: | Besa [ Ср, мар 09 2011, 06:58 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
BAPI_TE_MEREQITEMX разве не надо заполнять? |
Автор: | aivengo [ Ср, мар 09 2011, 10:15 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
Besa написал: BAPI_TE_MEREQITEMX разве не надо заполнять? видимо не надо так как данной таблицы нету в параметрах вызова БАПИ может как то надо поиграться с параметрами БАПИ? EXTENSIONIN LIKE BAPIPAREX EXTENSIONOUT LIKE BAPIPAREX может вызов ФМ не так организовал? |
Автор: | Besa [ Ср, мар 09 2011, 10:38 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
В документации написано Цитата: To allow transfer of the data from the structure BAPI_TE_MEREQ, it is necessary to populate the associated X data structure. The data is transferred only if an X has been set for the relevant data field in the X data structure. http://forums.sdn.sap.com/thread.jspa?threadID=746889&tstart=0 |
Автор: | aivengo [ Ср, мар 09 2011, 10:51 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
Besa написал: В документации написано Цитата: To allow transfer of the data from the structure BAPI_TE_MEREQ, it is necessary to populate the associated X data structure. The data is transferred only if an X has been set for the relevant data field in the X data structure. http://forums.sdn.sap.com/thread.jspa?threadID=746889&tstart=0 ага спасибо понял ошибку буду структурку BAPI_TE_MEREQX тоже заполнять в EXTANTIONIN хотя бапи по созданию заявки нормально и без BAPI_TE_MEREQX проходила |
Автор: | csander [ Пт, мар 11 2011, 08:56 ] |
Заголовок сообщения: | Re: Есть ли возможность расширения BAPI? |
Заполняю EXTENSIONIN след. образом : Code: ... DATA: EX_VALUE TYPE ME_MAX_CONTAINER, EXTENSIONIN TYPE TABLE OF BAPIPAREX, EXTENSION_STR LIKE LINE OF EXTENSIONIN, E_ITEM TYPE BAPI_TE_MEREQITEM, E_ITEMX TYPE BAPI_TE_MEREQITEMX .... CLEAR E_ITEM. CLEAR EX_VALUE. CLEAR EXTENSION_STR. E_ITEM-PREQ_ITEM = 1. E_ITEM-ZRSNUM = IS_RESBD_NEW-RSNUM. E_ITEM-ZRSPOS = IS_RESBD_NEW-RSPOS. E_ITEM-ZPLAN_NOM = 1. E_ITEM-ZZSTATYA = 'ddd'. EXTENSION_STR-STRUCTURE = 'BAPI_TE_MEREQITEM'. CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C EXPORTING IM_VALUE = E_ITEM IMPORTING EX_CONTAINER = EX_VALUE EXCEPTIONS ILLEGAL_PARAMETER_TYPE = 1 OTHERS = 2. * EXTENSION_STR-VALUEPART1 = EX_VALUE. EXTENSION_STR+30 = EX_VALUE. APPEND EXTENSION_STR TO EXTENSIONIN. CLEAR E_ITEMX. CLEAR EX_VALUE. CLEAR EXTENSION_STR. E_ITEMX-PREQ_ITEM = 1. E_ITEMX-ZRSNUM = 'X'. E_ITEMX-ZRSPOS = 'X'. E_ITEMX-ZPLAN_NOM = 'X'. E_ITEMX-ZZSTATYA = 'X'. EXTENSION_STR-STRUCTURE = 'BAPI_TE_MEREQITEMX'. CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C EXPORTING IM_VALUE = E_ITEMX IMPORTING EX_CONTAINER = EX_VALUE EXCEPTIONS ILLEGAL_PARAMETER_TYPE = 1 OTHERS = 2. * EXTENSION_STR-VALUEPART1 = EX_VALUE. EXTENSION_STR+30 = EX_VALUE. APPEND EXTENSION_STR TO EXTENSIONIN. ... CALL FUNCTION 'BAPI_PR_CREATE' EXPORTING PRHEADER = GS_PRHEADER PRHEADERX = GS_PRHEADERX TESTRUN = '' TABLES RETURN = GT_MESSAGE PRITEM = GT_PRITEM[] PRITEMX = GT_PRITEMX[] PRITEMEXP = GT_PRITEMEXP[] * PRACCOUNT = GT_ACCOUNT[] * PRACCOUNTX = GT_ACCOUNTX[] EXTENSIONIN = EXTENSIONIN[]. Но поле ZZSTATYA не проходит, а остальные три поля проходят в таблицу. Подскажите, в чем может быть проблема? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |