Hey guys, this has been bugging me for a few days. I used the findTask code in the sample and would like to run a querytask once the user clicks a row.
I put the query task code in the rowclickHandler function. I put an alert to showthe attributes, but it returns an error saying "an error as occured during task execution". Below is the sample from esri (I put in my querytask just like I did on my own code).
!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!--The viewport meta tag is used to improve the presentation and behavior of the samples
on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Display Find Task results in Dojo DataGrid</title>
<link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dojox/grid/resources/Grid.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dojox/grid/resources/claroGrid.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.10/js/esri/css/esri.css">
<style>
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
</style>
<script src="http://js.arcgis.com/3.10/"></script>
<script>
require([
"esri/map",
"esri/tasks/FindTask",
"esri/tasks/FindParameters",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/symbols/SimpleFillSymbol",
"esri/Color",
"dojo/on",
"dojo/dom",
"dijit/registry",
"dojo/_base/array",
"dojo/_base/connect",
"dojox/grid/DataGrid",
"dojo/data/ItemFileReadStore",
"dijit/form/Button",
"dojo/parser",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dojo/domReady!"
], function(
Map, FindTask, FindParameters, SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol,
Color, on, dom, registry, arrayUtils, connect, DataGrid, ItemFileReadStore, Button, parser
) {
var findTask, findParams;
var map, center, zoom;
var grid, store;
parser.parse();
registry.byId("search").on("click", doFind);
center = [-83.266, 42.568];
zoom = 11;
map = new esri.Map("map", {
basemap: "streets",
center: center,
zoom: zoom
});
//Create Find Task using the URL of the map service to search
findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/TaxParcel/TaxParcelQuery/MapServer/");
myQueryTask = new QueryTask("URL");
map.on("load", function () {
//Create the find parameters
findParams = new FindParameters();
findParams.returnGeometry = true;
findParams.layerIds = [0];
findParams.searchFields = ["OWNERNME1", "OWNERNME2"];
findParams.outSpatialReference = map.spatialReference;
console.log("find sr: ", findParams.outSpatialReference);
});
function doFind() {
//Set the search text to the value in the box
findParams.searchText = dom.byId("ownerName").value;
findTask.execute(findParams, showResults);
}
function showResults(results) {
//This function works with an array of FindResult that the task returns
map.graphics.clear();
var symbol = new SimpleFillSymbol(
SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([98, 194, 204]), 2),
new Color([98, 194, 204, 0.5])
);
//create array of attributes
var items = arrayUtils.map(results, function (result) {
var graphic = result.feature;
graphic.setSymbol(symbol);
map.graphics.add(graphic);
return result.feature.attributes;
});
//Create data object to be used in store
var data = {
identifier : "PARCELID", //This field needs to have unique values
label : "PARCELID", //Name field for display. Not pertinent to a grid but may be used elsewhere.
items : items
};
//Create data store and bind to grid.
store = new ItemFileReadStore({
data : data
});
var grid = registry.byId("grid");
grid.setStore(store);
grid.on("rowclick", onRowClickHandler);
//Zoom back to the initial map extent
map.centerAndZoom(center, zoom);
}
//Zoom to the parcel when the user clicks a row
function onRowClickHandler(evt) {
var clickedTaxLotId = evt.grid.getItem(evt.rowIndex).PARCELID;
var selectedTaxLot = arrayUtils.filter(map.graphics.graphics, function (graphic) {
return ((graphic.attributes) && graphic.attributes.PARCELID === clickedTaxLotId);
});
if ( selectedTaxLot.length ) {
map.setExtent(selectedTaxLot[0].geometry.getExtent(), true);
/////////////////////////////////////////////////////////////////QUERYTASK//////////////////////////////////////////////////////////////////////////////////////////////
myQuery = new Query();
myQuery.outFields = ["Service_Da"];
myQuery.geometry = selectedTaxLot[0].geometry;
myQueryTask.execute(myQuery, showResults1, errorCallback);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
function showResults1(fs) {
//do something with the results
//they are returned as a featureset object
alert("test");
var al = "";
alert(fs[0].attributes["Service_Da"]);
alert(al);
}
function errorCallback() {
alert("An error occurred during task execution");
}
});
</script>
</head>
<body class="claro">
<div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'" style="width:100%;height:100%;margin:0;">
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'" style="height:40px;">
Owner name: <input type="text" id="ownerName" size="60" value="Katz" />
<button id="search" data-dojo-type="dijit.form.Button" type="button" data-dojo-attach-point="button" >Search
</button>
</div>
<div id="map" data-dojo-props="region:'center'" data-dojo-type="dijit/layout/ContentPane" style="border:1px solid #000;"></div>
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom'" style="height:150px;">
<table data-dojo-type="dojox/grid/DataGrid" data-dojo-id="grid" id="grid" data-dojo-props="rowsPerPage:'5', rowSelector:'20px'">
<thead>
<tr>
<th field="PARCELID">Parcel ID</th>
<th field="OWNERNME1" >Owner 1</th>
<th field="OWNERNME2">Owner 2</th>
<th field="RESYRBLT ">Year Built</th>
<th field="SITEADDRESS" width="100%">Address</th>
</tr>
</thead>
</table>
</div>
</div>
</body>
</html>
Solved! Go to Solution.
I made one change in the showResults1 function (besides removing the other alerts) and it didn't get the error (although every property was coming back as "Saturday")
function showResults1(fs) {
//do something with the results
//they are returned as a featureset object
alert(fs.features[0].attributes["Service_Da"]);
}
Ill take a look, thanks.
You left both Query and QueryTask out of your require statement and function arguments.
oh yup I did leave it out for the sample, my fiddle has it though
What's the URL of your QueryTask in the sample code? Currently, it's "URL"
myQueryTask = new QueryTask("http://pslgis.cityofpsl.com/arcgis/rest/services/WastePro/Recycle_Schedule/MapServer/0");
Heres the entire code (jsfiddle)
I made one change in the showResults1 function (besides removing the other alerts) and it didn't get the error (although every property was coming back as "Saturday")
function showResults1(fs) {
//do something with the results
//they are returned as a featureset object
alert(fs.features[0].attributes["Service_Da"]);
}
That was it. Thanks man.
Great...and I just wasn't testing enough properties. One finally came back as "Friday"