You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Slavomír Bavala (Jira)" <ji...@apache.org> on 2020/01/15 13:24:00 UTC

[jira] [Commented] (OLINGO-1420) Unable to perform deep insert using Olingo V2 when navigation properties relationship is 1:N

    [ https://issues.apache.org/jira/browse/OLINGO-1420?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17015952#comment-17015952 ] 

Slavomír Bavala commented on OLINGO-1420:
-----------------------------------------

It turned out we were not using the callback functionality as intended, so I am closing the issue.

For anyone interested what we did wrong:

We were sending the navigation property's data to our method which registered nested callbacks, instead we should use the data which comes with the context parameter. The reason is that the context *changes* for every item in the feed and so does the data in it, while on the other hand the data we sent into our method was simply static for the entire feed.

> Unable to perform deep insert using Olingo V2 when navigation properties relationship is 1:N
> --------------------------------------------------------------------------------------------
>
>                 Key: OLINGO-1420
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1420
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata2-core
>    Affects Versions: V2 2.0.11
>            Reporter: Slavomír Bavala
>            Priority: Major
>
> Use case: perform deep insert using Olingo V2
> As described in https://issues.apache.org/jira/browse/OLINGO-1401 Olingo will not serialize navigation properties and their contents into the request if _contentOnly_ flag is set to *true*.
> We set it to *false* but that adds metadata to the request payload as a result. In case of an update, where key properties are not present in the payload but in the URL, the metadata generation will fail (we wrote a hack to overcome this).
> The biggest problem we found is the serialization of +_childNavigationProperty_+ properties described by 1:N relationship, see the following example:
> {code:java}
> {
>   "rootLevelProperty": "",
>   "rootLevelNavigationProperty": [
>     {
>       "child": "1",
>       "childNavigationProperty": [
>          {
>            "grandChild": "X"
>          }
>        ]
>     },
>     {
>       "child": "2",
>       "childNavigationProperty": [ 
>         { 
>           "grandChild": "Y" 
>         }
>       ]
>     }
>   }
> }{code}
> To serialize the navigation properties we need to specify the _customExpanedLinks_ for every nested level. We also need to specify _callbacks_ for every navigation property (this means also defining nested callbacks for nested navigation properties).
> When navigation property is described by 1:N relationship, we need to register a _OnWriteFeedContent_ callback. This callback however doesn't allow us to specify nested callbacks for every item in the list, we can only register a single callback for the +*entire feed*+. This means we are not able to serialize _grandChild_ property correctly and we have to choose either "X" or "Y" as a value for both items.
> Our code looks like this:
> {code:java}
> writeEntry(APPLICATION_JSON, rootEntitySet, dataMap,
>         serviceRoot(new URI(entitySetName))
>                 .omitJsonWrapper(true)
>                 .contentOnly(update) //true for updates
>                 .expandSelectTree(expandSelectTreeNodeBuilder.build()) //tree of customExpanedLinks so navigation properties are serialized
>                 .callbacks(createCallbacks(navigationPropertyMap, rootEntityType)) // tree of callbacks to provide data for all customExpanedLinks defined above
>                 .build()
> {code}
> How can we perform such deep insert using Olingo?
>  Are we using the library as intended?
>  Does Olingo V2 even supports deep inserts?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)