Select to view content in your preferred language

Edits not being saved

764
1
Jump to solution
12-09-2013 07:24 AM
ionarawilson1
Deactivated User
Can anybody tell me why the edits of the table are not being saved (displayed on the table)? Thank you!

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"     xmlns:s="library://ns.adobe.com/flex/spark"     xmlns:esri="http://www.esri.com/2008/ags"     pageTitle="Attribute Table">             <s:layout>    <s:VerticalLayout gap="0"/>   </s:layout>      <fx:Script>    <![CDATA[     import com.esri.ags.Graphic;     import com.esri.ags.events.AttributeTableEvent;     import com.esri.ags.events.FeatureLayerEvent;     import com.esri.ags.layers.supportClasses.FeatureEditResult;     import com.esri.ags.layers.supportClasses.FeatureEditResults;     import com.esri.ags.layers.supportClasses.Field;     import com.esri.ags.tasks.supportClasses.Query;          import mx.controls.Alert;     import mx.events.FlexEvent;     import mx.rpc.AsyncResponder;     import mx.rpc.Fault;          /* [Bindable]      private var urltable:String = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/MapServer/1" //or you can use your feature layer layerDetails informations to get the related table Id.     private var yourTable:FeatureLayer; //Here you're casting the table as a FeatureLayer so it's editable          protected function application1_initializeHandler(event:FlexEvent):void     {     yourTable = new FeatureLayer(urltable, null, null) as FeatureLayer;     }*/     protected function myMap_clickHandler(event:MouseEvent):void     {      if (event.target is Graphic || event.target.parent is Graphic)                      {                           var graphic:Graphic = event.target is Graphic ? Graphic(event.target) : Graphic(event.target.parent);       var query:Query = new Query;       query.objectIds = [graphic.attributes[myFeatureLayer.layerDetails.objectIdField]];       myFeatureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW);       myFeatureLayer.addEventListener(FeatureLayerEvent.SELECTION_COMPLETE,myFeatureLayer_SelectionCompleteHandler);      }      else      {       myFeatureLayer.clearSelection();       yourTable.clearSelection();      }     }          protected function myFeatureLayer_SelectionCompleteHandler(event:FeatureLayerEvent):void     {      var query:Query = new Query;      query.where = "sf_311_serviceoid  = " + myFeatureLayer.selectedFeatures[0].attributes.objectid;      yourTable.selectFeatures(query, FeatureLayer.SELECTION_NEW);     }          protected function fdg_updateFeatureHandler(event:AttributeTableEvent):void     {      const attributes:Object = {};      const objectIdField:String = event.featureLayer.layerDetails.objectIdField;      attributes[objectIdField] = event.feature.attributes[objectIdField];      attributes[event.field.name] = event.newValue;            // change the attributes on client right away      event.feature.attributes[event.field.name] = event.newValue;            const feature:Graphic = new Graphic(null, null, attributes);      const updates:Array = [ feature ];      event.featureLayer.applyEdits(null, updates, null, false,       new AsyncResponder(featureLayer_editsCompleteHandler, featureLayer_faultHandler,        { feature: event.feature, field: event.field, oldValue: event.oldValue }));     }          protected function fdg_deleteFeaturesHandler(event:AttributeTableEvent):void     {      const deletes:Array = event.features;      event.featureLayer.applyEdits(null, null, deletes, false,       new AsyncResponder(featureLayer_editsCompleteHandler, featureLayer_faultHandler));     }          private function featureLayer_editsCompleteHandler(featureEditResults:FeatureEditResults, token:Object = null):void     {      var doRefresh:Boolean = false;            for each (var deleteResult:FeatureEditResult in featureEditResults.deleteResults)      {       if (deleteResult.success === false)       {        Alert.show("Could not delete feature");        doRefresh = true;       }      }            for each (var updateResult:FeatureEditResult in featureEditResults.updateResults)      {       const feature:Graphic = token.feature;       if (updateResult.success === false)       {        Alert.show("Could not update feature, Restoring old value", "Error");                const field:Field = token.field;        feature.attributes[field.name] = token.oldValue;        doRefresh = true;       }       else       {        feature.refresh();       }      }            if (doRefresh)      {       myAttributeTable.refresh();      }     }          private function featureLayer_faultHandler(fault:Fault, token:Object = null):void     {      Alert.show(fault.faultString, "Fault");      myAttributeTable.refresh();     }              ]]>               </fx:Script>      <fx:Declarations>        <esri:FeatureLayer id="yourTable" outFields="*" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/1"/>       </fx:Declarations>                  <s:controlBarContent>            <s:RichText width="100%">     This sample demonstrates how to use the AttributeTable component which allows viewing and editing feature atttributes.     The component uses a data grid where the columns correspond to the fields of a feature layer.     The application also allows user to click on a feature and select it. The AttributeTable then displays the selection     by highlighting the corresponding row in the grid.         </s:RichText>       </s:controlBarContent>   <esri:Map id="myMap"    width="100%" height="60%"    click="myMap_clickHandler(event)">            <esri:extent>                 <esri:Extent id="sheepfire" xmin="-13638587" ymin="4543797" xmax="-13620242" ymax="4549912">                      <esri:SpatialReference wkid="102100"/>                 </esri:Extent>            </esri:extent>            <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>            <esri:FeatureLayer id="myFeatureLayer" mode="onDemand" outFields="*" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0"/>           </esri:Map>   <s:Line width="100%">            <s:stroke>                 <s:SolidColorStroke color="0x000000" weight="1"/>            </s:stroke>       </s:Line>   <s:BorderContainer width="100%" height="40%"       backgroundColor="0xEEEEEE"       borderVisible="false">            <s:layout>                 <s:HorizontalLayout paddingLeft="5" paddingRight="5" paddingTop="2"/>            </s:layout>            <esri:AttributeTable      id="myAttributeTable"     width="100%" height="100%"     deleteFeatures="fdg_deleteFeaturesHandler(event)"     featureLayer="{yourTable}"     updateFeature="fdg_updateFeatureHandler(event)">                </esri:AttributeTable>       </s:BorderContainer>              </s:Application>
Tags (2)
0 Kudos
1 Solution

Accepted Solutions
ionarawilson1
Deactivated User
Benjamin answered the question here:

http://forums.arcgis.com/threads/98405-Edit-related-records?p=350079&posted=1#post350079

You need to change the layerDetails if you are editing a related table:
// const objectIdField:String = event.featureLayer.layerDetails.objectIdField;
  const objectIdField:String = event.featureLayer.tableDetails.objectIdField;

View solution in original post

0 Kudos
1 Reply
ionarawilson1
Deactivated User
Benjamin answered the question here:

http://forums.arcgis.com/threads/98405-Edit-related-records?p=350079&posted=1#post350079

You need to change the layerDetails if you are editing a related table:
// const objectIdField:String = event.featureLayer.layerDetails.objectIdField;
  const objectIdField:String = event.featureLayer.tableDetails.objectIdField;
0 Kudos