<?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:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ags" pageTitle="Related records"> <s:layout> <s:VerticalLayout gap="0"/> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.events.FeatureLayerEvent; import com.esri.ags.events.MapMouseEvent; import com.esri.ags.geometry.Extent; import com.esri.ags.tasks.supportClasses.Query; import com.esri.ags.tasks.supportClasses.RelationshipQuery; import mx.controls.Alert; import mx.rpc.AsyncResponder; [Bindable] private var selectedObjectID:Number; [Bindable] private var relatedRecordsCount:Number; private function findWells(event:MapMouseEvent):void { // find wells near the mouse click var tol:Number = map.extent.width / map.width * 5; var x:Number = event.mapPoint.x; var y:Number = event.mapPoint.y; var queryExtent:Extent = new Extent(x - tol, y - tol, x + tol, y + tol, event.mapPoint.spatialReference); var thisSelectionQuery:Query = new Query(); thisSelectionQuery.geometry = queryExtent; wellsLayer.selectFeatures(thisSelectionQuery, FeatureLayer.SELECTION_NEW); } private function wellsLayer_selectionCompleteHandler(event:FeatureLayerEvent):void { relatedDatagrid.dataProvider = null; // check the first return feature to see if it has any related features if (event.features.length > 0) { relatedTopsQuery.objectIds = [ event.features[0].attributes.OBJECTID ]; selectedObjectID = event.features[0].attributes.OBJECTID; wellsLayer.queryRelatedFeatures(relatedTopsQuery, new AsyncResponder(onResult, onFault)); function onResult(relatedRecords:Object, token:Object = null):void { // get related records for the first feature var fset:FeatureSet = (relatedRecords[event.features[0].attributes.OBJECTID]); if (fset is FeatureSet) { relatedDatagrid.dataProvider = new ArrayCollection(fset.attributes) relatedRecordsCount = fset.attributes.length; } else { Alert.show("No related records for well #" + event.features[0].attributes.OBJECTID, "No related records"); relatedRecordsCount = 0; } } function onFault(info:Object, token:Object = null):void { map.infoWindow.hide(); Alert.show(info.toString(), "queryRelatedFeatures Problem"); } } else { map.infoWindow.hide(); Alert.show("No wells found here, please try somewhere else.", "No features"); } } protected function showRelatedRecordsForObjectID(event:MouseEvent):void { var url:String = 'http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer/0/queryRelatedRecords?objectIds=' + selectedObjectID + '&relationshipId=3&definitionExpression=&returnGeometry=true&outSR=&outFields=*&f=html' navigateToURL(new URLRequest(url), "_blank"); } protected function saveRelatedRecordsForObjectID(event:MouseEvent):void { } protected function deleteRelatedRecordsForObjectID(event:MouseEvent):void { } ]]> </fx:Script> <fx:Declarations> <esri:RelationshipQuery id="relatedTopsQuery" outFields="[Forester,Office,OfficeActivity,Acres,Number]" relationshipId="0"/> </fx:Declarations> <s:controlBarLayout> <s:VerticalLayout gap="10" paddingBottom="7" paddingLeft="10" paddingRight="10" paddingTop="7"/> </s:controlBarLayout> <s:controlBarContent> <s:Button click="saveRelatedRecordsForObjectID(event)" label="Save" visible="{relatedRecordsCount > 0}"/> <s:Button click="deleteRelatedRecordsForObjectID(event)" label= "Delete Records" visible="{relatedRecordsCount > 0}"/> </s:controlBarContent> <esri:Map id="map" mapClick="findWells(event)"> <esri:extent> <esri:Extent id="sheepfire" xmin="-12414729" ymin="2939999" xmax="-9838830" ymax="4415185"> <esri:SpatialReference wkid="102100"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"/> <esri:ArcGISDynamicMapServiceLayer url="http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer"> <esri:visibleLayers> <s:ArrayCollection> <fx:Number>0</fx:Number> <fx:Number>1</fx:Number> </s:ArrayCollection> </esri:visibleLayers> </esri:ArcGISDynamicMapServiceLayer> <esri:FeatureLayer id="wellsLayer" mode="selection" outFields="" selectionComplete="wellsLayer_selectionCompleteHandler(event)" url="http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer/0"> <esri:infoWindowRenderer> <fx:Component> <esri:LabelDataRenderer> <esri:layout> <s:VerticalLayout/> </esri:layout> <esri:label>Well ID {data.OBJECTID}</esri:label> <s:Label text="Plug date: {data.plug_date ? new Date(data.plug_date) : 'No date available'}"/> <s:Label text="Completion: {data.completion ? new Date(data.completion) : 'No date available'}"/> </esri:LabelDataRenderer> </fx:Component> </esri:infoWindowRenderer> </esri:FeatureLayer> </esri:Map> <s:DataGrid id="relatedDatagrid" width="100%" height="45%" edit > <s:columns> <s:ArrayList> <s:GridColumn dataField="Forester" headerText="ID"/> <s:GridColumn dataField="Office" headerText="API Number"/> <s:GridColumn dataField="OfficeActivity" headerText="Elevation"/> <s:GridColumn dataField="Acres" headerText="Formation"/> <s:GridColumn dataField="Number" headerText="Top"/> </s:ArrayList> </s:columns> </s:DataGrid> </s:Application>
Solved! Go to Solution.
function saveUpdatesFromDG():void{ var updates:Array = []; for(var iRow:Number = 0; iRow<dgDataProvider.length; iRow ++) { var attributes:Object = {}; for (var id:String in dgDataProvider.getItemAt(iRow)) { attributes[id] = dgDataProvider.getItemAt(iRow)[id]; } var feature:Graphic = new Graphic(null, null, attributes); updates.push(feature); } featureLayer.applyEdits(null,updates,null); }
function saveUpdatesFromDG():void{ var updates:Array = []; for(var iRow:Number = 0; iRow<dgDataProvider.length; iRow ++) { var attributes:Object = {}; for (var id:String in dgDataProvider.getItemAt(iRow)) { attributes[id] = dgDataProvider.getItemAt(iRow)[id]; } var feature:Graphic = new Graphic(null, null, attributes); updates.push(feature); } featureLayer.applyEdits(null,updates,null); }