on 2024 Feb 08 5:37 PM
Hi, I'm implementing a RAP-based Fiori App, similar to the Travel app as seen in many RAP tutorials.
Currently I'm facing an issue implementing the action to Copy an instance to a new one with draft enabled. When I click the action to copy, the backend method creates the new instance in draft mode correctly, however when the Object Page of the new instance opens it shows a "The requested data was not found." message and an empty screen (see attached image - "Not Found").
I noticed in the Object Page URL that the key parameters are emtpy. If I manually fill them in the URL the object page then opens correctly (see attached image - "URL"). In my case, the missing values are in field Source and Docnr.
The implementation is similar to the one seen in this tutorial: https://developers.sap.com/tutorials/abap-environment-rap100-factory-action.html I'm using ODataV2 in SAP S/4HANA 2022 on-premise.
Summary of implementation:
- BDEF action: factory action copyDocument [1];
- BDEF projection: use action copyDocument;
- Behavior Impl: exactly like the tutorial - obviously adapted to my tables and fields. and with an added child table - see snippet at the end of the question
One final note: before using factory action, I was using a regular instance action with a result $self return and I was facing the same exact issue, so I was able to create the instance in draft but the ObjectPage URL always missed the key values in the parameters.
Thank you for your help!
Copy Method Implementation:
METHOD copyDocument.
DATA:
documents TYPE TABLE FOR CREATE ZI_HEADER\\Header,
positions TYPE TABLE FOR CREATE ZI_HEADER\\Header\_Positions.
READ ENTITIES OF ZI_HEADER IN LOCAL MODE
ENTITY Header
ALL FIELDS WITH CORRESPONDING #( keys )
RESULT DATA(document_read_result)
FAILED failed
REPORTED reported.
READ ENTITIES OF ZI_HEADER IN LOCAL MODE
ENTITY Header BY \_Positions
ALL FIELDS WITH CORRESPONDING #( document_read_result )
RESULT DATA(item_read_result).
LOOP AT document_read_result ASSIGNING FIELD-SYMBOL(<previous_doc>).
DATA(new_docnr) = getNextDocnr( ).
DATA(source) = getSource( ).
APPEND VALUE #( %cid = source && new_docnr
%is_draft = '01'
%data = CORRESPONDING #( <previous_doc> EXCEPT Source Docnr ) ) TO documents ASSIGNING FIELD-SYMBOL(<new_doc>).
APPEND VALUE #( %cid_ref = source && new_docnr
%is_draft = '01'
Source = source Docnr = new_docnr ) TO positions ASSIGNING FIELD-SYMBOL(<new_positions>).
<new_doc>-Source = source.
<new_doc>-Docnr = new_docnr.
<new_doc>-Status = order_status-new.
GET TIME STAMP FIELD <new_doc>-Erdat.
<new_doc>-Ernam = sy-uname.
DATA(item_position) = 10.
LOOP AT item_read_result ASSIGNING FIELD-SYMBOL(<previous_position>) USING KEY entity
WHERE Source EQ <previous_doc>-Source AND Docnr EQ <previous_doc>-Docnr.
APPEND VALUE #( %cid = source && new_docnr && item_position
%is_draft = '01'
%data = CORRESPONDING #( <previous_position> EXCEPT Source Docnr ) ) TO <new_positions>-%target ASSIGNING FIELD-SYMBOL(<new_position>).
<new_position>-Source = <new_doc>-Source.
<new_position>-Docnr = <new_doc>-Docnr.
<new_position>-ItemPosition = item_position.
item_position += 10.
ENDLOOP.
ENDLOOP.
MODIFY ENTITIES OF ZI_HEADER IN LOCAL MODE
ENTITY Header
CREATE FIELDS ( Source Docnr Status *etc* )
WITH documents
CREATE BY \_Positions FIELDS ( Source Docnr ItemPosition *etc* )
WITH positions
MAPPED DATA(mapped_create)
FAILED DATA(failed_create)
REPORTED DATA(reported_create).
* READ ENTITIES OF ZI_HEADER IN LOCAL MODE
* ENTITY Header
* ALL FIELDS WITH CORRESPONDING #( mapped_create-header )
* RESULT DATA(read_created_result).
mapped-header = mapped_create-header.
ENDMETHOD.
Request clarification before answering.
Solved.
Issue was with field %cid - I was saving the new instance key in this field, instead of the copied instance key from the importing keys table.
Replaced:
%cid = source && new_docnr
With:
keys[ %tky = <previous_doc>-%tky ]-%cid
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
57 | |
10 | |
9 | |
8 | |
6 | |
6 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.