The GraphQL querying service supports the use of Inline Fragments in querying items in the Content schema. This functionality is only supported for Content. This not only allows getting common fields of Content, but also allows getting specific fields of different content types based on Content in a single query.
Example:
Here the Inline Fragments are used in the query with Content. The common fields are in this example __typename and Name. We can get MainContentArea of specific schema type StartPage. For StandardPage schema, we project ContentLink and Language.
{
Content(limit: 100) {
items {
__typename
Name
... on StartPage {
MainContentArea {
DisplayOption
}
}
...testFragment
}
}
}
fragment testFragment on StandardPage {
ContentLink {
Id
}
Language {
Link
DisplayName
Name
}
}
And this query has this response:
{
"data": {
"Content": {
"items": [
{
"__typename": "StartPage",
"Name": "Start",
"MainContentArea": [
{
"DisplayOption": ""
},
{
"DisplayOption": "narrow"
},
{
"DisplayOption": "narrow"
},
{
"DisplayOption": "narrow"
}
]
},
{
"__typename": "StandardPage",
"Name": "Reporting Made Simple",
"ContentLink": {
"Id": 13
},
"Language": {
"Link": "http://localhost:63574/en/about-us/news-events/events/reporting-made-simple/",
"DisplayName": "English",
"Name": "en"
}
},
{
"__typename": "StandardPage",
"Name": "Collaboration Made Simple",
"ContentLink": {
"Id": 14
},
"Language": {
"Link": "http://localhost:63574/en/about-us/news-events/events/collaboration-made-simple/",
"DisplayName": "English",
"Name": "en"
}
},
{
"__typename": "StandardPage",
"Name": "Risk Management",
"ContentLink": {
"Id": 15
},
"Language": {
"Link": "http://localhost:63574/en/about-us/news-events/events/risk-management-in-complex-projects/",
"DisplayName": "English",
"Name": "en"
}
},
{
"__typename": "ArticlePage",
"Name": "Alloy Saves Bears"
}
]
}
},
"extensions": {
"correlationId": "e23a2494-1db7-4799-a3ad-e6863f635d89"
}
}
Another example where we use Inline Fragments in combination with the special _children field to get the child items of type Content belonging to StandardPage:
{
Content {
items {
__typename
Name
... on StartPage {
_children {
Content {
items {
__typename
RouteSegment
Url
}
}
}
}
...testFragment
}
}
}
fragment testFragment on StandardPage {
_children {
Content {
items {
__typename
Name
Changed
Created
}
}
}
}
Last updated: Apr 08, 2022