Osm написал(а):
Коллеги, есть желание создать объект RE-FX например единицу аренды, заполнить в нём некоторые поля и открыть транзакцию создания этого объекта, так, чтобы пользователь сам мог проверить всё и сохранить.
Пробовал создавать через BAPI_RE_RO_CREATE, но в этом случае объект надо обязательно сохранить и уже потом открывать на редактирование, что не подходит.
Можно так:
1. Создать класс ZCL_RECA_BDT_APPL_TOOL_... скопировав его с CL_RECA_BDT_APPL_TOOL или создать с нуля наследовав его от супера CL_RECA_WB_DEFAULT_TOOL
2. В тр. RECAWBREQTOOL добавить операцию, например, NEW_WITH_DATA. В поле "Класс инструмента" указать класс из п.1 ZCL_RECA_BDT_APPL_TOOL_...
3. В методе DO_WB_REQUEST добавить обработку операции NEW_WITH_DATA
Code:
CASE io_request->md_operation.
*<<<<
WHEN 'NEW_WITH_DATA'.
CLEAR lo_busobj.
CALL METHOD io_request->mo_data_container->get
EXPORTING
id_id = 'BUSOBJ'
IMPORTING
ex_data = lo_busobj
EXCEPTIONS
OTHERS = 0.
IF lo_busobj IS NOT BOUND.
RETURN.
ENDIF.
*>>>>
* ----------------------------------------------------------- DISPLAY
WHEN recaw_operation-display.
CALL METHOD io_request->mo_data_container->get
EXPORTING
id_id = recaw_data_id-activity
Code:
* ----------------------------------------------------------- DISPLAY
WHEN recaw_operation-display OR
recaw_operation-edit OR
recaw_operation-new OR
recaw_operation-new_cn OR
recaw_operation-follow_cn OR
recaw_operation-follow_cn_obj OR
recaw_operation-new_dp OR
recaw_operation-new_by_temp OR
'NEW_WITH_DATA' OR
recaw_operation-initial.
* show the tool requests...
CREATE OBJECT lo_bdt_appl_tool. "<-----
CALL FUNCTION 'RECA_BDT_APPL_SHOW_OBJECT'
EXPORTING
io_bdt_appl_tool = lo_bdt_appl_tool "me "<-----
io_busobj = lo_busobj
EXCEPTIONS
error = 1
OTHERS = 2.
4. Создать объект через CF_REBD_RENTAL_OBJECT=>CREATE
Code:
TYPE-POOLS:
reca1.
INCLUDE:
ifrecamsg.
DATA:
ld_wbident TYPE recawbident,
ld_wbobjtype TYPE recawbobjtype VALUE reca1_objtype-rental_object,
lo_rental_object TYPE REF TO if_rebd_rental_object,
lo_request TYPE REF TO cl_reca_wb_request.
CALL METHOD cf_rebd_rental_object=>create
EXPORTING
id_bukrs = '0001'
id_swenr = '1'
id_smenr = '1'
id_rotype = rebd1_rotype-rentalunit
id_snunr = '0001'
if_auth_check = abap_true
RECEIVING
ro_instance = lo_rental_object
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
mac_symsg_send.
ENDIF.
5. Заполнить некоторые нужные вам поля через соответствующие методs SET_... интерфейса IF_REBD_RENTAL_OBJECT
6. Создать WB-request и добавить инстанцию созданного объекта из п.4 в дата контейнер:
Code:
CREATE OBJECT lo_request
EXPORTING
id_wbobjtype = ld_wbobjtype
id_wbident = ld_wbident
id_operation = 'NEW_WITH_DATA'.
lo_request->mo_data_container->add(
id_id = 'BUSOBJ'
ix_data = lo_rental_object
).
7. Запустить request
Code:
* start the RE WB Manager
CALL METHOD cl_reca_wb_manager=>start
EXPORTING
io_wb_request = lo_request
if_show_navigator = abap_true
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
mac_symsg_send.
ENDIF.