cancel
Showing results for 
Search instead for 
Did you mean: 

RAP: Creating a child entity with 'create by association' for an existing root entity fails

kheba
Discoverer
0 Kudos
3,105

Hello dear SAP community!

I would like to create an action in my RAP model that creates a child entity with the keys plant, material number and workcenter for an existing root with the keys plant and material number. The work centre is specified by the user in a dialogue window. The action is located on the object page of the root node.

If I click on the action and enter a work centre, I do not encounter an error but end up with an empty object page. A table entry with the new child is also created, but as soon as I click on the entry in the table in the app, the message 'The requested data was not found' is displayed.

Below are the corresponding screenshots of the code. Thanks in advance 🥳


Muthu_raja
Active Participant
0 Kudos

Hello Kim,

why action specifically used here ?

I guess we can use CBA method. Have you tried ?

kheba
Discoverer
0 Kudos

Hey,

the action will be expanded later with additional functionalities. The crucial point is that creating a child entity with an existing parent, outside the action, did not work with a report either:

SamAriekela
Explorer
0 Kudos
Hi Kheba, Were you able to solve this? Thanks!
patrick_winkler
Product and Topic Expert
Product and Topic Expert
0 Kudos
I would recommend to define the action as factory action.
SamAriekela
Explorer
0 Kudos

Thanks Patrick, I am trying to add this factory function to a child node. Will it be possible to get the parents keys in this function? Similar question is asked here:

https://community.sap.com/t5/technology-q-a/static-factory-action-for-child-nodes-no-access-to-paren...

View Entire Topic
patrick_winkler
Product and Topic Expert
Product and Topic Expert

@DanielSchneider 

To add an action to the object page header of entity A to create a child entity B, add the following to the behavior definition of entity A.

 

  factory action CreateChild parameter ZD_CreateChildP [1..*]  { default function GetDefaultsForCreateChild ; }
  side effects { action CreateChild affects $self; }

 

To add the action to the object page use the following annotation for entity A:

 

  @UI.identification: [ {
    position: 1 
  },{
    type: #FOR_ACTION, 
    dataAction: 'CreateChild', 
    label: 'Create Child'
  } ]

 

Example action implementation:

 

  METHOD CreateChild.
    MODIFY ENTITY IN LOCAL MODE ZI_Cubco4
      CREATE BY \_Cubco4Child
      AUTO FILL CID
      FIELDS ( ParentId ChildId ) WITH VALUE #( FOR key IN keys (
        %is_draft = if_abap_behv=>mk-on
        id = key-Id
        %target = VALUE #(
         ( %is_draft = if_abap_behv=>mk-on
           ParentId = key-Id
           ChildId = key-%param-Id )
          ) ) )
      REPORTED reported FAILED failed MAPPED mapped.
  ENDMETHOD.

 

Defaulting: https://community.sap.com/t5/technology-blogs-by-members/abap-rap-defaulting-action-parameters-with-...

DanielSchneider
Explorer
0 Kudos

Hi Patrick,

wow, thanks for the super fast response and for the provided snippets!!

It works like a charm. Those were the issues why it didn't work for me:

  • The EML create statement was missing the "auto fill cid" part
  • I had [1] instead of [1..*] in the action definition
    • When creating an associated entity the cardinality of [1] does work (the entity gets created), but after creation the generated app tries to navigate to the newly created root instance (which does not exist, since we did not create any)
    • Here a screenshot of the ABAP doc, maybe the part with "factory action always need to have a cardinality of [1]" could get adjusted

DanielSchneider_0-1726648706172.png

 

Thanks again for your awesome support and have a nice day!
Daniel

patrick_winkler
Product and Topic Expert
Product and Topic Expert
0 Kudos
@DanielSchneider you should be able to use cardinality [1] when you enable inline creation mode for the child table https://sapui5.hana.ondemand.com/sdk/#/topic/cfb04f0c58e7409992feb4c91aa9410b