on 2023 Dec 04 9:13 AM
Context:
I am building a CAP application to manage Ressource Rentals. I also created an annotation-based fiori app to go along with it. These are the entities:
entity Resources : managed, cuid {
name : String;
description : String;
type : Association to ResourceTypes;
rentals : Association to many Rentals
on rentals.resource = $self;
}
entity Rentals : managed, cuid {
resource : Association to Resources;
start : DateTime;
end : DateTime;
}
And this is the corresponding service:
service ResourceService {
entity Resources as projection on my.Resources;
annotate Resources with @odata.draft.enabled;
entity Rentals as projection on my.Rentals;
annotate Rentals with @odata.draft.enabled;
}
In my Fiori app, i created a list report page and added a table to the ressources.

I linked those to the rentals. This works so far, i can now browse ressources and see their rentals.
Problem:
When i edit a ressource and create a new rental in the rentals table on the object page, i get the following error in CAP:
[cds] - ❗️Uncaught TypeError: Cannot read properties of undefined (reading 'ID')
at UriHelper.buildEntityKeys (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\utils\UriHelper.js:85:22)
at ResponseHeaderSetter.setLocationHeader (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\core\ResponseHeaderSetter.js:102:17)
at SetResponseHeadersCommand.execute (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\SetResponseHeadersCommand.js:66:30)
at CommandExecutor._execute (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\CommandExecutor.js:71:17)
at C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\CommandExecutor.js:81:18
at ConditionalRequestControlCommand.execute (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\ConditionalRequestControlCommand.js:48:5)
at CommandExecutor._execute (C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\CommandExecutor.js:71:17)
at C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\CommandExecutor.js:81:18
at C:\Projects\rentals\node_modules\@sap\cds\libx\_runtime\cds-services\adapter\odata-v4\okra\odata-server\invocation\DispatcherCommand.js:88:11
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
id: '1521876',
level: 'ERROR',
timestamp: 1701680136247
}
There is no custom logic associated with the service. I have tried creating one and calling super.init() in the init() callback, but that did not change the behaviour. I also tried extending the before NEW event of a rental to set the ID, which also did not resolve the issue sadly.
So i just decided to delete my custom service logic to just keep the generic event handlers, which still errors.
I exhausted all ideas me and my colleagues had, so id appreciate help 🙂
Request clarification before answering.
https://cap.cloud.sap/docs/cds/cdl#views-with-inferred-signatures
Could you kindly check this, seems the entity in service layer has no {*} to expose the key property.
Best regards,
Eric
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I mean please check this chapter in cap document https://cap.cloud.sap/docs/cds/cdl#views-with-inferred-signatures .
The key is aspcted by cuid, but this is in db layer, in your service layer, there is no property exposed explicity.
| User | Count |
|---|---|
| 12 | |
| 9 | |
| 7 | |
| 5 | |
| 4 | |
| 3 | |
| 3 | |
| 2 | |
| 2 | |
| 2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.