Sisense.js Demo with Filter and Dashboard Changing with Native Web Components
This is a Sisense.js Demo built with React, which includes functionality such as changing filters and dashboards with native web components. This can be used as a reference or starting point for building and customizing Sisense.js applications with custom styling and functionality. React Sisense.js Demo Getting Started Make sure CORS is enabled and the location/port your hosting this applicaiton on is whitelisted on Sisense instance, documentation on changing CORS settings is here. Open the terminal (on Mac/Linux search for terminal, on Windows search for Powershell, Command Prompt, or Windows Subsystem for Linux if installed ) and set path to folder containing project (using cd command). Open the config file in the folder src folder and set Sisense Server URL to the IP or domain name of your Sisense server and set the dashboard id's and optionally filters keys. Run the command. npm install && npm start If npm and node is not installed, install them using the package manager or using nvm (Node version manager). Nvm can be installed by running this command in a terminal curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash Once install script is finished, follow any instructions listed in terminal, restart or open a new terminal and run these command to install node and npm: nvm install node nvm install-latest-npm To start hosting the site, run this command: npm install && npm start The default location is IP of hosting server on port 3000. If the IP address of the server hosting this program is 10.50.74.149 for example, then enter 10.50.74.149:3000 in the address bar of a browser to view application. if hosted locally enter your ip on port 3000 or enter localhost:3000 To use a different port, set the port variable in terminal using this command: export PORT=NEW_PORT_NUMBER and then run npm start. To run in the background use PM2 or system. Requirements Npm (and Node) - Installs all requirements Access to a Sisense instance Description This is a demonstration of some of the capabilities of Sisense.js and Sisense. It is a React single-page application using Typescript that can switch between multiple dashboards, loading all widgets in those dashboards to individual elements (created on dashboard switch). Multiple dashboard filters can be changed (and multiple members in a filter) using a native React dropdown bar to filter the data with the new filtered data visualized with the widgets in the dashboard. Changes made to filters using widgets in Sisense.js using right click are reflected in dropdown filter. Connecting to Sisense // Loads Sisense.js from Server, saves Sisense App copy in window as object to indicate already loaded to prevent loading twice const loadSisense = () => { // If Sisense is already loaded stop if (window.sisenseAppObject) { return; } // Loads sisense app object into app variable, edits being saved to dashboard set to false window.Sisense.connect(config.SisenseUrl, config.saveEdits) // Sisense app object .then((app: SisenseAppObject) => { // loads Sisense app object into window object, so connect is only run once, alternative is export and import window.sisenseAppObject = app; // Calls loadDashboard after Sisense is connected, uses initial widget and dashboard variables loadDashboard(config.DashboardConfig[0].DashboardID, config.DashboardConfig[0].DimArray); }) // error catching and log in console .catch((e: Error) => { console.error(e); }); } Loading Dashboard and Creating Container Element for each Widget // Function to load dashboard taking dashboard id as parameter to load dashboard. Every widget in dashboard is rendered into an element created in loop, looks for parent element with ID 'widgets'. On calling again existing widgets are replaced by new ones. const loadDashboard = (dashboardID: string = '') => { // if empty dashboard id return if (dashboardID === '') { return; } // load dashboard into being active dashboard window.sisenseAppObject.dashboards.load(dashboardID) // after load dashboard is in dash variable .then((dash: DashObject) => { window.currentDashObject = dash // array of loaded widgets // let widgetArray: Array<String> = prism.activeDashboard.widgets.toArray().map( let widgetArray: Array<String> = dash.$$widgets.$$widgets.map( function (widget: Widget) { // widget id for loading return widget.id } ); // set state with loaded dashboard if prism loaded if (widgetArray.length > 0) { this.setState((state, props) => { return { dashboardID: dash.id, }; }); } // get widgets element let widgetsElement: HTMLElement | null = document.getElementById(`widgets`); // type checking if (widgetsElement === null) { return; } // erase previous widgets widgetsElement.innerHTML = ''; // loop through array of widget arrays, loads them into containers by id with first in widget1, second in widget2 and so on widgetArray.forEach((widget, index) => { // check if they exist, type checking if (widgetsElement === null) { return; } // element to load widget into later let widgetElement: HTMLElement | null = document.createElement("div"); // Class included index for widget rendering later widgetElement.classList.add(`widget${index + 1}`, 'widget') // add empty div to widgets parent div widgetsElement.appendChild(widgetElement) // get widget and filter elements by ID let filterElement: HTMLElement | null = document.getElementById("filters"); // check if they exist, type checking if (widgetElement === null || filterElement === null) { return; } // Clear widget and filter elements from previous render filterElement.innerHTML = ''; // put widget in container element dash.widgets.get(widget).container = widgetElement; // Renders filter in HTML element with id of filters dash.renderFilters(filterElement); // reloads and refresh dashboard }); dash.refresh(); }) // error catching and log in console .catch((e: Error) => { console.error(e); }); } Changing a Dashboard Filter // Change a dashboard filter, takes dim to filter by, and new values in filter. const changeDashboardFilter = (dashboard: dashboard, dim: string, newFilterArray: Array<String>) => { // Find matching filter and to make changes to let filterToChange = dashboard.filters.$$filters.find(item => item.jaql.dim === `[${dim}]`); // If filter is undefined create a new filter if (filterToChange === undefined) { // Create the filter options let filterOptions = { // Save to dashboard save: false, // Refresh on change refresh: true, // If filter already used, make changes to that filter instead of creating new ones unionIfSameDimensionAndSameType: true }; // Create the jaql for the filter let jaql = { 'datatype': 'text', 'dim': dim, 'filter': { // Multiple items can be selected 'multiSelection': true, // New filter items 'members': newFilterArray, 'explicit': true }, }; // Create the filter jaql object let applyJaql = { jaql: jaql }; // Set the new filter using update function dashboard.$$model.filters.update(applyJaql, filterOptions); } if (filterToChange && filterToChange.$$model.jaql.filter) { let members = filterToChange.$$model.jaql.filter.members; // Check if members exist if (members !== undefined) { // Set members to new selected filter filterToChange.$$model.jaql.filter.members = newFilterArray; // Save the dashboard // dashboard.$$model.$dashboard.updateDashboard(dashboard.currentDashObject.$$model, "filters"); dashboard.filters.update(filterToChange, { refresh: true, save: false }); // Refresh the dashboard // dashboard.refresh(); } } } Clearing a filter Clearing a filter is done by simply setting the members to an empty array, which disables the filter. changeFilter([]); Monitor For Filter Change to Ensure Dropdown Accurately Displays Filter Change // Watch for element change to indicate filter changes and make change to dropdown if filters don't match displayed filter in dropdown const watchForFilterChange = new MutationObserver((mutations) => { // If element changes mutations.forEach(mu => { // If not class or attribute change return if (mu.type !== "attributes" && mu.attributeName !== "class") return; // Find matching Filter to dropdown let filterToChange = (dashboard.filters.$$filters as Array<DashObject>).filter(element => element.jaql.dim === `[${dim}]`); // If filter values displayed and filter values active don't match each other, set displayed filter to match filter, filter value stays as is filterToChange.forEach((filter) => { if (filter.jaql.filter.members.sort().join(',') !== selectedFilterValues.sort().join(',')) { // Change state of filter values to new filter, sets displayed filter in dropdown in correct one. setSelectedFilterValues(filter.jaql.filter.members); } }); }); }); // Array of element with 'widget-body' class (created by Sisense.js on widgets) for change to check for filter change const widget_body_array = document.querySelectorAll(".widget-body") // Watch 'widget-body' class for filter changed by other means, such as right click select on value widget_body_array.forEach(el => watchForFilterChange.observe(el, { attributes: true })); Component Details Filter - One for each filter, gets dropdown values and other props for dropdown filter component, takes filter dim as prop, parent of Dropdown Filter component Dropdown Filter - Renders individual filter dropdown, renders dropdown of one filter, handles filter changes Clickable Button - Button that calls a function on click, props include text, color and function called Input Number - Sets widgets per row, has up and down button as well as keyboard input, controlled input only accepts numbers, has default value in config file Load Sisense - Loads Sisense, gets URL of server from config file, has load dashboard function, creates elements to load widgets into on dashboard load call Sidebar - Collapsible Sidebar, on click loads dashboard, content of dashboard can be configured by config file App - Parent component, has loading indicator before Sisense has loaded, contains all other components Config Settings DashboardConfig - Array of objects describing dashboards selectable in sidebar DashboardLabel - text to show in expanded sidebar DashboardID - Dashboard ID, get from url of dashboard in native Sisense Icon - Icon to show in sidebar for dashboard DimArray - Values to filter by SisenseUrl - URL of Sisense server initialDashboardCube - Title of initial dashboard to show defaultSidebarCollapsed - Dashboard initial state, collapsed or not defaultSidebarCollapsedMobile - Dashboard initial state, collapsed or not, on mobile collapseSideBarText - Text shown on element that collapses sidebar* hideFilterNativeText - Text to hide native embedded filter useV1 - Use v1 version of Sisense script defaultWidth - initial state of selector for widgets per row saveEdits - Write back to Sisense changes made to filters, and any other persistent changes loadingIndicatorColor - Color of loading indicator loadingIndicatorType - Type of loading indicator, options from ReactLoading sidebarBackgroundColor - Background color of sidebar widgetMargin - Margin of individual widget Available Scripts In the project directory, you can run: npm start Runs the app in the development mode. Open http://localhost:3000 to view it in the browser. The page will reload if you make edits. You will also see any lint errors in the console. npm test Launches the test runner in the interactive watch mode. See the section about running tests for more information. npm run build Builds the app for production to the build folder. It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes. Your app is ready to be deployed! See the section about deployment for more information. npm run eject Note: this is a one-way operation. Once you eject, you can’t go back! If you aren’t satisfied with the build tool and configuration choices, you can eject at any time. This command will remove the single-build dependency from your project. Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except eject will still work, but they will point to the copied scripts so you can tweak them. At this point, you’re on your own. You don’t have to ever use eject. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However, we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. Download and extract the zip below:5.3KViews5likes0CommentsSolutions to commonly found issues when setting up a new Sisense ComposeSDK project during beta
Solutions to commonly found issues when setting up a new Sisense ComposeSDK project during beta The first two solutions involve issues with installing ComposeSDK dependencies during the beta period while the ComposeSDK dependencies are hosted on GitHub, and GitHub is the preferred method for access. When ComposeSDK exits the beta period, the dependencies will be available on other sources that will not require a custom authentication token. Problem - Errors when installing Compose SDK dependencies from GitHub Solution - Make sure a GitHub token is active in your environment configuration, and that your GitHub account is fully active and accessible. If a custom GitHub token is used, ensure the custom token has "Read Repository" permission. Alternatively, you can use a standard full-access GitHub token. Make certain the entire token is included when copied into the terminal. Problem - SSL errors when downloading ComposeSDK dependencies from GitHub Solution - When downloading from a VPN network, you may experience this error. You can resolve this by making the following npm config change with this command: npm config set strict-ssl false In Yarn, the equivalent command is: yarn config set "strict-ssl" false -g Problem - CORS errors in the browser console when connecting to a Sisense server with ComposeSDK Solution - Add the hosting domain to the Admin > Security Settings page. Also, make sure CORS is enabled. A common issue is a trailing slash at the end of the URL when copied from the URL directly; these must be removed when setting CORS exemptions. Include the first part of a domain (the subdomain, such as subdomain.domain.com) as well as the port number if included. Anything in the URL after the first slash is not required and is not part of the domain. Problem - Sisense authentication errors when connecting to a Sisense server with ComposeSDK Solution - Do not include "Bearer" at the beginning of the token parameter; this is not required in ComposeSDK and is added automatically by ComposeSDK. When "Bearer" is present explicitly, it will be repeated twice in the header. Make sure the entire token is copied and test the token using a program such as Postman or Curl and any documented Sisense API if you are unsure if the token is valid.3.6KViews2likes0CommentsConverting an Existing Sisense Widget to a Dynamic ComposeSDK Widget Component
Using either the widget Sisense API's, or the Sisense widget JS API object, it is possible to determine all components and parameters of a widget required to create an equivalent dynamic ComposeSDK widget component. This approach allows the extraction of all components and parameters of a widget, enabling the creation of an equivalent dynamic ComposeSDK widget component without directly referencing or relying on a specific widget or dashboard ID. The metadata of an existing widget contains all the information needed to create a dynamic version of an existing Sisense widget. It is also possible to use an existing widget ID and dashboard ID to render an existing widget in ComposeSDK, but this does not take full advantage of the capabilities of ComposeSDK to generate new widgets directly.2.3KViews2likes1CommentEmail Troubleshooting - Sisense 7.2+
This guide will demonstrate a few official first steps for troubleshooting many of the common issues that we see with the emails portion of the Sisense Application. This guide exclusively focuses on Sisense Version 7.2+. Please follow all of the relevant steps in this article to troubleshoot the issue initially, and, if after performing these steps you still experience an issue, our support team will be more than happy to assist you. Basic Troubleshooting Step 1 - Check Configuration: In Sisense Version 7.2, the framework of the web application moved from an IIS hosted platform to a NodeJS application infrastructure. In doing this, all elements of the application are now hosted in "microservices", which are processes that run as tasks on the server and control particular application components. The creation, sending, and logging of emails is performed by the galaxy service (Sisense.Galaxy in the task manager), while the scheduling of the email exports is managed by the Jobs service (Sisense.Jobs in the task manager). As such, the first step to troubleshooting any email issue should be to ensure that the "send emails" setting of the application is on: Note: If you are not seeing the email option in your sharing dashboards module, it is likely that this setting is turned off. Step 2 - Check Plugins and Customization: Once we have confirmed that the emails are turned on, and we expect to see emails, the next step is to disable all of the plugins on the server for another round of testing. Common reasons for email failures: Unsupported, community plugins Out of date officially supported plugins Custom scripts Once all of the plugins are turned off, restart the following services, then send a test email: Sisense.Plugins Sisense.Galaxy Sisense.Gateway If the email comes through successfully, then walk through the plugins testing all possible plugin combinations until you are able to determine exactly which plugin is the culprit of the issue. If the plugin is an officially supported plugin, check to see if there is a newer version to install, and if there isn't a newer version, please open a support ticket documenting the exact replication steps and plugin name for our product team to update. If the plugin is an unsupported community plugin, look through the comments on the page to see if the author has updated the plugin recently or provided new code, and if not, feel free to comment on the page and see if the author is able to update the plugin or not. Repeat this same process for any custom dashboard or widget scripts as well. Step 3 - Check Reporting Engine (Only Relevant for Dashboard Reports) Many users schedule emails to provide them with updated dashboard reports at certain regular intervals (or in an ad hoc manner). To create these emails our application relies on its internal reporting engine to export a PDF version of the dashboard itself. If this component is failing on its own, then it will also affect the emails being sent out, as they will not be able to generate the content of the email. To test this, open the dashboard that you are trying to email a report of, and attempt to download a PDF version of the dashboard locally, using the PDF button in the top right of your dashboard. If you are able to export the PDF successfully, then the issue is likely not caused by the export engine. If the user receives an error, or the PDF does not download correctly, then this could likely be the root cause for the email issue as well. If this is the case, please refer to this document for further troubleshooting techniques specific to export to PDF: Error Exporting To PDF Step 4 - Check Pulse (Only Relevant for Pulse Emails) Many users also rely on Sisense's email service for pulse notifications. Similar to the Reporting Engine section, if there is an error with the pulse mechanism, then it will likely affect those notifications as well. You can test this in a very similar manner as the PDF exports, by forcing your data to meet one of the criteria for a pulse alert, and then checking to make sure that the condition is seen in your Pulse tab of your application, and to check whether or not you received a notification through any other delivery method (mobile, on site popup, etc.). If you see that the Pulse system seems to be failing as a whole, please refer to this documentation for troubleshooting Pulse: Pulse Troubleshooting Step 5 - Restart Services Sometimes, for a variety of reasons, a service reset may be required by the system. In such a case, try restarting the Sisense.Jobs, Sisense.Gateway, and Sisense.Galaxy services. If after doing such, the test emails are still failing to be sent out, zip up your Sisense Galaxy and Sisense Jobs Application Logs, and open a ticket with our support team. The logs can be found at the following paths: C:\ProgramData\Sisense\application-logs\galaxy C:\ProgramData\Sisense\application-logs\jobs-service If a restart of the services does fix the issue, you can still send the Galaxy and Jobs logs to our Sisense support team for further root cause analysis to determine what was the source of the issue. Step 6 - Open a Support Ticket If after performing all five of the steps above, and your issue is not addressed anywhere else in this document, please take a zip file of the following two log paths, and open a ticket with our support team. C:\ProgramData\Sisense\application-logs\galaxy C:\ProgramData\Sisense\application-logs\jobs-service In the ticket, please provide them with the exact issue that you are experiencing (with screenshots if possible), a rough time stamp of the last time a user tried to send an email (this makes sifting through the logs much easier), and any other details or history, particularly about any changes made at a software or hardware level that may be relevant from the time when emails were last working to the time at which they stopped. Custom Email Server Troubleshooting By default, Sisense emails are sent from a [email protected] email address. This settings, however, can be modified to be sent from an email of the user's choosing using two different methods. The first is by contacting Sisense to use our custom MailChimp email server. To use a personal email, but through Sisense's email server, you will need to follow the instructions at the following documentation: Changing The Sisense Email Sender Otherwise, users can opt to host their own email server, and simply connect it to the Sisense application through Sisense's REST API. The documentation for that setup can be found here: Setting Up a Custom Email Server Troubleshooting User's Custom Email Server While the set up and maintenance of a user's own custom email server is considered out of the realm of typical Sisense support, the most frequently reported issue from using a custom email server is network connectivity from the server running Sisense to the custom email server itself. To troubleshoot this issue, we recommend trying to run an email through the server without it interacting with Sisense. To do this, a user can use the send mail message command in Microsoft's PowerShell from the Sisense server. Documentation for that particular command can be found here: Powershell: Send-MailMessage The commands to test should look something like the following: $cred =new-object Management.Automation.PSCredential <"[email protected]">, (<"EMAILPASSWORD"> | ConvertTo-SecureString -AsPlainText -Force) Send-MailMessage -From <[email protected]> -To <[email protected]> -Subject "Test Email -Body "Test E-mail (body)" -SmtpServer <SMTP.SERVERNAME> -Port <NUMBEROFPORT> -Credential $cred If you are able to send out the email using that command, then there is likely some configuration or problem within your Sisense email configuration. If you are not able to send out an email using that command, then there is likely an issue with the configuration of the custom SMTP email server, and not necessarily within the Sisense program. Common Issues Dashboard Reporting Issues This issue is frequently caused by some sort of plugin interfering with the email export (especially after a recent upgrade), or by the reporting engine failing (see above). Dashboard Reporting Issues with Blank Email This issue typically occurs when the template for a particular email that was trying to be sent out is missing. Please ensure that the server has all of the following templates in the following file path: C:\Program Files\Sisense\app\galaxy-service\src\features\emails\templates No Emails are sent, Galaxy log shows {"reject_reason":"unsigned"} This error message indicates that "senderEmail" is changed, but domain is not verified in Sisense’s Mandrill email service. Please add DNS and DKIM records and contact support in order to verify the domain. Email Rebranding is not Showing Please first make sure that you followed the following instructions: https://docs.sisense.com/main/SisenseLinux/white-labeling-sisense-in-linux.htm Also make sure that you're changing the files located below: 7.4+ - C:\Program Files\Sisense\app\translations\en-US\email-templates.js 7.2-7.4 - C:\Program Files\Sisense\app\translations\en-US\languages.js Then restart the Sisense.Galaxy service2.3KViews0likes0CommentsUsing the "desc" Description Parameter of a Sisense Dashboard via the REST API
The description parameter ("desc") of the Sisense dashboard object is notable for its somewhat unique characteristic – it is not accessible or editable through the Sisense Web GUI. Consequently, this parameter can only be programmatically accessed and modified. Despite this limitation, the "desc" parameter proves valuable for storing dashboard descriptions, facilitating programmatic interactions, or embedding usage.2.2KViews0likes0CommentsSisense Q1 2021 Release: Infuse Customized Intelligence at Scale
This release is all about the power of personalizing analytics including code-free customizations with Sisense Themes, enhanced live model connection parameters, and a new Custom Code feature in Sisense that enables you to run Python from within your Jupyter notebooks.2.1KViews0likes0CommentsBranding/White Labeling with Sisense
What is Branding? Branding or white-labeling is a way to alter the visual part of an application to match your application's visual style. Sisense provides a list of options for rebranding the visual style of GUI, emails, and so on. Sisense provides the following branding options, including: Look and Feel Email strings customization Email logos customization Basic general branding Look and Feel Look and feel allows users to quickly and easily change things like font, panel color, text color, etc. For more information, read through Sisense's documentation on Customizing the Sisense User Interface (https://documentation.sisense.com/docs/customizing-the-sisense-user-interface). Email Strings Customization Sisense has a list of predefined email templates that are used to send reports on dashboards, builds, and so on. In some cases, the text in those emails can be customized. For example, users have the option to replace Sisense with their custom company name. Text(strings) used in email templates are translated to multiple languages and are saved locally. With this information, users can then alter the text in translation files to change the text in email reports. Translation files for emails can be found under the following path: Linux: /opt/sisense/storage/translations/{Language}/email-templates.js (Or {Server}/app/explore/files/translations/en-US/email-templates.js using Web File Manager) Windows: C:\Program Files\Sisense\app\translations\{Language}/email-templates.js In most cases, English is used for emails, therefore, the folder we need will be en-US. This file contains all the strings that are used in email reports in the following format: {Email type}: { {token}: '{String}', {token}: '{String}' } Where token is the variable that should not be removed from the file, new tokens should not be added as well. String is the actual text that will appear in our email, and is therefore the only thing that can be edited. Here is an example of how to change one of the strings under the test_email type: Once changes are complete, the Galaxy service/pod should be restarted (Restart Sisense.Galaxy service in Windows): This will trigger a test email where we will see the changes in the email body text. Before: After: Email Logos Customization Logos used in email reports can be changed by replacing the default logo files with custom ones. Default images are stored here: Linux: /opt/sisense/storage/emails/images/ (Or {Server}/app/explore/files/emails/images/ using Web File Manager) Windows: C:\Program Files\Sisense\app\galaxy-service\src\features\emails\templates\images\ Note, that if a custom location for a template is specified, the default images and templates will be ignored. The images are mapped using a name, therefore in order to replace the image, the new file should have an identical name. Below is an example of how this works. Below, is the same default recovery password email referenced earlier in the article: Let us replace recover-password.png file with a new one and restart the galaxy pod: Below is the result: Basic General Branding Sisense has a list of branding parameters that can be further adjusted to white label your application. It can be located and changed in 2 ways: Using REST API: Using Configuration Manager ({Host}/app/configuration/system in Linux or Localhost:3030 in Windows): From here, we can change the logos, strings, and toggle some parameters on or off. Saving should prompt relevant services to restart automatically. Pay additional importance to the "Emails Templates Directory" parameter as it will allow users to specify a custom path for email templates. Once specified and saved, emails will not use the default folder. Verify that the new path is correct, otherwise, no email will be sent due to no file being found. Why would you use a custom email template directory? As in most cases, the default template folder is overwritten during version upgrades, meaning changes will be reverted back to default. Users can avoid this issue by using a Custom Email templates folder since it will remain unchanged during the upgrade process. Note that some releases might introduce new logos or emails that will be missing from the custom folder. In this case, Sisense recommends either re-doing the folder content or copying over missing files. Below are additional resources from the Sisense Knowledge Base: Personalizing the Analytics User Experience with Sisense Themes (https://community.sisense.com/t5/sisense-community-blog/personalizing-the-analytics-user-experience-with-sisense-themes/ba-p/153) Replace the homepage with an embedded dashboard (https://community.sisense.com/t5/knowledge/replace-the-homepage-with-an-embedded-dashboard/ta-p/894) How to Disable Emails from Sisense (https://community.sisense.com/t5/knowledge/how-to-disable-emails-from-sisense/ta-p/181)2KViews4likes1CommentAnimating Sisense Title Elements and Widgets Using CSS Animations
Animating Sisense widget elements and dashboard and widget titles is a possible way to enhance the visual appeal and user experience of a Sisense dashboard, or highlight a particular part of a dashboard or widget. Sisense widgets and titles are standard HTML elements, making it possible to apply animation using solely standard CSS stylesheets, much like other HTML elements on non-Sisense pages. Animations can include effects like fading widgets in or out and cyclic changes in text color of widgets or titles.1.5KViews1like0CommentsDebugging Server Side External Sisense Plugins using HTTP Requests
When developing or debugging an existing external Sisense plugin it may be helpful to observe the status of plugin variables at various points in the code, in order to understand the current behavior or to understand and debug an error that is occurring.1.5KViews0likes0CommentsUpdate and add new Highcharts modules for use in Sisense plugins
Update and add new Highcharts modules for use in Sisense plugins The JavaScript library framework Highcharts is natively included in Sisense and is utilized in many native Sisense widgets as well as in numerous Sisense plugins. Although Sisense typically does not alter the Sisense Highcharts library version with every release, the versions of Highcharts included in Sisense may change when upgrading to a new major version release. Highcharts can load additional chart types and other types of functionality via JS module files that contain code-adding features such as additional chart types, which can be used within plugins along with additional code to create additional widget types. If a plugin utilizes a Highcharts module, you can source the module directly in the "plugin.json" file's source parameter, as shown in this example: "source": [ "HighchartModule.js", ], To determine the current Highcharts version being used in your Sisense version, you can use the "Highcharts" command in the web console while viewing any page on your Sisense server. After identifying the current Highcharts version, you can find the corresponding module hosted on the Highcharts code hosting website using the following URL format: https://code.highcharts.com/${Highcharts_Version}/modules/${module_name}.js For example: https://code.highcharts.com/6.0.4/modules/heatmap.js You can save this module and upload it to the plugin folder or replace the older module JS file simply by copying and pasting the code directly. Be sure to update the "plugin.json" file to point to the new module file if the file name has changed or if this is the first time the module is included. Simply sourcing the module file in the "plugin.json" file is sufficient to load the module into Highcharts; no further code is required to load the module.1.3KViews2likes2Comments