Using the JS client, the Repository
's query
method can be used to launch NXQL queries or call page providers.
Launching NXQL Queries
Specify the NXQL query to be launched in the query property:
nuxeo.Repository().query({ 'query': myQuery })...
where myQuery
is a variable containing the query to launch.
SELECT * FROM Document
WHERE ecm:mixinType != 'HiddenInNavigation'
AND ecm:isProxy = 0
AND ecm:isVersion = 0
AND ecm:currentLifeCycleState != 'deleted'
AND ecm:fulltext LIKE 'MyKeyword'
See the NXQL documentation for other possibilities.
Calling Page Providers
A page provider is the underlying query when creating a content view in Nuxeo Studio.
To call page providers:
- Specify the content view ID, as defined in Nuxeo Studio in the
pageProvider
property. - Pass an array containing the parameters in the
queryParams
property in the same order as they are defined in the content view.
nuxeo.Repository().query({ 'pageProvider': 'pageProviderId', queryParams['parameter1', 'parameter2'...] })...
Practice - Querying and Searching
Calling Page Providers
- Download callPageProvider.js or open in another tab to copy and paste.
- Replace
NUXEO_SERVER
with your Nuxeo Server URL. - Define query options, calling the
DefaultContentListingInNavigation
content view defined in Nuxeo Studio and passing it the UID of an existing parent document as a parameter. The query result should return the document's children as objects. - Pass the result to the
assertResult
method. - When your code is ready, run it with the following command:
$ node callPageProvider.js
-
Calling Page Providers - Solution
const Nuxeo = require('nuxeo'); var nuxeo = new Nuxeo({ // Replace with your Nuxeo Server URL baseURL: 'http://NUXEO_SERVER/nuxeo', auth: { method: 'basic', username: 'Administrator', password: 'Administrator' }, }); nuxeo.schemas("*"); // Define query options var queryOpts = { "pageProvider": "DefaultContentListingInNavigation", // Replace with UID of existing parent document "queryParams": ["11857bce-4a0f-4bc2-b679-4216b4bf216b"] }; nuxeo .repository() .query(queryOpts) .then(function(result) { console.log("QUERY RESULTS:") console.log(result); // Pass the call result to the method below assertResult(result); }) .catch(function(error) { throw error; }); /************ DO NOT EDIT BELOW THIS LINE ************/ function assertResult(result) { if (Array.isArray(result)) { console.log("Please pass the query result to complete this exercise."); return false; } if (Array.isArray(result)) { if(result.length > 0) { if(result[0]['entity-type'] !== 'document') { console.log("You didn't retrieve any documents. Check the page provider and queryParams."); return false; } } } console.log('Congratulations, you have successfully completed this exercise.'); }
Launching NXQL Queries
- Download nxqlQuery.js or open in another tab to copy and paste.
- Replace
NUXEO_SERVER
with your Nuxeo Server URL. - Define an NXQL query that will return all documents created TODAY. Exclude proxies, archived versions and deleted (trashed) documents.
- Add query to
queryOpts
and launch the query. - Pass the result to the
assertResult
method. - When your code is ready, run it with the following command:
$ node nxqlQuery.js
-
Launching NXQL Queries - Solution
const Nuxeo = require('nuxeo'); var nuxeo = new Nuxeo({ // Replace with your Nuxeo Server URL baseURL: 'http://NUXEO_SERVER/nuxeo', auth: { method: 'basic', username: 'Administrator', password: 'Administrator' }, }); nuxeo.schemas("*"); // Define an NXQL query that will return all documents created TODAY var queryToLaunch = "SELECT * FROM Document " // Change to today's date + " WHERE dc:created >= DATE '2017-02-09' " + " AND ecm:isVersion = 0 " + " AND ecm:isProxy = 0 " + " AND ecm:currentLifeCycleState != 'deleted' "; // Add query to query options var queryOpts = { "query": queryToLaunch }; // Launch query nuxeo .repository() .query(queryOpts) .then(function(result) { console.log(result); // Pass the call result to the method below assertResult(result); }) .catch(function(error) { throw error; }); /************ DO NOT EDIT BELOW THIS LINE ************/ function assertResult(result) { if (typeof queryToLaunch === 'undefined') { console.log("\"queryToLaunch\" is undefined."); return false; } if (!queryToLaunch.includes('ecm:isVersion') && !queryToLaunch.includes('ecm:isVersion') ) { console.log("Exclude archived versions from query."); return false; } if (!queryToLaunch.includes('ecm:isProxy')) { console.log("Exclude proxies from query."); return false; } if (!queryToLaunch.includes('ecm:currentLifeCycleState') || !queryToLaunch.includes('deleted') ) { console.log("Exclude deleted documents from query."); return false; } if (!Array.isArray(result.entries)) { console.log(); console.log(result); console.log("Please pass the query result to complete this exercise."); return false; } if (Array.isArray(result.entries)) { if (result.length > 0) { if (result[0]['entity-type'] !== 'document') { console.log("You didn't retrieve any documents. Check your NXQL query and syntax."); return false; } } } console.log('Congratulations, you have successfully completed this exercise.'); }
Notes about Elasticsearch and the Passthrough API
Where is the query launched?
By default, NXQL queries use the database, but you can change this to use the ElasticSearch index when creating a page provider.
How Can I Take Advantage of all the Elasticsearch Features?
Nuxeo provides a passthrough API for Elasticsearch that lets you benefit from the Elasticsearch API while handling security. When using it, queries are written using the Elasticsearch API, but they are actually sent to Nuxeo Platform that reworks them. We won't cover this aspect during this tutorial but you can head to the Elasticsearch documentation for more information.