Examples of GraphQL requests

November 14, 2023
Note that you need to have the right access and permissions to run these queries.  

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") {
        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
        }
      }
    }
  }
}