Skip to content

Commit

Permalink
NonInsertableProperties and NonUpdatableProperties for contained enti…
Browse files Browse the repository at this point in the history
…ties - allowed alternative (#253)

* #247

* Update Org.OData.Capabilities.V1.capabilities.md

* Update Org.OData.Capabilities.V1.capabilities.md

* Rephrased as proposed by TC 2024-05-08

* TC 2024-05-15

* TC 2024-05-15

* TC 2024-05-15

---------

Co-authored-by: D024504 <[email protected]>
  • Loading branch information
ralfhandl and HeikoTheissen authored May 15, 2024
1 parent 9596c6a commit 86c82d9
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions examples/Org.OData.Capabilities.V1.capabilities.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ For the header level, the entity set is annotated directly.
}
```

The item level has no named entity set. It is annotated using `NavigationRestrictions` on header level and `InsertRestrictions` and `UpdateRestrictions` on item level. When a property could be expressed either on the deeper item level or on the higher-up header level, the deeper level is generally preferred: For example, the `NonUpdatableProperties` property in the deeper `UpdateRestrictions` is favored over its commented-out namesake in the higher-up `NavigationRestrictions`, and the commented-out `Updatable` is even invalid, because the instance path to `canUpdate` is collection-valued. But the higher-up `InsertRestrictions/Insertable` and `UpdateRestrictions/FilterSegmentSupported` cannot be avoided, because the instance paths to `canInsertItems` and `canUpdateSubsetOfItems` must be evaluated on header level.
The item level has no named entity set. It is annotated using `NavigationRestrictions` on header level and `InsertRestrictions` and `UpdateRestrictions` on item level. When a property could be expressed either on the deeper item level or on the higher-up header level, the deeper level is generally preferred: For example, annotating the `Headers/Items` target with `UpdateRestrictions/NonUpdatableProperties` is favored over the commented-out annotation `NavigationRestrictions/UpdateRestrictions/NonUpdatableProperties` on the `Headers` target, and the commented-out `Updatable` is even invalid, because the instance path to `canUpdate` is collection-valued. But annotating `NavigationRestrictions/InsertRestrictions/Insertable` and `NavigationRestrictions/UpdateRestrictions/FilterSegmentSupported` on the `Headers` target cannot be avoided, because the instance paths to `canInsertItems` and `canUpdateSubsetOfItems` must be evaluated on header level.

```jsonc
"self.Container/Headers": {
Expand Down Expand Up @@ -49,7 +49,7 @@ The item level has no named entity set. It is annotated using `NavigationRestric
}
```

However, if insertability was static, the value would be a boolean literal and no path expressions would be required. In that case the deeper `InsertRestrictions/Insertable` term would be favored over the higher-up one.
However, if insertability was static, the value would be a boolean literal and no path expressions would be required. In that case directly annotating the `Headers/Items` target with `InsertRestrictions/Insertable` would be favored over annotating the `Headers` target with `NavigationRestrictions/InsertRestrictions/Insertable`.

```jsonc
"self.Container/Headers/Items": {
Expand All @@ -60,7 +60,18 @@ However, if insertability was static, the value would be a boolean literal and n
}
```

The subitem level is annotated using `NavigationRestrictions` on item level and `InsertRestrictions` and `UpdateRestrictions` on subitem level.
If limitations, such as tool restrictions, prevent annotation targets with navigation properties in them, like the `Headers/Items` target, then non-insertable and non-updatable properties on item and subitem level would be annotated on the `Headers` target:

```jsonc
"self.Container/Headers": {
"@Capabilities.InsertRestrictions": {
"NonInsertableProperties": ["uuid", "Items/uuid", "Items/Subitems/uuid"],
"NonUpdatableProperties": ["uuid", "Items/uuid", "Items/Subitems/uuid"]
}
}
```

If there are no such limitations, the subitem level is annotated using `NavigationRestrictions` on item level and `InsertRestrictions` and `UpdateRestrictions` on subitem level.

```jsonc
"self.Container/Headers/Items": {
Expand Down

0 comments on commit 86c82d9

Please sign in to comment.