API Reference - resourcesSearch¶
The resourcesSearch function performs searches in the repository to find content that can be displayed by visualize.js.
This chapter contains the following sections:
- Search Properties
- Search Functions
- Finding Resources
- Reusing a Search Instance
- Reusing Search Results
- Discovering Available Types
Search Properties¶
The properties structure passed to the resourcesSearch function is defined as follows:
{
"type": "object",
"properties": {
"server": {
"type": "string",
"description": "Url to JRS instance."
},
"q": {
"type": "string",
"description": "Query string. Search for occurrence in label or description of resource."
},
"folderUri": {
"type": "string",
"description": "Parent folder URI.",
"pattern": "^/\\w*(/\\w+)*$"
},
"types": {
"type": "array",
"description": "Type of resources to search.",
"items": {
"type":"string",
"enum": [
"folder", "dataType", "jdbcDataSource", "awsDataSource", "jndiJdbcDataSource",
"virtualDataSource", "customDataSource", "beanDataSource", "xmlaConnection",
"listOfValues", "file", "reportOptions", "dashboard", "adhocDataView",
"query", "olapUnit", "reportUnit", "domainTopic", "semanticLayerDataSource",
"secureMondrianConnection", "mondrianXmlaDefinition", "mondrianConnection",
"inputControl"
]
}
},
"offset": {
"type": "integer",
"description": "Pagination. Index of first resource to show.",
"minimum": 0
},
"limit": {
"type": "integer",
"description": "Pagination. Resources count per page.",
"minimum": 0
},
"recursive": {
"type": "boolean",
"description": "Flag indicates if search should be recursive."
},
"sortBy": {
"type": "string",
"description": "Field to sort on.",
"enum": [
"uri",
"label",
"description",
"type",
"creationDate",
"updateDate",
"accessTime",
"popularity"
]
},
"accessType": {
"type": "string",
"description": "Filtering by type of access, e.g. what was done with resource.",
"enum": [
"viewed",
"modified"
]
},
"showHiddenItems": {
"type": "boolean",
"description": "Flag indicates if hidden items should present in results."
},
"forceTotalCount": {
"type": "boolean",
"description": "If true, Total-Count header is always set (impact on performance),
otherwise - in first page only"
}
},
"required": ["server"]
}
Search Functions¶
The resourcesSearch function exposes the following functions:
define(function () {
/**
* Constructor. Takes context as argument.
* @param contextObj - map of properties.
*/
function ResourcesSearch(contextObj);
/**
* Get/Set 'q' parameter of the query
* @param contextObj - map of properties.
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.q= function(value);
/**
* Get/Set 'folderUri' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.folderUri= function(value);
/**
* Get/Set 'type' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.type= function(value);
/**
* Get/Set 'offset' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.offset= function(value);
/**
* Get/Set 'limit' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.limit= function(value);
/**
* Get/Set 'recursive' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.recursive= function(value);
/**
* Get/Set 'sortBy' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.sortBy= function(value);
/**
* Get/Set 'accessType' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.accessType= function(value);
/**
* Get/Set 'showHiddenItems' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.showHiddenItems= function(value);
/**
* Get/Set 'forceTotalCount' parameter of the query
* @param value - new value, optional
* @returns this if 'value' sent to the method,
* otherwise returns current value of the parameter
*/
ResourcesSearch.prototype.forceTotalCount= function(value);
return ResourcesSearch;
});
Finding Resources¶
The following code example shows how to perform a search and store the results in a variable:
// Populate the repository list
JRSClient.resourcesSearch({
// server: serverUrl,
folderUri:"/public/Samples",
recursive:true,
types:["reportUnit", "dashboard"],
success:listRepository,
error:function (err)
{ alert(err); }
});
The next two examples show different ways of handling results after making a simple repository search in the Public folder.
new ResourcesSearch({
server:"http://localhost:8080/jasperserver-pro",
folderUri: "/public",
recursive: false
})).run(function(resourceLookups){
// results here
});
var search = v.resourcesSearch({
folderUri: "/public",
recursive: false,
success: function(repo) {
console.log(repo.data()); // resourceLookups
}
});
You can also specify the runImmediately:false parameter so that you can set up the search in the first call, and run it later in a separate call. In the following code sample, the first statement builds a query but makes no request to the server, and the second statement actually sends the request, which executes the query.
var query = v.resourcesSearch({
server:"http://localhost:8080/jasperserver-pro",
folderUri: "/public",
recursive: false,
runImmediately : false
}));
query.run().done(function(results))
Reusing a Search Instance¶
If you make multiple searches, for example in different folders, you can create a function to do that using the ResourcesSearch function.
var folderContentQuery = new ResourcesSearch({
server:"http://localhost:8080/jasperserver-pro",
recursive: false
}));
// call 1
folderContentQuery.folderUri("/uri1").run(doSomethingWithResultFunction);
...
// call 2 after some time
folderContentQuery.folderUri("/uri2").run(doSomethingWithResultFunction);
Reusing Search Results¶
Code example:
var call = new ResourcesSearch({
server:"http://localhost:8080/jasperserver-pro",
folderUri: "/public",
recursive: false
})).run(function(resourceLookups){
// data() available here
});
// at this point call.data() will return null until the run callback is called.
call.data() === null // -> true
.....
// if some data was obtained earlier, it accessible via data()
var resourceLookups = call.data();
Discovering Available Types¶
You can write code to discover and display the types that can be searched and types of sorting that can be specified.
visualize({
auth: {
name: "jasperadmin",
password: "jasperadmin",
organization: "organization_1"
}
}, function (v) {
buildControl("Resources types", v.resourcesSearch.types);
buildControl("Resources search sort types", v.resourcesSearch.sortBy);
});
function buildControl(name, options) {
function buildOptions(options) {
var template = "<option>{value}</option>";
return options.reduce(function (memo, option) {
return memo + template.replace("{value}", option);
}, "")
}
console.log(options);
if (!options.length){
console.log(options);
}
var template = "<label>{label}</label><select>{options}</select><br>",
content = template.replace("{label}", name)
.replace("{options}", buildOptions(options));
$("#container").append($(content));
}