QueryTask with FindTask

1097
9
Jump to solution
08-21-2014 04:27 AM
IbrahimHussein
Occasional Contributor

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>

0 Kudos
1 Solution

Accepted Solutions
KenBuja
MVP Esteemed Contributor

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"]);

}

View solution in original post

9 Replies
MayJeff
Occasional Contributor
0 Kudos
IbrahimHussein
Occasional Contributor

Ill take a look, thanks.

0 Kudos
KenBuja
MVP Esteemed Contributor

You left both Query and QueryTask out of your require statement and function arguments.

0 Kudos
IbrahimHussein
Occasional Contributor

oh yup I did leave it out for the sample, my fiddle has it though

0 Kudos
KenBuja
MVP Esteemed Contributor

What's the URL of your QueryTask in the sample code? Currently, it's "URL"

0 Kudos
IbrahimHussein
Occasional Contributor
0 Kudos
KenBuja
MVP Esteemed Contributor

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"]);

}

IbrahimHussein
Occasional Contributor

That was it. Thanks man.

0 Kudos
KenBuja
MVP Esteemed Contributor

Great...and I just wasn't testing enough properties. One finally came back as "Friday"