Sapforum.Biz
Логистика => Техническое обслуживание и ремонт оборудования (PM) => Тема начата: themax от Сентябрь 18, 2017, 09:25:44 am
-
Доброго времени суток уважаемые консультанты PM.
Хочу сделать пакетник для создание множества ЕО. Нашёл вроде бы нужное БАПИ Bapi_eqmt_create, но вот вопрос: можно ли заполнить с помощью этого BAPI z-овские поля, которые я добавил с помощью user-exit в транзакцию IE01. Может кто делал?
-
Доброго времени суток уважаемые консультанты PM.
Хочу сделать пакетник для создание множества ЕО. Нашёл вроде бы нужное БАПИ Bapi_eqmt_create, но вот вопрос: можно ли заполнить с помощью этого BAPI z-овские поля, которые я добавил с помощью user-exit в транзакцию IE01. Может кто делал?
Этой функцией пользоваться нельзя, так как у тебя вряд ли система младше 4.6. А с 4.6с надо использовать модуль BAPI_EQUI_CREATE, примеры есть на форуме, по поводу своих Z-полей, то исходя из того что в параметрах есть структура
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut
то можно передать свои поля и корректно их обновить. Для этого нужно корректно реализовать точку расширения ES_EAM_ITOB_BAPI_CUST_FIELDS, в которой нужно переложить поля из структуры EXTENSIONIN в структуру таблицы EQUI. Примеры как работать с параметром EXTENSIONIN, тоже есть на форуме, это сейчас основной метод передачи пользовательских параметров в BAPI функции.
-
Этой функцией пользоваться нельзя, так как у тебя вряд ли система младше 4.6. А с 4.6с надо использовать модуль BAPI_EQUI_CREATE, примеры есть на форуме, по поводу своих Z-полей, то исходя из того что в параметрах есть структура
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut
то можно передать свои поля и корректно их обновить. Для этого нужно корректно реализовать точку расширения ES_EAM_ITOB_BAPI_CUST_FIELDS, в которой нужно переложить поля из структуры EXTENSIONIN в структуру таблицы EQUI. Примеры как работать с параметром EXTENSIONIN, тоже есть на форуме, это сейчас основной метод передачи пользовательских параметров в BAPI функции.
Добрый день Олег.
Поздновато пишу, но только начал реализовывать. В общем пытаюсь сделать пакетник для изменения с помощью Bapi BAPI_EQUI_CHANGE, все поля изменять удаётся кроме z-овских, сделал что то вроде: data:
extensionin type table of bapiparex with header line,
e_item type itobapi_create_eq.
e_item-equnr = wa-equnr.
e_item-zzito_loc = wa-zzito_loc.
extensionin-structure = 'ITOBAPI_CREATE_EQ'.
extensionin-valuepart1 = e_item.
append extensionin.
call function 'BAPI_EQUI_CHANGE'
exporting
equipment = bapi_itob_parms-equipment
data_general = bapi_itob
data_generalx = bapi_itobx
data_specific = zbapi_itob_eq_only
data_specificx = zbapi_itob_eq_onlyx
importing
data_general_exp = bapi_itob
* DATA_SPECIFIC_EXP =
* DATA_FLEET_EXP =
return = ps_return
tables
extensionin = extensionin[].
* EXTENSIONOUT =
if ps_return-type = space.
commit work and wait.
Не пойму, что я делаю не так. Може ли это не работать, потому что z-овские поля были добавлены мной с помощью user-exit ITOB0001, а не с помощью ES_EAM_ITOB_BAPI_CUST_FIELDS ?
-
Свои поля передаете в структуре:
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut
Дальше реализуете BADI
badi_eam_itob_bapi_cust_fields и метод extensionin_equi_change
Где заполняете данные из структуры/таблицы EXTENSIONIN в данные cs_object и cs_fleet.
-
Свои поля передаете в структуре:
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut
Дальше реализуете BADI
badi_eam_itob_bapi_cust_fields и метод extensionin_equi_change
Где заполняете данные из структуры/таблицы EXTENSIONIN в данные cs_object и cs_fleet.
Не совсем понятно как в эту структуру BAPIPAREX передавать значения полей в программе, т.к. я использую BAPi BAPI_EQUI_CHANGE, то и структуру пытаюсь использовать itobapi_modify_eq, но при попытке передать туда значения выходит ошибка, что "EXTENSIONIN-VALUEPART1" и "E_ITEM" в программе уникода не могут быть преобразованы друг в друга program. data:
extensionin type table of bapiparex with header line,
e_item type itobapi_modify_eq.
e_item-zzito_loc = wa-zzito_loc.
extensionin-structure = 'ITOBAPI_MODIFY_EQ'.
extensionin-valuepart1 = e_item.
append extensionin.
Как её заполнять не понятно.
-
В общем сделал вот так
data t_extensionin type bapiparex occurs 0 with header line.
data ls_extensionin type bapiparex.
data e_item type itobapi_modify_eq.
clear: t_extensionin.
" доп поля
clear: e_item.
e_item-zzito_loc = wa-zzito_loc.
ls_extensionin-structure = 'ITOBAPI_MODIFY_EQ'.
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.
t_extensionin = ls_extensionin.
call function 'BAPI_EQUI_CHANGE'
exporting
equipment = bapi_itob_parms-equipment
data_general = bapi_itob
data_generalx = bapi_itobx
data_specific = zbapi_itob_eq_only
data_specificx = zbapi_itob_eq_onlyx
importing
data_general_exp = bapi_itob
* DATA_SPECIFIC_EXP =
* DATA_FLEET_EXP =
return = ps_return
tables
extensionin = t_extensionin[].
* EXTENSIONOUT =
if ps_return-type = space.
commit work and wait.
else.
rollback work.
endif.
В отладчике видно, что в структуре t_extensionin есть заполненное значение. Если я правильно понял, то дальше надо создать расширение для BADi badi_eam_itob_bapi_cust_fields, а вот как именно передать значение t_extensionin в cs_object чот мне не понятно?
-
В общем если кому надо будет создать пакетник через BAPI на изменение основных данных ЕО, в том числе и z-овских полей вот рабочая реализация через BAPI_EQUI_CHANGE
data t_extensionin type bapiparex occurs 0 with header line.
data ls_extensionin type bapiparex.
data: e_item type itobapi_modify_eq
, ls_item type ci_equi
.
clear: t_extensionin.
" доп поля
clear: e_item.
ls_item-zzito_loc = wa-zzito_loc.
ls_extensionin-structure = 'CI_EQUI'.
call method cl_abap_container_utilities=>fill_container_c
exporting
im_value = ls_item
importing
ex_container = ls_extensionin+30.
t_extensionin = ls_extensionin.
append t_extensionin.
bapi_itob_parms-equipment = wa-equipment2.
if wa-objecttype is not initial.
bapi_itob-objecttype = wa-objecttype.
bapi_itobx-objecttype = 'X'.
else.
endif.
if wa-inventory is not initial.
bapi_itob-inventory = wa-inventory.
bapi_itobx-inventory = 'X'.
else.
endif.
if wa-manfacture is not initial.
bapi_itob-manfacture = wa-manfacture.
bapi_itobx-manfacture = 'X'.
else.
endif.
call function 'BAPI_EQUI_CHANGE'
exporting
equipment = bapi_itob_parms-equipment
data_general = bapi_itob
data_generalx = bapi_itobx
data_specific = zbapi_itob_eq_only
data_specificx = zbapi_itob_eq_onlyx
importing
data_general_exp = bapi_itob
* DATA_SPECIFIC_EXP =
* DATA_FLEET_EXP =
return = ps_return
tables
extensionin = t_extensionin[].
* EXTENSIONOUT =
if ps_return-type = space.
commit work and wait.
if sy-subrc = 0.
* perform status.
if wa-status2 = icon_checked or wa-status2 is initial.
wa-status2 = icon_checked.
endif.
else.
* Ошибка выполнения COMMIT WORK!!!
ps_return-type = 'E'.
wa-status2 = icon_failure.
endif.
else.
wa-status2 = icon_failure.
rollback work.
endif.
Далее идём в BADi и создаём там реализацию, т.е. Enhancement Implementation типа ZEI_EAMS_ITOB_BAPI_CUST_FIELDS с классом Z_PM_EO и в методе, как и рекомендовал Олег, EXTENSIONIN_EQUI_CHANGE пишем кодdata: ls_extensionin type bapiparex
, ls_item type ci_equi
.
loop at it_extensionin into ls_extensionin.
call method cl_abap_container_utilities=>read_container_c
exporting
im_container = ls_extensionin+30
importing
ex_value = ls_item.
endloop.
cs_object-zzito_loc = ls_item-zzito_loc.
Вроде бы работает и z-овские поля изменяются.
-
Как работать с таблицей extensionin[] можно посмотреть темы:
http://sapforum.biz/index.php?topic=2521.0 (собственно пример реализации)
http://sapforum.biz/index.php?topic=2865.0 (работы с контейнером)