Jump to content
We've recently updated our Privacy Statement, available here ×

nesterone

Members
  • Posts

    15
  • Joined

  • Last visited

nesterone's Achievements

Apprentice

Apprentice (3/14)

  • Week One Done
  • One Month Later
  • One Year In
  • First Post Rare
  • Collaborator Rare

Recent Badges

0

Reputation

  1. API ReferencePropertiesInputControls Properties Schema { "type": "object", "properties": { "server": { "type": "string", "description": "Url to JRS instance." }, "resource": { "type": "string", "description": "URI of resource with input controls.", "pattern": "^/\\w*(/\\w+)*$" }, "params": { "type": "object", "description": "Parameters for input controls.", "additionalProperties": { "type": "array" } } }, "required": ["server", "resource"] } DataInputControls data() is an array of InputControl objects: [ { "id":"Cascading_name_single_select", "label":"Cascading name single select", "mandatory":"true", "readOnly":"false", "type":"singleSelect", "uri":"repo:/reports/samples/Cascading_multi_select_report_files/Cascading_name_single_select", "visible":"true", "masterDependencies": { "controlId": [ "Country_multi_select", "Cascading_state_multi_select" ] }, "slaveDependencies":null, "validationRules": [ { "mandatoryValidationRule" : { "errorMessage" : "This field is mandatory so you must enter data." } } ], "state": { "uri": "/reports/samples/Cascading_multi_select_report_files/Cascading_name_single_select", "id": "Cascading_name_single_select", "value": null, "options": [ { "selected": false, "label": "A & U Jaramillo Telecommunications, Inc", "value": "A & U Jaramillo Telecommunications, Inc" } ] } }, .... ] For more details see Cascading#GetinitialstructureofInputControls. InputControls/** * Constructor. Takes properties as argument. * @param properties - map of properties. */ function InputControls(properties){}; /** * Get/Set 'resource' property - URI of resource with input controls. * @param value - new value, optional * @returns this if 'value' sent to the method, * otherwise returns current value of the parameter */ InputControls.prototype.resource = function(value){}; /** * Get/Set 'params' property - Parameters for input controls. * @param value - new value, optional * @returns this if 'value' sent to the method, * otherwise returns current value of the parameter */ InputControls.prototype.params = function(value){}; WorkflowsMake simple call to server(new InputControls({ server: ", resource: "/public/my_report", params: { "Country_multi_select":["Mexico"], "Cascading_state_multi_select":["Guerrero", "Sinaloa"] } })).run(function(inputControlsArray){ // results here }) Reuse instance to make close callsvar inputControls = new InputControls({ server: ", resource: "/public/my_report" }); ...... // call 1 inputControls.params({ "Country_multi_select": ["Mexico"] }).run(doSomethingWithResultFunction); ...... // call 2 after some time inputControls.params({ "Country_multi_select": ["USA"] }).run(doSomethingWithResultFunction); Reuse results latervar call = (new InputControls({ server: ", resource: "/public/my_report" })).run(function(inputControlsArray){ // results here, data() available, i.e it this point call.data() === inputControlsArray -> true }); // at this point call.data() will return null until the run callback will be called. call.data() === null // -> true ..... // if some data was obtained earlier, it accessible via data() var inputControlsArray = call.data(); Validate set properties without actual callvar ic = new InputControls({ server: ", resource: "/public/my_report", params: { "Country_multi_select":["Mexico"], "Cascading_state_multi_select":["Guerrero", "Sinaloa"] } }); var error = ic.validate(); if (!error){ // valid } else { // invalid, read details from error } <> http://jsfiddle.net/tsareg/883cv/
  2. [toc on_off::hide=0 box::collapsed=1] API ReferenceSchemaResources Search Properties Schema { "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+)*$" }, "type": { "type": "string", "description": "Type of resources to search.", "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"] } ResourcesSearch Module/** * 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){}; WorkflowsMake simple call to servernew ResourcesSearch({ server:"", folderUri: "/public", recursive: false })).run(function(resourceLookups){ // results here }) Make simple call to server with error handler (2nd parameter of 'run')new ResourcesSearch({ server:"", folderUri: "/public", recursive: false })).run(usefulFunction, function(error){ alert(error); })) Make simple call to server with 'always' (run every time when operation ends) handler (3rd parameter of 'run')new ResourcesSearch({ server:"", folderUri: "/public", recursive: false })).run(usefulFunction, errorHandler, function(resultOrError){ alert(resultOrError); })) Reuse instance to make close callsvar folderContentQuery = new ResourcesSearch({ server:"", recursive: false })); ...... // call 1 folderContentQuery.folderUri("/uri1").run(doSomethingWithResultFunction); ...... // call 2 after some time folderContentQuery.folderUri("/uri2").run(doSomethingWithResultFunction); Reuse results latervar call = new ResourcesSearch({ server:"", folderUri: "/public", recursive: false })).run(function(resourceLookups){ // results here, data() available, i.e it this point call.data() === resourceLookups -> true }); // at this point call.data() will return null until the run callback will be called. call.data() === null // -> true ..... // if some data was obtained earlier, it accessible via data() var resourceLookups = call.data(); Validate set properties without actual callvar call = new ResourcesSearch({ server:"", folderUri: "/public", recursive: false })); var error = call.validate(); if (!error){ // valid } else { // invalid, read details from error }
  3. API ReferenceReport Properties[toc on_off::hide=0 box::collapsed=1]{ "title": "Report Properties", "description": "A JSON Schema describing a Report Properties", "$schema": ", "type": "object", "properties": { "server": { "type": "string", "description": "URL of JRS instance." }, "resource": { "type": "string", "description": "Report resource URI.", "pattern": "^/[^/~!#\\$%^|\\s`@&*()\\+={}\\[\\]:;\"'<>,?/\\|\\\\]+(/[^/~!#\\$%^|\\s`@&*()\\+={}\\[\\]:;\"'<>,?/\\|\\\\]+)*$" }, "container": { "type": "string", "description": "CSS selector for container to render report to." }, "params": { "$ref": "#/definitions/params" }, "pages": { "type": ["string", "integer"], "description": "Range of report's pages or single report page", "pattern": "^\\d+(\\-\\d+)?$", "default": 1 }, "linkOptions": { "type": "object", "description": "Customization for report's links", "properties": { "beforeRender": { "$ref": "#/definitions/Function", "description": "Allows to change any link representation before report would be rendered" }, "events": { "$ref": "#/definitions/eventsMapper", "description": "Allow to add listener by specific events to links representations by link name" } } }, "defaultJiveUi" : { "type": "object", "description": "Control default JIVE UI in report", "properties": { "enabled": { "type": "boolean", "default": false }, "onError":{ "$ref": "#/definitions/Function", "description": "Jive UI error listener" } } }, "isolateDom": { "type": "boolean", "description": "Isolate report's DOM from third-party page CSS. Can't be set while default JIVE UI is enabled", "default": false } }, "required": ["server", "resource"], "definitions": { "params": { "type": "object", "description": "Report's parameters values", "additionalProperties": { "type": "array" } }, "ExportOptions": { "title": "Report export options", "type": "object", "properties": { "outputFormat": { "enum": [ "pdf", "xlsx", "xls", "rtf", "csv", "xml", "odt", "ods", "docx" ] }, "pages": { "type": ["string", "integer"], "description": "Exports all pages if this property was not specified. Range of report's pages or single report page", "pattern": "^\\d+(\\-\\d+)?$" }, "paginated": { "type": "boolean", "description": "Control 'pagination' feature. Only 'xls' and 'xlsx' support it", "default": "false" } }, "required": ["outputFormat"] }, "Function": { "type": "object", "description": "JavaScript Function" }, "eventsMapper": { "type": "object", "description": "Map events by name to user defined handler .For example: 'click', 'focus', etc ", "additionalProperties": { "$ref": "#/definitions/Function" } }, "chartComponent": { "description": "JIVE chart component schema", "properties": { "id": { "type": "string", "description": "Chart component identifier" }, "componentType": { "enum": ["chart"] }, "chartType": { "description": "Special chart's type", "enum": [ "Bar", "Column", "Line", "Area", "Spline", "AreaSpline", "StackedBar", "StackedColumn", "StackedLine", "StackedArea", "StackedSpline", "StackedAreaSpline", "StackedPercentBar", "StackedPercentColumn", "StackedPercentLine", "StackedPercentArea", "StackedPercentSpline", "StackedPercentAreaSpline", "Pie", "DualLevelPie", "TimeSeriesLine", "TimeSeriesArea", "TimeSeriesSpline", "TimeSeriesAreaSpline", "ColumnLine", "ColumnSpline", "StackedColumnLine", "StackedColumnSpline", "MultiAxisLine", "MultiAxisSpline", "MultiAxisColumn", "Scatter", "Bubble", "SpiderColumn", "SpiderLine", "SpiderArea" ] } }, "required": ["id"] } } } Report Moduledefine(function () { /** * @param {Object} properties - report properties * @constructor */ function Report(properties){} /** * Setters and Getters are functions around * schema for bi component at ./schema/ReportSchema.json * Each setter returns pointer to 'this' to provide chainable API */ //Special getters /** * Get any result after invoking run action, 'null' by default * @returns any data which supported by this bi component */ Report.prototype.data = function(){}; // Special setters /** * Attaches event handlers to some specific events. * New events overwrite old ones. * @param {Object} events - object containing event names as keys and event handlers as values * @return {Report} report - current Report instance (allows chaining) */ Report.prototype.events = function(events){}; //Actions /** * Perform main action for bi component * Callbacks will be attached to deferred object. * * @param {Function} callback - optional, invoked in case of successful run * @param {Function} errorback - optional, invoked in case of failed run * @param {Function} always - optional, invoked always * @return {Deferred} dfd */ Report.prototype.run = function(callback, errorback, always){}; /** * Render report to container, previously specified in property. * Clean up all content of container before adding Report's content * @param {Function} callback - optional, invoked in case successful export * @param {Function} errorback - optional, invoked in case of failed export * @param {Function} always - optional, optional, invoked always * @return {Deferred} dfd */ Report.prototype.render = function(callback, errorback, always){}; /** * Cancel report execution * @param {Function} callback - optional, invoked in case of successful cancel * @param {Function} errorback - optional, invoked in case of failed cancel * @param {Function} always - optional, invoked optional, invoked always * @return {Deferred} dfd */ Report.prototype.cancel = function(callback, errorback, always){}; /** * Update report's component * @param {Object} component - jive component to update, should have id field * @param {Function} callback - optional, invoked in case of successful update * @param {Function} errorback - optional, invoked in case of failed update * @param {Function} always - optional, invoked optional, invoked always * @return {Deferred} dfd */ Report.prototype.updateComponent = function(component, callback, errorback, always){}; /** * Update report's component * @param {String} id - jive component id * @param {Object} properties - jive component's properties to update * @param {Function} callback - optional, invoked in case of successful update * @param {Function} errorback - optional, invoked in case of failed update * @param {Function} always - optional, invoked optional, invoked always * @return{Deferred} dfd */ Report.prototype.updateComponent = function(id, properties, callback, errorback, always){}; /** * Undo previous JIVE component update * @param {Function} callback - optional, invoked in case of successful update * @param {Function} errorback - optional, invoked in case of failed update * @param {Function} always - optional, invoked optional, invoked always * @return{Deferred} dfd */ Report.prototype.undo = function(callback, errorback, always){}; /** * Reset report to initial state * @param {Function} callback - optional, invoked in case of successful update * @param {Function} errorback - optional, invoked in case of failed update * @param {Function} always - optional, invoked optional, invoked always * @return{Deferred} dfd */ Report.prototype.undoAll = function(callback, errorback, always){}; /** * Redo next JIVE component update * @param {Function} callback - optional, invoked in case of successful update * @param {Function} errorback - optional, invoked in case of failed update * @param {Function} always - optional, invoked optional, invoked always * @return{Deferred} dfd */ Report.prototype.redo = function(callback, errorback, always){}; /** * Export report to specific format, execute only after report run action is finished * @param {ExportOptions} exportOptions - export options * @param {Function} callback - optional, invoked with link object * @param {Function} errorback - optional, invoked in case of failed export * @param {Function} always - optional, invoked optional, invoked always * @return{Deferred} dfd */ Report.prototype.export = function(exportOptions, callback, errorback, always){}; //TODO: discuss in compassion with 'cancel' action /** * Cancel all execution, destroy report representation if any, leave only * properties * @param {Function} callback - optional, invoked in case of successful cleanup * @param {Function} errorback - optional, invoked in case of failed cleanup * @param {Function} always - optional, invoked optional, invoked always * @return {Deferred} dfd */ Report.prototype.destroy = function(callback, errorback, always){}; return Report; }); Report Data{ "title": "Report Data", "description": "A JSON Schema describing a Report Data", "$schema": ", "type": "object", "properties": { "totalPages": { "type": "number", "description": "Report's page total count" }, "links": { "type": "array", "description": "Links extracted from markup, so their quantity depends from pages you have requested", "items": { "$ref": "#/definitions/jrLink" } }, "components": { "type": "array", "description": "Components in report, their quantity depends from pages you have requested", "items": { "type": "object", "description": "JIVE components data" } } }, "definitions": { "jrLink": { "title": "JR Hyperlink", "type": "object", "properties": { "type": { "oneOf": [ { "$ref": "#/definitions/linkTypeReference" }, { "$ref": "#/definitions/linkTypeReportExecution" } ] }, "tooltip": { "type": "string", "description": "Hyperlink tooltip" }, "href": { "type": "string", "description": "Hyperlink reference" }, "parameters": { "type": "object" } }, "required": ["type"], "definitions": { "linkTypeReference": { "enum": ["Reference"], "description": "The hyperlink points to an external resource." }, "linkTypeReportExecution": { "enum": ["ReportExecution"], "description": "The hyperlink points to JR report" } } } } } JIVEComponentsNOTE: It's a ES5 compliant array with next additional methods NOTE: Open highcharts.xsd to discover all available chart types TableColumnExpand source { "type": "object", "description": "JIVE column component schema", "oneOf": [ { "$ref": "#/definitions/numericColumn" }, { "$ref": "#/definitions/datetimeColumn" }, { "$ref": "#/definitions/booleanColumn" }, { "$ref": "#/definitions/stringColumn" }, { "$ref": "#/definitions/timeColumn" } ], "definitions": { "numericColumn": { "properties": { "id": { "type": "string", "description": "Column component identifier" }, "componentType": { "enum": ["tableColumn"] }, "dataType": { "enum": ["numeric"] }, "label": { "type": "string" }, "sort": { "$ref": "#/definitions/sort" }, "filter": { "type": "object", "oneOf": [ { "$ref": "#/definitions/singleNumericFilter" }, { "$ref": "#/definitions/rangeNumericFilter" }, { "$ref": "#/definitions/resetFilter" } ] }, "headingFormat": { "$ref": "#/definitions/headingFormat" }, "detailsRowFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" }, "pattern": { "type": "object", "properties": { "negativeFormat": { "enum": [ "-###0", "###0-", "(###0)", "(-###0)", "(###0-)" ], "default": "-###0" }, "grouping": { "type": "boolean", "default": false }, "percentage": { "type": "boolean", "default": false }, "currency": { "enum": [ null, "USD", "EUR", "GBP", "YEN", "LOCALE_SPECIFIC" ] }, "precision": { "type": "integer", "minimum": 0, "default": 0 } } } } }, "conditions": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/singleNumericCondition" }, { "$ref": "#/definitions/rangeNumericCondition" } ] } } }, "required": ["id"] }, "booleanColumn": { "properties": { "id": { "type": "string", "description": "Column component identifier" }, "componentType": { "enum": ["tableColumn"] }, "dataType": { "enum": ["boolean"] }, "label": { "type": "string" }, "sort": { "$ref": "#/definitions/sort" }, "filter": { "type": "object", "oneOf": [ { "$ref": "#/definitions/booleanFilter" }, { "$ref": "#/definitions/resetFilter" } ] }, "headingFormat": { "$ref": "#/definitions/headingFormat" }, "detailsRowFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" } } }, "conditions": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/booleanCondition" } ] } } }, "required": ["id"] }, "datetimeColumn": { "properties": { "id": { "type": "string", "description": "Column component identifier" }, "componentType": { "enum": ["tableColumn"] }, "dataType": { "enum": ["datetime"] }, "label": { "type": "string" }, "sort": { "$ref": "#/definitions/sort" }, "filter": { "type": "object", "oneOf": [ { "$ref": "#/definitions/singleDatetimeFilter" }, { "$ref": "#/definitions/rangeDatetimeFilter" }, { "$ref": "#/definitions/resetFilter" } ] }, "headingFormat": { "$ref": "#/definitions/headingFormat" }, "detailsRowFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" }, "pattern": { "enum": [ "dd/MM/yyyy", "MM/dd/yyyy", "yyyy/MM/dd", "EEEEE dd MMMMM yyyy", "MMMMM dd. yyyy", "dd/MM", "dd/MM/yy", "dd-MMM", "dd-MMM-yy", "MMM-yy", "MMMMM-yy", "dd/MM/yyyy h.mm a", "dd/MM/yyyy HH.mm.ss", "MMM", "d/M/yyyy", "dd-MMM-yyyy", "yyyy.MM.dd G 'at' HH:mm:ss z", "EEE. MMM d. ''yy", "yyyy.MMMMM.dd GGG hh:mm aaa", "EEE. d MMM yyyy HH:mm:ss Z", "yyMMddHHmmssZ" ] } } }, "conditions": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/singleDatetimeCondition" }, { "$ref": "#/definitions/rangeDatetimeCondition" } ] } } }, "required": ["id"] }, "stringColumn": { "properties": { "id": { "type": "string", "description": "Column component identifier" }, "componentType": { "enum": ["tableColumn"] }, "dataType": { "enum": ["string"] }, "label": { "type": "string" }, "sort": { "$ref": "#/definitions/sort" }, "filter": { "type": "object", "oneOf": [ { "$ref": "#/definitions/stringFilter" }, { "$ref": "#/definitions/resetFilter" } ] }, "headingFormat": { "$ref": "#/definitions/headingFormat" }, "detailsRowFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" } } }, "conditions": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/stringCondition" } ] } } }, "required": ["id"] }, "timeColumn": { "properties": { "id": { "type": "string", "description": "Column component identifier" }, "componentType": { "enum": ["tableColumn"] }, "dataType": { "enum": ["time"] }, "label": { "type": "string" }, "sort": { "$ref": "#/definitions/sort" }, "filter": { "type": "object", "oneOf": [ { "$ref": "#/definitions/singleTimeFilter" }, { "$ref": "#/definitions/rangeTimeFilter" }, { "$ref": "#/definitions/resetFilter" } ] }, "headingFormat": { "$ref": "#/definitions/headingFormat" }, "detailsRowFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" }, "pattern": { "enum": [ "hh:mm aaa", "hh:mm:ss aaa", "HH:mm", "HH:mm:ss" ] } } }, "conditions": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/singleTimeCondition" }, { "$ref": "#/definitions/rangeTimeCondition" } ] } } }, "required": ["id"] }, "sort": { "type": "object", "properties": { "order": { "enum": ["asc", "desc"] } } }, "singleNumericFilter": { "properties": { "operator": { "enum": [ "equal", "not_equal", "greater", "greater_or_equal", "less", "less_or_equal" ] }, "value": { "type": "number" } }, "required": ["operator", "value"] }, "singleNumericCondition": { "allOf": [ { "$ref": "#/definitions/singleNumericFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "rangeNumericFilter": { "properties": { "operator": { "enum": [ "between", "not_between" ] }, "value": { "type": "array", "items": { "type": "number" }, "minItems": 2, "maxItems": 2 } }, "required": ["operator", "value"] }, "rangeNumericCondition": { "allOf": [ { "$ref": "#/definitions/rangeNumericFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "booleanFilter": { "properties": { "operator": { "enum": [ "equal", "not_equal" ] }, "value": { "type": "boolean" } }, "required": ["operator", "value"] }, "booleanCondition": { "allOf": [ { "$ref": "#/definitions/booleanFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "stringFilter": { "properties": { "operator": { "enum": [ "equal", "not_equal", "contain", "not_contain", "start_with", "not_start_with", "end_with", "not_end_with" ] }, "value": { "type": "string" } }, "required": ["operator", "value"] }, "stringCondition": { "allOf": [ { "$ref": "#/definitions/stringFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "singleDatetimeFilter": { "properties": { "operator": { "enum": [ "equal", "not_equal", "on_or_before", "before", "on_or_after", "after" ] }, "value": { "type": "string", "format": "date-time" } }, "required": ["operator", "value"] }, "singleDatetimeCondition": { "allOf": [ { "$ref": "#/definitions/singleDatetimeFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "rangeDatetimeFilter": { "properties": { "operator": { "enum": [ "between", "not_between" ] }, "value": { "type": "array", "items": { "type": "string", "format": "date-time" }, "minItems": 2, "maxItems": 2 } }, "required": ["operator", "value"] }, "rangeDatetimeCondition": { "allOf": [ { "$ref": "#/definitions/rangeDatetimeFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "singleTimeFilter": { "properties": { "operator": { "enum": [ "equal", "not_equal", "on_or_before", "before", "on_or_after", "after" ] }, "value": { "type": "string", "format": "time" } }, "required": ["operator", "value"] }, "singleTimeCondition": { "allOf": [ { "$ref": "#/definitions/singleTimeFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "rangeTimeFilter": { "properties": { "operator": { "enum": [ "between", "not_between" ] }, "value": { "type": "array", "items": { "type": "string", "format": "time" }, "minItems": 2, "maxItems": 2 } }, "required": ["operator", "value"] }, "rangeTimeCondition": { "allOf": [ { "$ref": "#/definitions/rangeTimeFilter" }, { "$ref": "#/definitions/conditionFormat" } ] }, "resetFilter": { "properties": {}, "additionalProperties": false }, "simpleFont": { "type": "object", "properties": { "bold": { "type": "boolean", "default": false }, "italic": { "type": "boolean", "default": false }, "underline": { "type": "boolean", "default": false }, "color": { "type": "string", "pattern": "^[a-fA-F0-9]{6}$", "default": "000000" } } }, "font": { "allOf": [ { "$ref": "#/definitions/simpleFont" }, { "type": "object", "properties": { "name": { "type": "string" }, "size": { "type": "number", "minimum": 1, "default": 11 } } } ] }, "headingFormat": { "type": "object", "properties": { "backgroundColor": { "type": "string", "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" }, "align": { "enum": ["right", "left", "center"] }, "font": { "$ref": "#/definitions/font" } }, "additionalProperties": false }, "conditionFormat": { "type": "object", "properties": { "font": { "$ref": "#/definitions/simpleFont" }, "backgroundColor": { "type": ["string", "null"], "pattern": "^(([a-fA-F0-9]{6})|(transparent))$" } } } } } CrosstabRow { "type": "object", "description": "JIVE crosstab row group component schema", "properties": { "id": { "type": "string", "description": "Crosstab component identifier" }, "componentType": { "enum": ["crosstabRowGroup"] }, "sort": { "type": "object", "properties": { "order": { "enum": ["asc", "desc"] } } }, "groupIndex" : { "type": "number", "description": "Absolute offset of the row group in crosstab", "minimum": 0 } }, "required": ["id"] } Column { "type": "object", "description": "JIVE crosstab data column component schema", "properties": { "id": { "type": "string", "description": "Crosstab component identifier" }, "componentType": { "enum": ["crosstabDataColumn"] }, "sort": { "type": "object", "properties": { "order": { "enum": ["asc", "desc"] } } }, "columnValues": { "type": "array", "descripton": "An array of labels of the crosstab data column" }, "sortMeasureIndex" : { "type": "number", "description": "Absolute offset the column in crosstab", "minimum": 0 } }, "required": ["id"] } WorkflowsCreate and run reportvar report = v.report({ server: ", resource: "/public/Sample", container: "#container" }); Change report parameters//update report but with new parameters report .params({ "Country": ["USA"] }) .run(); //later in code console.log(report.params()); // {"Country": ["USA"] } Cancel report executionreport .cancel() .done(function(){ alert("Report Canceled"); }) .fail(function(){ alert("Report Failed"); }); PaginationChange report pagereport .pages(5) .run(); //will re-render report with '5' page in container report .pages("2") // string is also possible .run(); report .pages("4-6") // string range of numbers is also possible .run(); Get pages totalreport .run() .then(function(data){ console.log(data.totalPages); // 10 for example, but can be undefined }); EventschangeTotalPagesHappens when number of report's pages is changed - when report execution is finished or after JIVE action (e.g. change of column font size). Total pages number is passed as an argument to event handler. report.events({ changeTotalPages: function(totalPages) { console.log(totalPages); } }); canUndo / canRedoHappens after JIVE actions (both through UI and API). Boolean value is passed as an argument to event handler meaning if undo or redo action is possible report.events({ canUndo: function(undoPossible) { console.log(undoPossible); }, canRedo: function(redoPossible) { console.log(redoPossible); } }); pageFinalHappens after final HTML page markup is loaded from the server. HTML markup is passed as an argument to even handler. This event happen before markup rendering. report.events({ pageFinal: function(html) { // do something with final HTML page } }); reportCompletedHappens after report is completed. When report becomes in "failed" or "cancelled" status it happens just after report status is updated, while when report is in "ready" status, event happens when HTML export and JIVE components are re-fetched from server and applied to report. Report status ("ready", "failed" or "cancelled") and optional error object are passed as arguments to event handler. report.events({ reportCompleted: function(status, error) { if (status === "ready") { // do something } else if (status === "failed") { error && alert(error); } } }); beforeRenderHappens before report is rendered. report.events({ beforeRender: function(html) { // do something with HTML before it is rendered } }); ExportNOTE: No exports to HTML format through this API NOTE: Execute export only after report run action is finished NOTE: Open applicationContext-remote-services.xml, search for remoteExportersMap to discover all available export format Export all report to PDFreport.run(exportToPdf); function exportToPdf() { report .export({ outputFormat: "pdf" }) .done(function (link) { window.open(link.href); //open new window to download report }) .fail(function (err) { alert(err.message); }); } Export to 10 pages to paginated excel report.run(exportToPaginatedExcel); function exportToPaginatedExcel() { report .export({ outputFormat: "xls", pages: "1-10", paginated: true }) .done(function(link){ window.open(link.href); //open new window to download report }) .fail(function(err){ alert(err.message); }); } Control report's DOM isolationNOTE: Prevent influence of third-party CSS rules on report var isolatedReport = v.report({ resource: "/public/Sample", container: "#reportContainer", //very useful when user want's to export to PDF and see the same report on the page isolateDom : true }); ///later in code isolatedReport .export({format: "pdf"}) .done(function(link){ window.href = link.href; }); JIVE APIEnable default JIVE UIvar report = v.report({ resource: "/public/SampleReport", defaultJiveUi : { enabled: true } }); ComponentsEach jive component should have static id which doesn't change from execution to execution. //data available after running report var components = report.data().components; Work with special componentIt's better to use 'name' property instead of 'id' because 'name' constant identifier and doesn't change between report execution. Component name could be customized through JRXML Find component by name //assume we have report with component 'sales' var salesColumn = report .data() .components .filter(function(c){ return c.name === "sales"}) .pop(); If you need just to update component with new values Find component by name //assume we have report with component 'sales' report.updateComponent("sales", { sort : { order : "asc" } }); //or report.updateComponent({ name: "sales", sort : { order : "asc" } }); Look in limitations for more info about restrictions ChartChange chart type with available chart component//assume we already have found chart component mySalesChart.chartType = "Bar"; report .updateComponent(mySalesChart) .done(function(){ alert("Chart Type Changed!"); }) .fail(function(err){ alert(err.message); }); Change chart typereport .updateComponent("my_sales", { chartType: "Bar" }) .done(function(){ alert("Chart Type Changed!"); }) .fail(function(err){ alert(err.message); }); TableColumnSort special column in report// set descending sorting for column 'dr_customers_name' report .updateComponent("dr_customers_name", { sort : { order: "desc" } }) .done(function(){ alert("Sorting applied!"); }) .fail(function(err){ alert(err.message); }); // reset sorting for column 'dr_customers_name' report .updateComponent("dr_customers_name", { sort : {} }); Filter special column// set filtering for column 'sales' report .updateComponent("sales", { filter : { operator: "between", value: [1234.01, 5678.99] } }) .done(function(){ alert("Filtering applied!"); }) .fail(function(err){ alert(err.message); }); // reset filtering for column 'sales' report .updateComponent("sales", { filter : {} }); Change heading format of a columnreport .updateComponent("sales", { headingFormat: { align: "right", backgroundColor: "DDEE99", font: { size: 15, color: "AA32DD", underline: true, bold: true, italic: true, name: "Monospaced" } } }) .done(function(){ alert("Formatting applied!"); }) .fail(function(err){ alert(err.message); }); Change format of details row of a columnreport .updateComponent("sales", { detailsRowFormat: { align: "right", backgroundColor: "DDEE99", font: { size: 15, color: "AA32DD", underline: true, bold: true, italic: true, name: "Monospaced" }, pattern: { negativeFormat: "(-###0)", precision: 4, grouping: true, percentage: true, currency: "USD" } } }) .done(function(){ alert("Formatting applied!"); }) .fail(function(err){ alert(err.message); }); Change column labelreport .updateComponent("sales", { label: "My Sales" }) .done(function(){ alert("Label changed!"); }) .fail(function(err){ alert(err.message); }); Change conditional formatting of a columnreport .updateComponent("sales", { conditions: [ { operator: "greater", value: 10, backgroundColor: null, font: { color: "FF0000", bold: true, underline: true, italic: true } }, { operator: "between", value: [5, 9], backgroundColor: "00FF00", font: { color: "0000FF" } } ] }) .done(function(){ alert("Formatting applied!"); }) .fail(function(err){ alert(err.message); }); CrosstabChange sorting of first sub column of second column//assume that we have a crosstab with id like 'my_crosstab' report .updateComponent("my_crosstab/dataColumns/1/0", { sort: { order: "asc" }) .done(function(){ alert("Crostab's sorted!"); }) .fail(function(err){ alert(err.message); }); //reset sorting report .updateComponent("my_crosstab/dataColumns/1/0", { sort : {} }); Change row group sorting//assume that we have a crosstab with id like 'my_crosstab' report .updateComponent("my_crosstab/rowGroups/1", { sort: { order: "asc" } ) .done(function(){ alert("Crostab's sorted!"); }) .fail(function(err){ alert(err.message); }); //reset sorting report .updateComponent("my_crosstab/rowGroups/1", { sort : {} }); Undo / Undo All / Redo JIVE changes$("#btn_redo").click(function(){ report .redo() .fail(function(e){ alert("Cannot redo: " + e); }); }); $("#btn_undo").click(function(){ report .undo() .fail(function(e){ alert("Cannot undo: " + e); }); }); $("#btn_undoAll").click(function(){ report .undoAll() .fail(function(e){ alert("Cannot undo all: " + e); }); }); HyperlinksFor more information about it's implementation look in Hyperlinks from JR Add click handler to all links in reportvar report = new Report({ resource: "/public/Sample", linkOptions: { events: { "click" : function(evt, link){ console.log(evt.target); // prints dom elem which represents link in report console.log(link); // print link's data look in report data schema } } } }); Change elements appearance, highlight special element var report = new Report({ resource: "/public/Sample", linkOptions: { beforeRender: function (linkToElemPairs) { linkToElemPairs.forEach(function (pair) { var el = pair.element; el.style.backgroundColor = "red"; }); } } }); Build links from datafunction renderLink(link){ if (link.title){ var template = "<a href='{href}'>{title}</a>"; $("#links_panel") .append(template .replace("{href}", link.href) .replace("{title}", link.title) ); } } report.run(function(data){ data.links.forEach(renderLink) });
  4. API ReferenceGeneric Error{ "title": "Generic Errors", "description": "A JSON Schema describing Visualize Generic Errors", "$schema": "", "type": "object", "properties": { "errorCode": { "type": "string" }, "message": { "type": "string" }, "parameters":{ "type": "array" } }, "required": ["errorCode", "message"] } Common errors [toc]unexpected.errorMessageAn unexpected error has occurredDescriptionSome unexpected error happened. In most of cases this is JavaScript exception or 500 HTTP response from server.schema.validation.errorMessageJSON schema validation failed: {VALIDATION_ERROR_MESSAGE}DescriptionValidation against schema was failed. Check validationError property in object for more details.unsupported.configuration.errorMessage{SPECIFIC_MESSAGE_DEPENDING_ON_ERROR}DescriptionSomething is wrong with provided configuration. For now is error happens only when isolateDom = true and defaultJiveUi.enabled = true.authentication.errorMessageAuthentication errorDescriptionCredentials are not valid or session expired.container.not.found.errorMessageContainer was not found in DOMDescriptionSpecified container was not found in DOM.report.execution.failedMessageReport execution failedDescriptionReport execution failed.report.execution.cancelledMessageReport execution was cancelledDescriptionReport execution was cancelled.report.export.failedMessageReport export failedDescriptionReport export failed.licence.not.foundMessageJRS haven't appropriate licenceDescriptionLicense wasn't provided for JasperReports Serverlicence.expiredMessageJRS license expiredDescriptionLicense expiredresource.not.foundMessageResource not found in RepositoryDescriptionResource not present in Repository or user haven't permissions to read itexport.pages.out.rangeMessageRequested pages {0} out of rangeDescriptionUser requested for pages which are not exist for current exportinput.controls.validation.errorMessagesome message from serverDescriptionWrong input control params were sentWorkflowsInitialization and authenticationIf your app stopped to work without any notification then check that server which provides visualize.js is accessible and return scripts visualize({ auth : { name: "superuser", password: "superuser"} }, function(){ /// your app logic }, function(err){ // handle all initialization and auth errors })Handle bi components errorssame for input controls visualize({ auth : { name: "superuser", password: "superuser"} }, function(v){ var report = v.report({ error: function(err){ //invoked once report is initialized and runned } }); report .run() .fail(function(err){ //handle errors here }); )
  5. [toc on_off::hide=0 box::collapsed=1] Please Note - Newer examples availableThis Wiki article is for the VIsualize.js implementation released with JasperReports Server v5.6. Visualize.js was changed significantly with JasperReports Server v6.0 - see this page for more up to date Including visualize.js into your Web page To use visualize.js, you need to load the visualize.js Javscript library. This will initialize visualize.js. Ordinary usageLoad visualize with defaults <script src="http://<your JRS instance>/jasperserver-pro/client/visualize.js"></script> Load APIMethodGETURL{schema}://{host}:{port}/{contextPath}/client/visualize.js?{options}Content-Typeapplication/javascript OptionsNameDescriptionSupportedDefaultsuserLocaleProvide user localeJasperReports Server supported localesDefault for JRSlogEnabledEnable or disable loggingtrue / falsetruelogLevelLogging leveldebug|info|warn|errorerrorbaseUrlJasperReports Server deployment URLany URL pointing to the JasperReports Server deployment{schema}://{host}:{port}/{contextPath} from request Customize with parametersYou can use the parameters outlined above in the visualize.js Javascript load. <script src="http://<your JRS instance>/client/visualize.js?userLocale=fr&log=true"></script> Basic usage in a Web pageTo establish connection and get object with access to JasperReports Server functionality visualize({ server: "http://<your JRS instance>/jasperserver-pro", auth: { name : "joeuser", password: "joeuser" } }, function(v){ //'v' it's a client to JRS instance under "http://bi.example.com/jasperserver-pro" //session established for joeuser/joeuser var report = v.report(...); //.. var ic = v.inputControls(...); }, function(err){ alert(err.message); }); Use deferred instead of callbackvisualize({ server: "http://<your JRS instance>/jasperserver-pro", auth: { name : "joeuser", password: "joeuser" } }).done(function(v){ //'v' it's a client to JRS instance under "http://bi.example.com/jasperserver-pro" //session established for joeuser/joeuser var report = v.report(...); }).fail(function(err){ alert(err.message); }); SamplesUsing JSFiddleJSFiddle is a playground for web developers, a tool which may be used in many ways. You can use it as an online editor for snippets built from HTML, CSS and JavaScript. The links to the "JSFiddles" below show visualize.js Javascript in action. To use them: Install JasperReports Server with the sample databases and reports Select a JSFiddle link below Change the relevant URLs in the JSFiddle HTML to point to your installed JasperReports Server from: <script type='text/javascript' src="http://visualizejs-preview.eng.jaspersoft.com:8080/jasperserver-pro-branch/client/visualize.js"></script> to: <script type='text/javascript' src="http://<your JasperReports Server>/jasperserver-pro/client/visualize.js"></script> Run the JSFiddle Copying Fiddle ComponentsSo you've looked over one of our samples and want to use it to implement the feature in your own web page. There are three panels to the fiddle for source input, an HTML, Javascript and CSS panel. There are also a set of controls on the left of the panels. One of the items in that set of controls is called External Resources. It allows you to enter JS libraries that would be included in your code with <script></script> tags. If you just copy what's in the HTML panel without checking what might be referenced in the External Resources control, your <script></script> referenced JS Libraries would be incomplete. In the example above, you would need to include the jquery-2.1.0.js library in the HTML as: <script type='text/javascript' src="http://code.jquery.com/jquery-2.1.0.js"></script> The entry under External Resources is the URL link that you would use in the src atttribute. With these caveats, enjoy fiddling with these fiddles. AuthentificationLogin with SSO token (from JasperReports Server configured to integrate with CAS server) Login with plain text credentials Login with hooks Destroy session Change user locale Advanced UI for Login/Logout UI for Login/Logout with SSO token Share common config between 'visualize' callsInformation about reporting/analytic resourcesDiscover available types, formats etc.Report renderingRender report Pagination (Next/Previous) Pagination (Range) Cancel Report Execution Refresh Isolate Report Composition of 4 reports EventsListen for change page totals Track report completed status Listen to pageFinal event Customize report's DOM before render JIVEEnable default JIVE UI Use 'static' id to select JIVE components Change Chart Type Undo / Undo All / Redo JIVE actions + 'canUndo' and 'canRedo' events Change table column sorting order Change table column filters Change table column basic formatting Change table column conditional formatting Change crosstab column order Change crosstab rows order HyperlinksBasic Customization Drill-Down in separate container Use links as data ExportsExport report RepositoryResources search Input ControlsGet input controls data Bind input control to report DiagnosticScope Checker Diagnostic tool Workflows - Advanced usageWorking with server sessionDestroy sessionvisualize({ server: "http://bi.example.com", auth: { name : "joeuser", password: "joeuser" } }).done(function(v){ //......... //later in code v.logout() .then(function(){ alert("Session Destroyed"); }) .fail(function(err){ alert(err.message); }); }).fail(function(err){ alert(err.message); }); Login with another credentialsvisualize({ server: "http://bi.example.com", auth: { name : "joeuser", password: "joeuser" } }).done(function(v){ //......... //later in code v.logout() .then(function(){ return v.login({ "token": "43322-fds-34ddd" }); }) .fail(function(err){ alert(err.message); }); }).fail(function(err){ alert(err.message); }); Common configs between few visualize callsAPI Sugar //Common configs, only once visualize.config({ server: "http://bi.example.com", auth: { name : "joeuser", password: "joeuser" } }); //... visualize(function(v){ //'v' it's a client to JRS instance under "http://bi.example.com" //session already established for joeuser/joeuser var report = v.report(...); }); //... visualize(function(v){ //'v' it's a client to JRS instance under "http://bi.example.com" //session already established for joeuser/joeuser var ic = v.inputControls(...); }); Workflows - Render reportSugar API visualize(function(v){ v("#container").report({ resource: "/public/Samples/Reports/06g.ProfitDetailReport", error: function(err) { alert(err.message); } }); //no results returned by call v("#container").report(...); }); or visualize(function(v){ var report = v.report({ resource: "/public/Samples/Reports/06g.ProfitDetailReport", container: "#container" error: function(err) { alert(err.message); } }); }); NOTE: For more information about Report look in Report Workflows - RepositorySearch for resources in public foldervisualize(function(v){ var search = v.resourcesSearch({ folderUri: "/public", recursive: false success: function(repo) { console.log(repo.data()); // resourceLookups } }); }); More operations with resources searchNOTE: Look in ResourcesSearch Workflows - Input ControlsGet avaliable input controls state and structurevisualize(function(v){ var ic = v.inputControls({ resource: "/public/ReportWithControls", success: function(data) { console.log(data); // [{ "id":"Cascading_name_single_select" "options": [{ . } }); }); More operations with resources searchNOTE: Look in ResourcesSearch Workflows - MetainformationReport chart types (TBD: Update samples and workflows for JIVE)visualize(function(v){ console.log(v.report.chart.types); //returns array of available chart types }); Resources typesvisualize(function(v){ console.log(v.reourcesSearch.types); //returns array of available reources types }); Resources sort optionsvisualize(function(v){ console.log(v.reourcesSearch.sortBy); //returns array of available sort options }); Resources access optionsvisualize(function(v){ console.log(v.reourcesSearch.accessType); //returns array of available access options }); Report export formatsvisualize(function(v){ console.log(v.report.exportFormats); }); Report table column typesvisualize(function(v){ console.log(v.report.table.column.types); }); API Reference - Visualize Properties{ "oneOf": [ { "type": "object", "description": "Visualize main properties", "properties": { "server": { "type": "string", "description": "Url to JRS instance." }, "auth": { "description": "Authentication Properties", "type": "object", "oneOf": [ { "properties": { "token": { "type": "string", "description": "SSO authentication token" }, "headers": { "type": "object", "description": "HTTP header parameters" }, "queryParams": { "type": "object", "description": "HTTP query parameters" } }, "additionalProperties" : false, "required": ["token"] }, { "properties": { "name": { "type": "string", "description": "Name of the user to authenticate" }, "password": { "type": "string", "description": "Password of the user to authenticate" }, "organization": { "type": "string", "description": "Organization of the user to authenticate" }, "timezone": { "type": "string", "description": "Default user timezone to use for this session" }, "headers": { "type": "object", "description": "HTTP header parameters" }, "queryParams": { "type": "object", "description": "HTTP query parameters" } }, "additionalProperties" : false, "required": ["name", "password"] } ] } }, "required": ["server", "auth"] }, { "$ref": "#/definitions/func" } ], "definitions": { "func" : { "title": "Successful callback", "type": "object" } } } API Reference - Visualizevisualize.js it's a factory function for JrsClient /** * Establish connection with JRS instance and generate * ready to use client * @param {Object} properties - configuration to connect to JRS instance * @param {Function} callback - optional, successful callback * @param {Function} errorback - optional, invoked on error * @param {Function} always - optional, invoked always * @returns {Deferred} dfd */ function visualize(properties, callback, errorback, always){} /** * Store common configuration, to share them between visualize calls * @param {Object} properties - configuration to connect to JRS instance */ function visualize.config(properties); JrsClient'v' in our samples, look in Basic Usage for example { /** * Perform authentification with provided auth object * @param auth {object} - auth properties * @returns {Deferred} dfd */ login : function(auth){}, /** * Destroy current auth session * @returns {Deferred} dfd */ logout : function() {}, /** * Create and run report component with provided properties * @param properties {object} - report properties * @returns {Report} report - instance of Report */ report : function(properties){}, /** * Create and run controls for provided controls properties * @param properties {object} - input controls properties * @returns {Options} inputControls instance * */ inputControls : function(properties){}, /** * Create and run resource search component for provided properties * @param properties {object} - search properties * @returns {Options} resourcesSearch instance * */ resourcesSearch : function(properties){} } ReportVisualize.js - API Notes and Samples - ReportInputControlsVisualize.js - API Notes and Samples - Input ControlsResources SearchVisualize.js - API Notes and Samples - ResourcesSearchError HandlingVisualize.js - API Notes and Samples - Error Handling
  6. IS '/VSoftBI/Reports/DigitalDashboard/BranchStatus' uri to report or to Dashboard ?
  7. Hi, sadakar I have made it works and it seems like your sample has mistype in HTML markup like: <script "scr" > instead of <script "src"> Just try my sample but with your URL to vizualize http://jsfiddle.net/NesterOne/2Km35/3/
  8. We are using special cross-domain transfer for Viz, so it's better to work with viz.html not as with local file but as html serving from a webserver
  9. Hi, Lee It's ok to specify url for script to remote server, browser hasn't cross-domain restriction here. Could you try to open "http://ip_address/jasperserver-pro/client/visualize.js" in you browser ?
  10. Yep, samples would be nice to have In generally switching between tabs shouldn't influence on report rendering According to error it seems like container not exists
  11. Hi, I see missing double quote (line 9) should be like v("#container").report() instead of v(#container").report() I hope it helps Thanks, Igor N
  12. Recently Viewed Items (RVI) works through REST API, so it's very strange that they stoped to work. I have a few question to try to undestans what's going on: How do you deply JRS in production (Do you use proxy ? or deployng JRS as ROOT web app)Any javascript errors in browser's console ?Also if you detected that RVI stoped to work, could you checj View->Search Results Select "Viewed by Me" and type Report or Adhoc. It should show the same results as RVI because underhood they use the same services.
×
×
  • Create New...