簡體   English   中英

通過javascript API保存和還原Tableau圖形的當前視圖狀態

[英]Saving and restoring current view state of a Tableau graph through javascript API

問題:

我如何通過javascript-API存儲(然后再檢索)Tableau視圖的自定義狀態?

描述:

我正在一個網站上工作,目前我們允許任何用戶將一組Tableau視圖協作成一個類似PowerPoint的在線演示文稿,以供以后使用。 在我們當前的實現中,Tableau圖形的狀態未存儲,因此用戶每次保持演示文稿時都必須應用其所需的過濾器,選擇工作表等。 這就是我們現在要避免的。

最簡單的解決方案是存儲和檢索通過底部工具欄接口訪問的“共享”鏈接之一。 這些鏈接包含當前視圖的狀態,但是到目前為止,我們還無法做到這一點:首先,由於域問題,我們不能簡單地從嵌入代碼iframe中獲取“共享”鏈接; 其次,API方法workbook.getUrl()似乎不包括當前視圖的狀態。

我目前正在研究workbook.rememberCustomViewAsync(name)workbook.showCustomViewAsync(name)方法,這似乎是一種可能的解決方案。 但是,我似乎無法從這兩種方法中的任何一種獲得任何明智的結果,因為它們在運行時最終都會給出模糊的,非信息性的500錯誤。

一個示例文件,以及錯誤:

為了更好地說明這個問題,我創建了一個最小的演示 (下面的代碼段),嘗試使用上述第二種方法。 在Google Chrome瀏覽器中打開后,這兩個按鈕(“保存狀態”和“獲取狀態”)都不適合我,並且在開發人員工具中可以看到以下錯誤(分別為http響應消息和開發者控制台輸出):

Http響應:

<br>
2015-11-11 16&#x3a;14&#x3a;17.916
&#x28;VkNpWQrCQaIAACQo2YYAAAPi,0,0&#x29;

控制台錯誤:

POST http://public.tableau.com/vizql/w/Book6_426/v/YRKE/save_customized_view/sessions/208A699D34E14708A2268AA10A827C99-0:0 500 (Internal Server Error)

有誰知道我可以通過使提供的代碼示例正常工作(所述的第二種方法)或通過任何其他方式來解決此問題? 任何幫助,將不勝感激!

PS:此處的代碼段模擬器將導致Access-Control-Allow-Origin錯誤。 該文件也已在此處發布。

 <html> <head> <title>A simple Tableau API demo</title> <!--script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <!--script type="text/javascript" src="https://online.tableau.com/javascripts/api/tableau_v8.js"></script--> <script type="text/javascript" src="https://online.tableau.com/javascripts/api/tableau-2.min.js "></script> </head> <body> <H2>Custom view storage demo</H2> <button id="remember-button"> Remember state 'test' </button> <button id="retrieve-button"> Retrieve state 'test' </button> <div id="viz-placeholder" style="width: 1000px; height: 1000px; display: block;"></div> <script> // Render tableau graph function initializeViz() { var placeholderDiv = document.getElementById("viz-placeholder"); var url = "https://public.tableau.com/views/Book6_426/YRKE"; var options = { width: placeholderDiv.offsetWidth, height: placeholderDiv.offsetHeight, hideTabs: true, hideToolbar: true, onFirstInteractive: function() { workbook = viz.getWorkbook(); activeSheet = workbook.getActiveSheet(); } }; viz = new tableau.Viz(placeholderDiv, url, options); } $(initializeViz) // Assign and set up button actions for storing and retrieving the custom view var customViewName = "test"; $('#remember-button').click(function() { console.log("Remembering: ", customViewName); // Try to save state, or print error viz.getWorkbook().rememberCustomViewAsync(customViewName).otherwise(function(err) { console.log("An error occured:"); console.log(err); }); }); $('#retrieve-button').click(function() { console.log("Retrieving: ", customViewName); // Try to retrieve state, or print error viz.getWorkbook().showCustomViewAsync(customViewName).otherwise(function(err) { console.log("An error occured:"); console.log(err); }); }); </script> </body> </html> 

Okey,所以我已經與Tableau客戶支持聯系,他們似乎已經找到了問題。

顯然, javascript-API的某些元素僅適用於Tableau Online和Tableau Server- 不適用於 Tableau Public。

換句話說,Tableau Public托管的圖不支持功能workbook.rememberCustomViewAsync('customViewName') -例如上面示例中使用的圖( https://public.tableau.com/views/... ) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM