Hi everyone
I have the following problem:
I have a list of features that are charged to a Datagrid, and I want to select an item and delete a feature clicking "delete".
For this I am using the method applyedits of FeatureLayer class.
the problem is that when executing the instruction to remove the objetIds are not sent in the request, I can verify that in "developers tool" window of google chrome. Anyone know why?
the parameters send to request was:
adds []
f json
updates []
but delete was not send, why?
and answer was:
{"addResults":[],"updateResults":[],"deleteResults":[]}
but delete operation was not executed, why?
attached the source code I'm using, thanks ...
Attachment 27407
<?xml version="1.0" encoding="utf-8"?>
<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags"
xmlns:viewer="com.esri.viewer.*">
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.Graphic;
import com.esri.ags.events.FeatureLayerEvent;
import com.esri.ags.events.LayerEvent;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.FeatureLayer;
import com.esri.ags.layers.GraphicsLayer;
import com.esri.ags.tasks.QueryTask;
import com.esri.ags.tasks.supportClasses.Query;
import mx.collections.*;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.events.ListEvent;
import mx.rpc.AsyncResponder;
import mx.rpc.Fault;
import mx.rpc.events.FaultEvent;
private var service:String = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0";
protected function btDelete_clickHandler(event:MouseEvent):void
{
try{
var eventsLayer:FeatureLayer = new FeatureLayer();
eventsLayer.url = service;
var gra:Graphic = dgFeatures.selectedItem.gra;
var deletes:Array = [ gra ];
eventsLayer.applyEdits([], [], deletes,
new AsyncResponder(featureLayer_editsCompleteHandler, featureLayer_faultHandler));
function featureLayer_editsCompleteHandler(event:FeatureLayerEvent):void
{
Alert.show("delete sucessfull")
}
function featureLayer_faultHandler(event:FaultEvent):void
{
Alert.show("delete failed")
}
}
catch (error:Error)
{
Alert.show("error at deleting process" + error.toString())
}
}
protected function btLoad_clickHandler(event:MouseEvent):void
{
try{
var queryTask:QueryTask = new QueryTask(service);
var query:Query = new Query();
query.where = "1=1";
query.outFields = ['*'];
query.returnGeometry = true;
queryTask.execute(query, new AsyncResponder(onResultQuery, onFaultQuery));
function onResultQuery(featureSet:FeatureSet, token:Object = null):void
{
try
{
var ac:ArrayCollection = new ArrayCollection();
var k:int;
for(k=0;k<featureSet.features.length;k++)
{
var recordGraphic:Graphic = featureSet.features[k];
ac.addItem({Id:recordGraphic.attributes["objectid"], Name:recordGraphic.attributes["req_type"], gra:recordGraphic });
}
dgFeatures.dataProvider = ac;
}
catch (error:Error)
{
Alert.show("Error processing features")
dgFeatures.dataProvider = null;
}
}
function onFaultQuery(info:Object, token:Object = null) : void
{
Alert.show("query error")
}
}
catch (error:Error)
{
Alert.show("query processing error")
}
}
]]>
</fx:Script>
<viewer:WidgetTemplate id="wTemplate" height="620" width="450">
<mx:Form fontSize="12">
<mx:FormItem horizontalAlign="center">
<s:Button id="btLoad" label="Load" click="btLoad_clickHandler(event)"/>
<mx:DataGrid id="dgFeatures" width="350" height="200" >
<mx:columns>
<mx:DataGridColumn dataField="Id" />
<mx:DataGridColumn dataField="Name" />
</mx:columns>
</mx:DataGrid>
<s:Button id="btDelete" label="Delete" click="btDelete_clickHandler(event)"/>
</mx:FormItem>
</mx:Form>
</viewer:WidgetTemplate>
</viewer:BaseWidget>
I have the following problem:
I have a list of features that are charged to a Datagrid, and I want to select an item and delete a feature clicking "delete".
For this I am using the method applyedits of FeatureLayer class.
the problem is that when executing the instruction to remove the objetIds are not sent in the request, I can verify that in "developers tool" window of google chrome. Anyone know why?
the parameters send to request was:
adds []
f json
updates []
but delete was not send, why?
and answer was:
{"addResults":[],"updateResults":[],"deleteResults":[]}
but delete operation was not executed, why?
attached the source code I'm using, thanks ...
Attachment 27407
<?xml version="1.0" encoding="utf-8"?>
<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags"
xmlns:viewer="com.esri.viewer.*">
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.Graphic;
import com.esri.ags.events.FeatureLayerEvent;
import com.esri.ags.events.LayerEvent;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.FeatureLayer;
import com.esri.ags.layers.GraphicsLayer;
import com.esri.ags.tasks.QueryTask;
import com.esri.ags.tasks.supportClasses.Query;
import mx.collections.*;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.events.ListEvent;
import mx.rpc.AsyncResponder;
import mx.rpc.Fault;
import mx.rpc.events.FaultEvent;
private var service:String = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0";
protected function btDelete_clickHandler(event:MouseEvent):void
{
try{
var eventsLayer:FeatureLayer = new FeatureLayer();
eventsLayer.url = service;
var gra:Graphic = dgFeatures.selectedItem.gra;
var deletes:Array = [ gra ];
eventsLayer.applyEdits([], [], deletes,
new AsyncResponder(featureLayer_editsCompleteHandler, featureLayer_faultHandler));
function featureLayer_editsCompleteHandler(event:FeatureLayerEvent):void
{
Alert.show("delete sucessfull")
}
function featureLayer_faultHandler(event:FaultEvent):void
{
Alert.show("delete failed")
}
}
catch (error:Error)
{
Alert.show("error at deleting process" + error.toString())
}
}
protected function btLoad_clickHandler(event:MouseEvent):void
{
try{
var queryTask:QueryTask = new QueryTask(service);
var query:Query = new Query();
query.where = "1=1";
query.outFields = ['*'];
query.returnGeometry = true;
queryTask.execute(query, new AsyncResponder(onResultQuery, onFaultQuery));
function onResultQuery(featureSet:FeatureSet, token:Object = null):void
{
try
{
var ac:ArrayCollection = new ArrayCollection();
var k:int;
for(k=0;k<featureSet.features.length;k++)
{
var recordGraphic:Graphic = featureSet.features[k];
ac.addItem({Id:recordGraphic.attributes["objectid"], Name:recordGraphic.attributes["req_type"], gra:recordGraphic });
}
dgFeatures.dataProvider = ac;
}
catch (error:Error)
{
Alert.show("Error processing features")
dgFeatures.dataProvider = null;
}
}
function onFaultQuery(info:Object, token:Object = null) : void
{
Alert.show("query error")
}
}
catch (error:Error)
{
Alert.show("query processing error")
}
}
]]>
</fx:Script>
<viewer:WidgetTemplate id="wTemplate" height="620" width="450">
<mx:Form fontSize="12">
<mx:FormItem horizontalAlign="center">
<s:Button id="btLoad" label="Load" click="btLoad_clickHandler(event)"/>
<mx:DataGrid id="dgFeatures" width="350" height="200" >
<mx:columns>
<mx:DataGridColumn dataField="Id" />
<mx:DataGridColumn dataField="Name" />
</mx:columns>
</mx:DataGrid>
<s:Button id="btDelete" label="Delete" click="btDelete_clickHandler(event)"/>
</mx:FormItem>
</mx:Form>
</viewer:WidgetTemplate>
</viewer:BaseWidget>