olingo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Geert Graat (JIRA)" <j...@apache.org>
Subject [jira] [Created] (OLINGO-1144) How to use the FilterFactory to create a valid URI for filtering on a ComplexValue in a collection?
Date Tue, 04 Jul 2017 08:53:00 GMT
Geert Graat created OLINGO-1144:
-----------------------------------

             Summary: How to use the FilterFactory to create a valid URI for filtering on
a ComplexValue in a collection?
                 Key: OLINGO-1144
                 URL: https://issues.apache.org/jira/browse/OLINGO-1144
             Project: Olingo
          Issue Type: Question
          Components: odata4-client
    Affects Versions: (Java) V4 4.3.0
            Reporter: Geert Graat


Hi,

We use the Olingo client library to call an OData service (which also uses the Olingo library).
We are implementing filtering using the {{FilterFactory}}. The problem we are facing is how
we can build a valid URIFilter to filter on the values of a ComplexType that is inside a collection.

Below is a simplified version of or metadata document:

{code}
<?xml version='1.0' encoding='UTF-8'?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
	<edmx:DataServices>
		<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="example">
			<EntityType Name="Entity">
				<Property Name="values" Type="Collection(example.Value)"/>
			</EntityType>
			<ComplexType Name="Value">
				<Property Name="name" Type="Edm.String"/>
				<Property Name="type" Type="Edm.String"/>
			</ComplexType>
			<EntityContainer Name="Container">
				<EntitySet Name="Entities" EntityType="example.Entity"/>
			</EntityContainer>
		</Schema>
	</edmx:DataServices>
</edmx:Edmx>
{code}

What we want is for instance to filter on an Entity that has a Value with name 'example'.
For this we need to construct the following URI:

{code}$filter=values/any(v:v/name eq 'example'){code}

We need to use the {{any}} function because as you can see from the metadata model an {{Entity}}
can contain multiple {{Value}} complex types in the collection property {{values}}.

The problem is the definition of the lambda variable ({{v}} in the example above). If we use
the {{FilterFactory}}, we can get a {{FilterArgFactory}} that has an {{any}} function. This
creates a {{FilterLambda}} with the following arguments:
* collection: the property that contains the collection, in our case {{values}}
* operator: the operator, in our case {{any}}
* expression: the expression to filter on our collection, in our case {{v/name eq 'example'}}

So where does the declaration of the lambda variable go? We have searched the entire library,
but cannot find it. Can you please help with an example?



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message