Select to view content in your preferred language

delete feature using applydits delete

965
3
09-12-2013 12:23 PM
JhonJow
New Contributor
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 ...

[ATTACH=CONFIG]27407[/ATTACH]

<?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;
        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>
Tags (2)
0 Kudos
3 Replies
RobertScheitlin__GISP
MVP Emeritus
jhon 96,

   Your issue was you were attempting to apply the edits to the feature layer before the featurelayer was loaded and ready.

Working code:

<?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.layers.FeatureLayer;
            import com.esri.ags.layers.supportClasses.FeatureEditResults;
            import com.esri.ags.tasks.QueryTask;
            import com.esri.ags.tasks.supportClasses.Query;
            
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.AsyncResponder;
            import mx.rpc.Fault;
            
            private var service:String = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0";
            
            private var eventsLayer:FeatureLayer = new FeatureLayer(service);
            
            protected function btDelete_clickHandler(event:MouseEvent):void
            {
                try{
                    
                    const deletes:Array = [dgFeatures.selectedItem.gra];
                    eventsLayer.applyEdits(null, null, deletes, false,
                        new AsyncResponder(featureLayer_editsCompleteHandler, featureLayer_faultHandler));
                    function featureLayer_editsCompleteHandler(featureEditResults:FeatureEditResults, token:Object = null):void
                    {
                        Alert.show("delete sucessfull")
                    }
                    function featureLayer_faultHandler(event:Fault, token:Object = null):void
                    {
                        Alert.show("delete failed: " + event.message)
                    }
                }
                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;
                                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="340" width="430">
        <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> 
0 Kudos
JhonJow
New Contributor
Excelent, thanks Robert
0 Kudos
RobertScheitlin__GISP
MVP Emeritus
Jhon Jow,

  Glad to help. Now for your part.

Don't forget to click the Mark as answer check on this post and to click the top arrow (promote).
Follow these steps as shown in the below graphic:
0 Kudos