function getProjectReport(theFid) { var theParam = theFid.split(","); var query = new esri.tasks.Query(); query.where = "FID=" + theParam[0]; query.outFields = ["*"]; query.returnGeometry = true; var theGraphic; //Specify the appropriate point/line map service depending on what was clicked switch (theParam[1]) { case "point": var queryTask = new esri.tasks.QueryTask("URL #1"); break; case "polyline": var queryTask = new esri.tasks.QueryTask("URL #2"); break; } queryTask.execute(query,function(featureSet) { dojo.forEach(featureSet.features, function(feature) { theGraphic = feature; }); }); console.log(theGraphic.attributes.PROJECT); }
Solved! Go to Solution.
queryTask.execute(query,function(featureSet) { dojo.forEach(featureSet.features, function(feature) { theGraphic = feature; }); console.log(theGraphic.attributes.PROJECT); });
function getProjectReport(theFid) { var theParam = theFid.split(","); var query = new esri.tasks.Query(); query.where = "FID=" + theParam[0]; query.outFields = ["*"]; query.returnGeometry = true; var theGraphic; //Specify the appropriate point/line map service depending on what was clicked switch (theParam[1]) { case "point": var queryTask = new esri.tasks.QueryTask("URL #1"); break; case "polyline": var queryTask = new esri.tasks.QueryTask("URL #2"); break; } console.log("Calling execute()"); queryTask.execute(query,function(featureSet) { console.log("Task callback called"); dojo.forEach(featureSet.features, function(feature,i) { console.log("Looping through features, current feature index =" + i + " about to set theGraphic variable"); theGraphic = feature; console.log("Have set theGraphic variable for feature index = " + i); }); }); console.log("Trying to log theGraphic stuff, this will fail..."); console.log(theGraphic.attributes.PROJECT); }
Yes- I understand what Bill (and you) are saying.
What I'm not doing a good job of saying is that I want/need to access theGraphic variable AFTER the conclusion of the queryTask.Execute routine. I need to re-use the geometry and some of it's attributes for subsequent queries on additional datasets.
As my code currently exists, I can't- and I don't know what to change to get it to behave in the manner I need. I thought by declaring theGraphic as a variable at the beginning of the function it would persist and be accessible throughout the entire function but it's not (or I'm using it wrong).
function getProjectReport(theFid) { var theParam = theFid.split(","); var query = new esri.tasks.Query(); query.where = "FID=" + theParam[0]; query.outFields = ["*"]; query.returnGeometry = true; var theGraphic = {attributes:{PROJECT:"nothing set yet"}}; //Specify the appropriate point/line map service depending on what was clicked switch (theParam[1]) { case "point": var queryTask = new esri.tasks.QueryTask("URL #1"); break; case "polyline": var queryTask = new esri.tasks.QueryTask("URL #2"); break; } console.log("Calling execute()"); queryTask.execute(query,function(featureSet) { console.log("Task callback called"); dojo.forEach(featureSet.features, function(feature,i) { console.log("Looping through features, current feature index =" + i + " about to set theGraphic variable"); theGraphic = feature; console.log("Have set theGraphic variable for feature index = " + i); }); }); console.log("Trying to log theGraphic stuff, this will output the initial value as the callback (probably, i.e. race conditions) hasn't fired yet..."); console.log(theGraphic.attributes.PROJECT); }
function getProjectReport(theFid) { var theDocument, theGraphic theGraphic = returnTipShape(theFid); console.log(theGraphic.attributes.PROJECT); . . . } function returnTipShape(param) { var theParam = param.split(","); var query = new esri.tasks.Query(); query.where = "FID=" + theParam[0]; query.outFields = ["*"]; query.returnGeometry = true; var theShape; //Specify the appropriate point/line map service depending on what was clicked switch (theParam[1]) { case "point": var queryTask = new esri.tasks.QueryTask("http://dmc-arcgis.snoco.co.snohomish.wa.us/SnocoGISdev/rest/services/transportation/tipProjectsPoint/MapServer/0"); break; case "polyline": var queryTask = new esri.tasks.QueryTask("http://dmc-arcgis.snoco.co.snohomish.wa.us/SnocoGISdev/rest/services/transportation/tipProjectsLine/MapServer/0"); break; } dQuery = queryTask.execute(query); var dList = new dojo.DeferredList([dQuery]); dList.then(function(results) { var featureSet = results[0]; dojo.forEach(featureSet.features, function(feature) { theShape = feature; }); }); return theShape; }
function getProjectReport(theFid) { var theDocument, theGraphic returnTipShape(theFid,function(returnedShape){ console.log(theGraphic.attributes.PROJECT); . . . }); } function returnTipShape(param,callback) { var theParam = param.split(","); var query = new esri.tasks.Query(); query.where = "FID=" + theParam[0]; query.outFields = ["*"]; query.returnGeometry = true; var theShape; //Specify the appropriate point/line map service depending on what was clicked switch (theParam[1]) { case "point": var queryTask = new esri.tasks.QueryTask("http://dmc-arcgis.snoco.co.snohomish.wa.us/SnocoGISdev/rest/services/transportation/tipProjectsPoint/MapServer/0"); break; case "polyline": var queryTask = new esri.tasks.QueryTask("http://dmc-arcgis.snoco.co.snohomish.wa.us/SnocoGISdev/rest/services/transportation/tipProjectsLine/MapServer/0"); break; } dQuery = queryTask.execute(query); var dList = new dojo.DeferredList([dQuery]); dList.then(function(results) { var featureSet = results[0]; dojo.forEach(featureSet.features, function(feature) { theShape = feature; }); callback(theShape); }); //return theShape; }