7.4 Read on Property URL
SData supports read operations on property URLs. For example, the following read will return the contact of a sales order resource:
GET /sdata/myApp/myContract/-/salesOrders('43660')/contact
This read returns the following response:
200 OK
Content-Type: application/atom+xml; type=entry
ETag: gJaGtgHyuAwW6jMI4i0njA
<entry xmlns:sdata="http://schemas.sage.com/sdata/2008/1"
xmlns:http="http://schemas.sage.com/sdata/http/2008/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.w3.org/2005/Atom">
<id>http://www.example.com/sdata/myApp/myContract/-/contact('216')</id>
<title>Contact 216</title>
<updated>2008-03-31T13:46:45Z</updated>
<link rel="self" type="application/atom+xml; type=entry" title="Refresh"
href="http://www.example.com/sdata/myApp/myContract/-/contact('216')" />
<link rel="edit" type="application/atom+xml; type=entry" title="Edit"
href="http://www.example.com/sdata/myApp/myContract/-/contact('216')" />
<link rel="http://schemas.sage.com/sdata/link-relations/schema"
type="application/xml" title="Schema"
href="http://www.example.com/sdata/myApp/myContract/-/contacts/$schema?version=5" />
<link rel="http://schemas.sage.com/sdata/link-relations/template"
type="application/atom+xml; type=entry" title="Template"
href="http://www.example.com/sdata/myApp/myContract/-/contacts/$template" />
<link rel="http://schemas.sage.com/sdata/link-relations/post"
type="application/atom+xml; type=entry" title="Post"
href="http://www.example.com/sdata/myApp/myContract/-/contacts" />
<link rel="http://schemas.sage.com/sdata/link-relations/service"
type="application/atom+xml; type=feed" title="Service"
href="http://www.example.com/sdata/myApp/myContract/-/contacts/$service" />
<category scheme="http://schemas.sage.com/sdata/categories"
term="resource" label="Resource"/>
<content>John Smith</content>
<sdata:payload>
<contact xmlns="http://schemas.sage.com/myContract"
sdata:url="http://www.example.com/sdata/myApp/myContract/-/contacts('216')"
sdata:key="216"
sdata:uuid="4AB7DA77-C841-4bef-955A-08D661D86430"
sdata:lookup="http://www.example.com/sdata/myApp/myContract/-/contacts">
<firstName>John</firstName>
<lastName>Doe</lastName>
<email>john.doe@acme.com</email>
</contact>
</sdata:payload>
<http:etag>gJaGtgHyuAwW6jMI4i0njA==</http:etag>
</entry>
This feature is restricted to properties that represent relationships (properties that carry an sme:relationship attribute in the schema).
Relationship properties that support this feature MUST be flagged with canGet=”true” in the schema.
SData uses the sme:isCollection attribute of the property to decide whether a GET operations on a property URL is a query that returns a feed or a read that returns a single entry. In the example, the contact property has sme:isCollection set to false and the GET operation returns an entry. In the Queries on Property URLs example, the orderLines property sme:isCollection is set to true and the GET operation returns a feed.
The fact that this read is performed on a property URL (salesOrders(‘43660’)/contact) rather than a resource URL (contacts(‘216’)) does not make any difference. All the mechanisms described in this section (caching, payload control) also apply to property URLs.
As contacts are exposed as a discrete resource kind, the id of the returned entry is its primary id contacts(‘216’), not the hierarchical URL that was submitted (salesOrders(‘43660’)/contact). This set up is recommended when the related resources are exposed as a separate resource kind and have such a primary URL. The other form (hierarchical URL) is allowed when the related resources don’t have a primary URL (when their resource kind is flagged as sme:canGet=”false”).
SData providers SHOULD support read operations on property URLs. They MUST support them on all the properties that are flagged with sme:canGet="true" and sme:isCollection="false" in the schema.


