2013-07-01 3 views
0

Nous essayons d'obtenir un ticket de confiance de Tableau Server en utilisant Ajax. L'équipe Tableau fournit un support pour php, java, sharepoint, ruby ​​mais pas pour Ajax.Générer un ticket de confiance de tableau en utilisant AJAX

Le code que nous travaillons est:

<script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="../js/tableau_v8.js"></script> 
<script type="text/javascript" src="jsonp.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 
    $("#tableau").each(function() { 

     var workbook = $(this).attr("Presents"); 
     var view = $(this).attr("MyDashboard"); 
     var username = $(this).attr("userx"); 
     var ticket; 

     $.ajax({ 
      type: 'POST', 
      url: 'http://serverurl/trusted', 
      contentType: 'application/json', 
      dataType: 'jsonp', 
       data: { 
      username:'registeredusername', 
      server:'url}, 
      success: function (result) { 
       alert('Ok'); 
       ticket = result; 
      }, 
      error: function() { 
       //console.log('Erro'); 
       alert('Error'); 
      } 
     }); 
     var url = "http://serverurl/trusted/" + ticket + "/views/" + workbook + "/" + view; 
     var options = { 
      width: this.offsetWidth, 
      height: this.offsetHeight, 
      hideTabs: true, 
      hideToolbar: false, 
      onFirstInteractive: function() { 
      workbook = viz.getWorkbook(); 
      activeSheet = workbook.getActiveSheet(); 
      } 

      }; 
     viz = new tableauSoftware.Viz(this, url, options); 
    }); 

    }); 
</script> 

Pour vous donner une idée, s'il vous plaît trouverez ci-dessous comment cela fonctionne en php:

TABLEAU_TRUSTED.php

<?php 

// Returns a trusted URL for a view on a server for the 
// given user. For example, if the URL of the view is: 
// http://tabserver/views/MyWorkbook/MyView 
// 
// Then: 
// $server = "tabserver"; 
// $view_url = "views/MyWorkbook/MyView"; 
// 
function get_trusted_url($user,$server,$view_url) { 
    $params = ':embed=yes&:toolbar=yes'; 


    $ticket = get_trusted_ticket($server, $user, $_SERVER['REMOTE_ADDR']); 
    if($ticket > 0) { 
    return "http://$server/trusted/$ticket/$view_url?$params"; 
    } 
    else 
    return 0; 
} 

// Note that this function requires the pecl_http extension. 
// See: http://pecl.php.net/package/pecl_http 

// the client_ip parameter isn't necessary to send in the POST unless you have 
// wgserver.extended_trusted_ip_checking enabled (it's disabled by default) 
Function get_trusted_ticket($wgserver, $user, $remote_addr) { 
    $params = array(
    'username' => $user, 
    'client_ip' => $remote_addr 
); 

    return http_parse_message(http_post_fields("http://$wgserver/trusted", $params))->body; 
} 

?> 

TABLEAU_SAMPLE_VIEW_PAGE.php

<p>An embedded view appears below:</p> 

<?php 

// This user-provided library should define get_user(), which returns the 
// name of the user currently logged into this application. 
// 
include 'auth.php'; 

// Tableau-provided functions for doing trusted authentication 
include 'tableau_trusted.php'; 

?> 

<iframe src="<?php echo get_trusted_url(get_user(),'localhost','views/Date-Time/DateCalcs')?>" 
     width="400" height="400"> 
</iframe> 

<p> 
This was created using trusted authentication. 
</p> 

Des idées comment ce php pourrait fonctionner en javascript et ajax? Des idées comment pourrions-nous améliorer notre code?

Merci, Gabriel

Répondre

3

Gabriel - Comme le post sur les forums Tableau Software met en garde contre, vous ne voulez pas demander un billet de confiance en utilisant uniquement (côté client) JavaScript/AJAX. Ce faisant, vous aurez beaucoup de problèmes, en ouvrant essentiellement Tableau Server afin que n'importe qui puisse demander un ticket pour quelqu'un d'autre. Mettez en œuvre de cette façon, et vous serez bientôt au chômage :)

Vous pouvez utiliser AJAX pour appeler une fonction PHP côté serveur, même si cela ressemble à un kludge. Cependant, puisque la page sera hébergée sur un serveur unique, approuvé par vous, vous êtes en sécurité.

Voici ce que votre code pourrait ressembler à:

D'abord, modifier le tableau_trusted.php, l'ajout d'une fonction ou deux:

function generateTicket() 
{ 

     $ticket= get_trusted_ticket_direct($_POST['server'], $_POST['user'], $_POST['targetsite']); 
     echo $ticket; 

} 

if ($_POST['toDo'] == 'generateTicket') { 
    generateTicket(); 
} 

Voici comment vous pouvez appeler la page:

// variables to feed trusted ticket retrieval 
    var phpScript = "http://someserver/tableau_trusted.php", 
     userName = "someuser", 
     serverURL = "tableauserverlocation"; 

    // variable to hold trusted ticket 
     var incomingTicket; 

    $.post(phpScript, { 
    toDo: 'generateTicket', 
     user: userName, 
     server: serverURL, 
     targetsite: '' 
    }, function(response) { 
     // do something with response (the ticket) right here 
     incomingTicket = response; 
    }); 

Je suppose que vous essayez de réutiliser l'un des exemples de Tableau par rapport à l'écriture de votre propre code, et c'est très bien. MAIS, la gymnastique que vous vous sentez peut-être plus gênante que d'écrire un simple service web (ou un service Windows, ou autre) pour faire ce travail pour vous, puis l'appeler à partir de la page de votre portail. Ce serait un modèle de conception plus propre, de toute façon.

Bonne chance!

+0

Merci! Nous avons suivi votre suggestion à propos de l'AJAX appelant une fonction PHP côté serveur et cela fonctionne très bien depuis l'année dernière. Désolé pour le délai de réponse. – bbi

Questions connexes