Examples of GraphQL requests

October 8, 2024
Note that you need to have the right access and permissions to run these queries.  
These are examples of requests you can do with our GraphQL APIs. For more details and documentation refer to our GraphiQL workspace, which can be accessed with the following link: https://<you-domain-name>/jahia/developerTools/graphql-workspace
Note that you need to have necessary permissions in place to access this resource.

Get values of specific properties for a content

The following query get the values of the following properties for a content of type "highlight": title, description and internalLink.

query highlight {
  jcr {
    nodeByPath(
      path: "/sites/digitall/home/area-main/highlights/our-companies"
    ) {
      title: property(language: "en", name: "jcr:title") {
        value
      },
      description: property(language: "en", name: "description") {
        value
      },
      internalLink: property(language: "en", name: "internalLink") {
        value
      }
    }
  }
}

Get rendered HTML for a content 

The following query fetches the rendered HTML for a content, using the view "imgView".

query highlight {
  jcr {
    nodeByPath(
      path: "/sites/digitall/home/area-main/highlights/our-companies"
    ) {
      renderedContent(view: "imgView",  # Name of the view you're requesting
        contextConfiguration:"module" , # Possible values may include: module, gwt, page
        templateType:"html" # Possible values may include: html, json
        requestAttributes: [{name:"someAttribute", value:"someValue"}] # Any attributes required by request
      ) {
        output
      }
    }
  }
}

Get all properties for a content

query contentProperties {
  jcr {
    nodeByPath(path: "/sites/digitall") {
      properties {
        name
        value
        values
      }
    }
  }
}

 

Listing the sites with the activated / default languages

query sitesLanguages {
  jcr {
    nodesByPath(paths: ["/sites/"]) {
      children {
        nodes {
          displayName
          defaultLanguage: property(name: "j:defaultLanguage") {
            value
          }
          languages: property(name: "j:languages") {
            values
          }
          inactiveLanguages: property(name: "j:inactiveLanguages") {
            values
          }
          inactiveLiveLanguages: property(name: "j:inactiveLiveLanguages") {
            values
          }
        }
      }
    }
  }
}

 

Counting number of page for a site

This is an example on how to achieve that count with a GraphQL query, note that is is more efficient to use a JCR query to get the same result.

query pagesCount {
  jcr {
    nodeByPath(path: "/sites/digitall") {
      descendants(typesFilter: {types: ["jnt:page"]}) {
        pageInfo {
          totalCount
        }
        nodes {
          type: primaryNodeType {
            name
          }
        }
      }
    }
  }
}

 

List the pages of a site and their vanity URLs

query vanityUrls {
  jcr {
    nodeByPath(path: "/sites/digitall") {
      descendants(fieldFilter: {filters: {evaluation: NOT_EMPTY, fieldName: "node.vanityUrls"}}) {
        nodes {
          node: displayableNode {
            name
            vanityUrls {
              url
            }
          }
        }
      }
    }
  }
}

Editing content (mutation example) and get the modified nodes.

mutation mutationExample {
  jcr {
    mutateNode(pathOrId:"/sites/digitall/home/corporate-responsibility") {
      rename(name:"responsibility")
       mutateProperty(name:"j:published"){
         setValue(type:BOOLEAN,value:"false")
      }
    }
    modifiedNodes {
      path
    }
  }
}

Publish a content

mutation publishContent {
  jcr {
    mutateNode(pathOrId:"/sites/digitall/home/about") {
      publish
    }
  }
}

List of contents that are never been published on a site

query neverPublishedContent {
  jcr {
    nodeByPath(path: "/sites/digitall") {
      descendants(fieldFilter: {filters: {evaluation: EMPTY, fieldName:"published.value"}}) {
        nodes {
          nodeToCheck:
            displayName
            primaryNodeType {
              name
            }
            published:
              property(name:"j:published") {
              value
            }
        }
      }
    }
  }
}

Edit values of osgi configuration files (cfg or yaml)

mutation {
  admin {
    jahia {
      configuration(
        pid: "org.jahia.modules.automatedtags.service.impl.AutomatedTagServiceImpl"
      ) {
        accessKey:value(name:"automated-tags.accessKey",value: "xxxxxx" ),
        secretKey:value(name:"automated-tags.secretKey",value: "yyyyyyy" ),
        endpoint:value(name:"automated-tags.endpoint",value: "https://rekognition.eu-central-1.amazonaws.com" ),
        region:value(name:"automated-tags.region",value: "eu-central-1" ),
        tagImageOnUpload:value(name:"automated-tags.tagImageOnUpload",value: "true" )
      }
    }
  }
}

Get paginated list of editorial contents within a page

This implies that the cursor value of an item is: NTE3ZjE1YmMtZTViYS00YzVkLWIxNmUtMDhiMTgzYTkzMTli To get it, execute the query without the after parameter.


query paginatedContentsWithinApage {
  jcr {
    nodesByPath(paths: ["/sites/digitall/home"]) {
      descendants(first:3 after:"NTE3ZjE1YmMtZTViYS00YzVkLWIxNmUtMDhiMTgzYTkzMTli" typesFilter: {types: ["jmix:editorialContent"], multi: ANY}, recursionTypesFilter: {multi: NONE, types: ["jnt:page", "jnt:contentFolder"]}) {
        edges {
          index
          cursor
          node {
          displayName
          path
          primaryNodeType{
            displayName(language: "en")
          }
        }
        }
      }
    }
  }
}

Get pages tree

query pageTree {
  jcr {
    nodeByPath(path: "/sites/digitall/home") {
      name
      path
      descendants(fieldFilter: {filters: {evaluation: EQUAL, fieldName: "type.name", value: "jnt:page"}}) {
        nodes {
          name
          path 
          type: primaryNodeType {
            name
          }
        }
      }
    }
  }
}

Get content items that were not modified since January 1st 2018

query lastModifiedPages {
  jcr {
    nodesByQuery(query:"SELECT * FROM [jnt:page] as page WHERE page.[jcr:lastModified] >= CAST('2018-01-01T00:00:00.000Z' AS DATE)") {
      edges {
        page: node {
          aggregatedLastModifiedDate
          displayName
          languagesToTranslate
          name
          path
          uuid
          workspace
        }
      }
    }
  }
}