2012-09-14 3 views
2

Le programme d'installation:

J'utilise le javascript API v. 2.8 from ESRI, qui utilise lui-même le 1.6 boîte à outils dojo c.. J'ai le ArcGIS Server v. 10.1 fonctionnant sur Windows dans l'EC2 d'Amazon.javascript esri impression asynchrone

Je peux exécuter avec succès une PrintTask avec javascript qui POSS JSON sur mon serveur, qui exécute un processus et retourne un PDF au navigateur client. Mais cette demande est synchrone et peut prendre une minute ou deux, causant Heroku à l'expiration du délai avec une erreur H12.

Le problème:

Quand je bascule la [] Asynchronous case à cocher ON sur le serveur ArcGIS, mon PrintTask retourne:

{"error":{"code":500,"message":"Error performing execute operation","details":[]}} 

Je ne sais pas où aller d'ici. Quelqu'un a-t-il des exemples ou une expérience d'exécution d'une tâche d'impression asynchrone sur un serveur ArcGIS?

Le javascript pour printTask est ci-dessous. Existe-t-il un moyen de réécrire ce javascript pour qu'il soit plus asynchrone, ou "non-bloquant"?

Le code

(dépouillée par souci de concision)

dojo.require("esri.tasks.PrintTask"); 

function Print() { 
    var printTool = this; 

    this.executePrint = function(){ 
    var params = new esri.tasks.PrintParameters(); 
    params.map = map; 
    params.template = selectedTemplate; 
    printTask = new esri.tasks.PrintTask(printUrl, {async: true}); 
    printTask.execute(params, printTool.printComplete, printTool.printError); 
    }; 

    this.printComplete = function(result){ 
    dojo.place("<div><a href='" + result.url + "'></a></div>", printForm, "last"); 
    }; 

    this.printError = function(err){ 
    dojo.byId("printJob").innerHTML = err; 
    }; 

} 

Répondre

0

Si son un événement conduit de chargement de la page ou utilisez dojo.addOnLoaddojo.ready, selon votre version.

Si vous appelez Print d'un événement utilisateur (par exemple, cliquez sur) façon la plus simple est de planifier son exécution, au repos

function whenIdle(ptr_fun) { 
    setTimeout(ptr_fun, 1); 
} 
whenIdle(Print); 
+1

Mise à niveau de Javascript version API de Esri 2,8 à 3,2 résolu le problème. Il semble que le paramètre {async: true} n'a pas fait de différence sur 2.8, mais sur 3.2. – ballPointPenguin

1

Lorsque vous appelez la tâche d'impression, si la tâche est async, la L'appel devra être à la méthode printTask.submitJob, pas à la méthode execute.

Voir https://developers.arcgis.com/javascript/jshelp/intro_gp_running.html

+0

Comme une note pour les autres; submitJob est appelé lors de la définition de async à true dans PrintParameters. Sinon, lorsqu'elle est synchrone, la fonction execute() est appelée. Votre code JavaScript continuera de passer un appel à printTask.execute, mais en utilisant Developer Tools, vous remarquerez que l'URL montre que submitJob est appelé par printTask (par exemple, arcgis/rest/services/Utilities/PrintingTools/GPServer/Export% 20Web% 20Map% 20Task/submitJob). – iCode