<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Fail to reload Qlik Sense dashboard app through engine api and websocket in Integration, Extension &amp; APIs</title>
    <link>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420782#M8810</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have created a Qlik Sense Desktop applikation and I want update it every five minutes and show it as a dashboard in a web page as an embedded iFrame configured in the Single configurator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have made a script that connects to the engine api through a web socket and sends openDoc, doReload and saveObject every five minutes. The script runs without errors. The script log is generated, the qvf file is updated and csv-file is exported correctly &lt;SPAN style="font-size: 13.3333px;"&gt;at the end of the script &lt;/SPAN&gt;but the data in the application is not updated. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the script I create a variable as &lt;EM&gt;let vDate = now(); &lt;/EM&gt;which I show in a text box and that value is updated but nothing else in the GUI. My only explanation to this is that the data in the application is never updated when the script runs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;How could I script the reload of an application through the eninge API? &lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Do I need to save the data after reloading the application?&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Below is my html page embedding the dashboard with a script reloading the application every five minutes:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;html&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Dashboard&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src="&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" rel="nofollow" target="_blank"&gt;https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js&lt;/A&gt;&lt;SPAN&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Engine API request bodies&lt;/P&gt;&lt;P&gt;var openDoc = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "OpenDoc",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": [&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "C:\\Users\\xxx\\Documents\\Qlik\\Sense\\Apps\\xxxxx.qvf"&lt;/P&gt;&lt;P&gt;&amp;nbsp; ],&lt;/P&gt;&lt;P&gt;&amp;nbsp; "outKey": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "id": 2&lt;/P&gt;&lt;P&gt; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;var doReload = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": 1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "DoReload",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qMode": 0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qPartial": false,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qDebug": false&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;var saveObjects = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": 1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "SaveObjects",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": {},&lt;/P&gt;&lt;P&gt;&amp;nbsp; "outKey": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "id": 4&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Helper function for logging&lt;/P&gt;&lt;P&gt;function logga(text)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt; var time = new Date();&lt;/P&gt;&lt;P&gt; var timeStr = time.toLocaleTimeString();&lt;/P&gt;&lt;P&gt; var str = timeStr + " " + text;&lt;/P&gt;&lt;P&gt; console.log(str)&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Function that prepares a function that communicates with Qlik throuh the engine API&lt;/P&gt;&lt;P&gt;//Sends msg to the websocket ws and applies next once a responce is received.&lt;/P&gt;&lt;P&gt;//No error detection implemented&lt;/P&gt;&lt;P&gt;function wsCommand(ws, msg, name, next) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; return function (evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.send(JSON.stringify(msg));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + " message is sent..."&amp;nbsp; + JSON.stringify(msg, null, 2));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onmessage = function (evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var received_msg = evt.data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + "Message is received: " + JSON.stringify(received_msg, null, 2));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Functionality to reload the whole page and not just the iFrame in order to clear console log&lt;/P&gt;&lt;P&gt;var reloadCounter = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Function to refresh the dashboard as the last step in the command chain&lt;/P&gt;&lt;P&gt;function wrapUp(ws) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; return function() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.close();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Done!");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reloadCounter += 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(reloadCounter &amp;lt; 10) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Refresh count " + reloadCounter);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refreshDashboard();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.reload() //Reload the whole page and not just the iFrame in order to clear console log&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;function reloadAndRefresh() {&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ("WebSocket" in window) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("WebSocket is supported by your Browser!");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ws = new WebSocket("ws://localhost:4848/app");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onmessage = function(evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var received_msg = evt.data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + "Message is received: " + JSON.stringify(received_msg, null, 2));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //1. open doc -&amp;gt; 2. doReload -&amp;gt; 3. saveObjects&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var saveObjectsCmd = wsCommand(ws, saveObjects, 'saveObjects', wrapUp(ws));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var doReloadCmd = wsCommand(ws, doReload, 'doReload', saveObjectsCmd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var openDocCmd = wsCommand(ws, openDoc, 'openDoc', doReloadCmd);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openDocCmd()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onclose = function() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Connection is closed...");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.onbeforeunload = function(event) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Closing...");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.close();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The browser doesn't support WebSocket&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("WebSocket NOT supported by your Browser!");&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the frame with the dashboard. Add a new IFrame instead of refresh due to cross browsing issues&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function refreshDashboard() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var d = $("#dashboard");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.empty();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.append(`&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;iframe&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src='&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://localhost:4848/single/?appid=C%3A%5CUsers%5Cxxx%5CDocuments%5CQlik%5CSense%5CApps%5Cxxxxxx.qvf&amp;amp;sheet=6d58f047-cd7b-4a1f-bdda-68a9fbefd694&amp;amp;opt=nointeraction&amp;amp;select=clearall" rel="nofollow" target="_blank"&gt;http://localhost:4848/single/?appid=C%3A%5CUsers%5Cxxx%5CDocuments%5CQlik%5CSense%5CApps%5Cxxxxxx.qvf&amp;amp;sheet=6d58f047-cd7b-4a1f-bdda-68a9fbefd694&amp;amp;opt=nointeraction&amp;amp;select=clearall&lt;/A&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="QlikDashboard"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style='border:none;'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; height='800'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width='1200'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/iframe&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;body&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="dashboard"&amp;gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refreshDashboard()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reloadAndRefresh();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setInterval(reloadAndRefresh, 5 * 60 * 1000 );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/html&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 09 Oct 2017 15:09:02 GMT</pubDate>
    <dc:creator>joelwikstrom</dc:creator>
    <dc:date>2017-10-09T15:09:02Z</dc:date>
    <item>
      <title>Fail to reload Qlik Sense dashboard app through engine api and websocket</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420782#M8810</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have created a Qlik Sense Desktop applikation and I want update it every five minutes and show it as a dashboard in a web page as an embedded iFrame configured in the Single configurator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have made a script that connects to the engine api through a web socket and sends openDoc, doReload and saveObject every five minutes. The script runs without errors. The script log is generated, the qvf file is updated and csv-file is exported correctly &lt;SPAN style="font-size: 13.3333px;"&gt;at the end of the script &lt;/SPAN&gt;but the data in the application is not updated. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the script I create a variable as &lt;EM&gt;let vDate = now(); &lt;/EM&gt;which I show in a text box and that value is updated but nothing else in the GUI. My only explanation to this is that the data in the application is never updated when the script runs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;How could I script the reload of an application through the eninge API? &lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Do I need to save the data after reloading the application?&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Below is my html page embedding the dashboard with a script reloading the application every five minutes:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;html&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Dashboard&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src="&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" rel="nofollow" target="_blank"&gt;https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js&lt;/A&gt;&lt;SPAN&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Engine API request bodies&lt;/P&gt;&lt;P&gt;var openDoc = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "OpenDoc",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": [&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "C:\\Users\\xxx\\Documents\\Qlik\\Sense\\Apps\\xxxxx.qvf"&lt;/P&gt;&lt;P&gt;&amp;nbsp; ],&lt;/P&gt;&lt;P&gt;&amp;nbsp; "outKey": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "id": 2&lt;/P&gt;&lt;P&gt; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;var doReload = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": 1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "DoReload",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qMode": 0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qPartial": false,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "qDebug": false&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;var saveObjects = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; "handle": 1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "method": "SaveObjects",&lt;/P&gt;&lt;P&gt;&amp;nbsp; "params": {},&lt;/P&gt;&lt;P&gt;&amp;nbsp; "outKey": -1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; "id": 4&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Helper function for logging&lt;/P&gt;&lt;P&gt;function logga(text)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt; var time = new Date();&lt;/P&gt;&lt;P&gt; var timeStr = time.toLocaleTimeString();&lt;/P&gt;&lt;P&gt; var str = timeStr + " " + text;&lt;/P&gt;&lt;P&gt; console.log(str)&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Function that prepares a function that communicates with Qlik throuh the engine API&lt;/P&gt;&lt;P&gt;//Sends msg to the websocket ws and applies next once a responce is received.&lt;/P&gt;&lt;P&gt;//No error detection implemented&lt;/P&gt;&lt;P&gt;function wsCommand(ws, msg, name, next) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; return function (evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.send(JSON.stringify(msg));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + " message is sent..."&amp;nbsp; + JSON.stringify(msg, null, 2));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onmessage = function (evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var received_msg = evt.data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + "Message is received: " + JSON.stringify(received_msg, null, 2));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Functionality to reload the whole page and not just the iFrame in order to clear console log&lt;/P&gt;&lt;P&gt;var reloadCounter = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Function to refresh the dashboard as the last step in the command chain&lt;/P&gt;&lt;P&gt;function wrapUp(ws) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; return function() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.close();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Done!");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reloadCounter += 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(reloadCounter &amp;lt; 10) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Refresh count " + reloadCounter);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refreshDashboard();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.reload() //Reload the whole page and not just the iFrame in order to clear console log&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;function reloadAndRefresh() {&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ("WebSocket" in window) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("WebSocket is supported by your Browser!");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ws = new WebSocket("ws://localhost:4848/app");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onmessage = function(evt) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var received_msg = evt.data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga(name + "Message is received: " + JSON.stringify(received_msg, null, 2));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //1. open doc -&amp;gt; 2. doReload -&amp;gt; 3. saveObjects&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var saveObjectsCmd = wsCommand(ws, saveObjects, 'saveObjects', wrapUp(ws));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var doReloadCmd = wsCommand(ws, doReload, 'doReload', saveObjectsCmd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var openDocCmd = wsCommand(ws, openDoc, 'openDoc', doReloadCmd);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openDocCmd()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.onclose = function() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Connection is closed...");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.onbeforeunload = function(event) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("Closing...");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ws.close();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The browser doesn't support WebSocket&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logga("WebSocket NOT supported by your Browser!");&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Update the frame with the dashboard. Add a new IFrame instead of refresh due to cross browsing issues&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function refreshDashboard() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var d = $("#dashboard");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.empty();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.append(`&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;iframe&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src='&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://localhost:4848/single/?appid=C%3A%5CUsers%5Cxxx%5CDocuments%5CQlik%5CSense%5CApps%5Cxxxxxx.qvf&amp;amp;sheet=6d58f047-cd7b-4a1f-bdda-68a9fbefd694&amp;amp;opt=nointeraction&amp;amp;select=clearall" rel="nofollow" target="_blank"&gt;http://localhost:4848/single/?appid=C%3A%5CUsers%5Cxxx%5CDocuments%5CQlik%5CSense%5CApps%5Cxxxxxx.qvf&amp;amp;sheet=6d58f047-cd7b-4a1f-bdda-68a9fbefd694&amp;amp;opt=nointeraction&amp;amp;select=clearall&lt;/A&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="QlikDashboard"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style='border:none;'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; height='800'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width='1200'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/iframe&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;body&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="dashboard"&amp;gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refreshDashboard()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reloadAndRefresh();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setInterval(reloadAndRefresh, 5 * 60 * 1000 );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/html&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Oct 2017 15:09:02 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420782#M8810</guid>
      <dc:creator>joelwikstrom</dc:creator>
      <dc:date>2017-10-09T15:09:02Z</dc:date>
    </item>
    <item>
      <title>Re: Fail to reload Qlik Sense dashboard app through engine api and websocket</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420783#M8811</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;A href="https://help.qlik.com/en-US/sense-developer/June2017/Subsystems/EngineAPI/Content/Classes/AppClass/App-class-SaveObjects-method.htm"&gt;SaveObjects &lt;/A&gt;is only supposed to work in the server version, not desktop. And it does not save the data model. You probably need to call &lt;A href="https://help.qlik.com/en-US/sense-developer/June2017/Subsystems/EngineAPI/Content/Classes/AppClass/App-class-DoSave-method.htm"&gt;DoSave&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Erik Wetterberg&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Oct 2017 04:59:03 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420783#M8811</guid>
      <dc:creator>ErikWetterberg</dc:creator>
      <dc:date>2017-10-10T04:59:03Z</dc:date>
    </item>
    <item>
      <title>Re: Fail to reload Qlik Sense dashboard app through engine api and websocket</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420784#M8812</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;DoSave fixed the problem! Thank you very much!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Oct 2017 06:10:47 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/Fail-to-reload-Qlik-Sense-dashboard-app-through-engine-api-and/m-p/1420784#M8812</guid>
      <dc:creator>joelwikstrom</dc:creator>
      <dc:date>2017-10-10T06:10:47Z</dc:date>
    </item>
  </channel>
</rss>

