The server won't return the query results with the name instead of the value, but you can use the LayerDetails.fields and types to get to the domains and then show the name instead of the value when you're displaying the results.
Reference:
http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/supportClasses/LayerDetails.html
http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/supportClasses/Domain.html
<?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="Query with Domain Values Returned" currentState="test"> <!-- This sample shows how to query the server and displaying the result in a datagrid with domain values returned or not. This sample sets up a QueryTask (what layer on what server to query). When the user clicks the "Search" button, a Query is sent. The results are displayed in the DataGrid and if the option for "results with domain values" is chosen than the featurelayers' layerDetails fields is used to retrieve the value of the domain. --> <fx:Declarations> <s:RadioButtonGroup id="qGroup"/> </fx:Declarations> <s:layout> <s:VerticalLayout gap="0" horizontalAlign="center"/> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.Graphic; import com.esri.ags.layers.supportClasses.CodedValue; import com.esri.ags.layers.supportClasses.CodedValueDomain; import com.esri.ags.layers.supportClasses.Domain; import com.esri.ags.layers.supportClasses.LayerDetails; import com.esri.ags.layers.supportClasses.RangeDomain; 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.utils.ObjectUtil; private function getDomainValue(fieldName:String,code:String):String { var returnValue:String = ""; var fld:Object; var cVal:CodedValue; var cDomain:CodedValueDomain; for each (fld in fLayer.layerDetails.fields) { if(fld.name == fieldName){ cDomain = fld.domain; if (cDomain){ for each (cVal in cDomain.codedValues) { if(cVal.code == code) returnValue = cVal.name; } } } } return returnValue; } protected function doQuery():void { myMap.cursorManager.setBusyCursor(); var queryTask:QueryTask = new QueryTask("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/MapServer/0"); queryTask.useAMF = true; var query:Query = new Query(); query.where = "status > 1"; query.outFields = ["*"]; query.returnGeometry = true; query.outSpatialReference = myMap.spatialReference; queryTask.execute(query, new AsyncResponder(onResult, onFault)); // on result function onResult(featureSet:FeatureSet, token:Object = null):void { try { var qResults:Array = []; for each (var myGraphic:Graphic in featureSet.features) { var qObj:Object = new Object(); var obj:Object = myGraphic.attributes; var fld:String; var value:String; for (fld in obj) { try{ value = obj[fld].toString(); } catch (error: Error){ value = ""; } if (fld.toUpperCase().indexOf("SHAPE") < 0) { if(qGroup.selectedValue == "Results with domain values"){ var cval:String = getDomainValue(fld,value); if (cval != "") value = cval; } qObj[fld] = value; } } qResults.push(qObj); } resultsGrid.dataProvider = qResults; myMap.cursorManager.removeBusyCursor(); } catch (error:Error) { Alert.show(error.message); } } //on fault function onFault(info:Object, token:Object = null) : void { Alert.show(info.toString()); } } ]]> </fx:Script> <s:controlBarLayout> <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle" paddingBottom="7" paddingTop="7"/> </s:controlBarLayout> <s:controlBarContent> <s:RadioButton groupName="qGroup" label="Results with domain values"/> <s:RadioButton groupName="qGroup" label="Results with out domain values (Normal Results)" selected="true"/> <s:Button click="doQuery()" label="Search"/> </s:controlBarContent> <esri:Map id="myMap"> <esri:extent> <esri:Extent xmin="-14181000" ymin="4306000" xmax="-12917000" ymax="4767000"> <esri:SpatialReference wkid="102100"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <esri:FeatureLayer id="fLayer" mode="onDemand" outFields="*" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/MapServer/0"/> </esri:Map> <mx:DataGrid id="resultsGrid" width="100%"> <mx:columns> <mx:DataGridColumn dataField="req_id" headerText="Request Id"/> <mx:DataGridColumn dataField="req_type" headerText="Request Type"/> <mx:DataGridColumn dataField="req_date" headerText="Request Date"/> <mx:DataGridColumn dataField="req_time" headerText="Request Time"/> <mx:DataGridColumn dataField="address" headerText="Address"/> <mx:DataGridColumn dataField="district" headerText="District"/> <mx:DataGridColumn dataField="status" headerText="Status, Domain"/> </mx:columns> </mx:DataGrid> </s:Application>
private function getcodedValues(fieldName:String):ArrayCollection { var returnValues:ArrayCollection=new ArrayCollection(); var fld:Object; var cVal:CodedValue; var cDomain:CodedValueDomain; for each (fld in myFeatureLayer.layerDetails.fields) { if(fld.name==fieldName) { cDomain=fld.domain; if (cDomain) { for each (cVal in cDomain.codedValues) { returnValues.addItem({label:cVal.name,data:cVal.code}); } } } } return returnValues; }
Don,
I am not sure why the api team has not shared a sample for this yet, so I created one.<?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="Query with Domain Values Returned" currentState="test"> <!-- This sample shows how to query the server and displaying the result in a datagrid with domain values returned or not. This sample sets up a QueryTask (what layer on what server to query). When the user clicks the "Search" button, a Query is sent. The results are displayed in the DataGrid and if the option for "results with domain values" is chosen than the featurelayers' layerDetails fields is used to retrieve the value of the domain. --> <fx:Declarations> <s:RadioButtonGroup id="qGroup"/> </fx:Declarations> <s:layout> <s:VerticalLayout gap="0" horizontalAlign="center"/> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.Graphic; import com.esri.ags.layers.supportClasses.CodedValue; import com.esri.ags.layers.supportClasses.CodedValueDomain; import com.esri.ags.layers.supportClasses.Domain; import com.esri.ags.layers.supportClasses.LayerDetails; import com.esri.ags.layers.supportClasses.RangeDomain; 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.utils.ObjectUtil; private function getDomainValue(fieldName:String,code:String):String { var returnValue:String = ""; var fld:Object; var cVal:CodedValue; var cDomain:CodedValueDomain; for each (fld in fLayer.layerDetails.fields) { if(fld.name == fieldName){ cDomain = fld.domain; if (cDomain){ for each (cVal in cDomain.codedValues) { if(cVal.code == code) returnValue = cVal.name; } } } } return returnValue; } protected function doQuery():void { myMap.cursorManager.setBusyCursor(); var queryTask:QueryTask = new QueryTask("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/MapServer/0"); queryTask.useAMF = true; var query:Query = new Query(); query.where = "status > 1"; query.outFields = ["*"]; query.returnGeometry = true; query.outSpatialReference = myMap.spatialReference; queryTask.execute(query, new AsyncResponder(onResult, onFault)); // on result function onResult(featureSet:FeatureSet, token:Object = null):void { try { var qResults:Array = []; for each (var myGraphic:Graphic in featureSet.features) { var qObj:Object = new Object(); var obj:Object = myGraphic.attributes; var fld:String; var value:String; for (fld in obj) { try{ value = obj[fld].toString(); } catch (error: Error){ value = ""; } if (fld.toUpperCase().indexOf("SHAPE") < 0) { if(qGroup.selectedValue == "Results with domain values"){ var cval:String = getDomainValue(fld,value); if (cval != "") value = cval; } qObj[fld] = value; } } qResults.push(qObj); } resultsGrid.dataProvider = qResults; myMap.cursorManager.removeBusyCursor(); } catch (error:Error) { Alert.show(error.message); } } //on fault function onFault(info:Object, token:Object = null) : void { Alert.show(info.toString()); } } ]]> </fx:Script> <s:controlBarLayout> <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle" paddingBottom="7" paddingTop="7"/> </s:controlBarLayout> <s:controlBarContent> <s:RadioButton groupName="qGroup" label="Results with domain values"/> <s:RadioButton groupName="qGroup" label="Results with out domain values (Normal Results)" selected="true"/> <s:Button click="doQuery()" label="Search"/> </s:controlBarContent> <esri:Map id="myMap"> <esri:extent> <esri:Extent xmin="-14181000" ymin="4306000" xmax="-12917000" ymax="4767000"> <esri:SpatialReference wkid="102100"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <esri:FeatureLayer id="fLayer" mode="onDemand" outFields="*" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/MapServer/0"/> </esri:Map> <mx:DataGrid id="resultsGrid" width="100%"> <mx:columns> <mx:DataGridColumn dataField="req_id" headerText="Request Id"/> <mx:DataGridColumn dataField="req_type" headerText="Request Type"/> <mx:DataGridColumn dataField="req_date" headerText="Request Date"/> <mx:DataGridColumn dataField="req_time" headerText="Request Time"/> <mx:DataGridColumn dataField="address" headerText="Address"/> <mx:DataGridColumn dataField="district" headerText="District"/> <mx:DataGridColumn dataField="status" headerText="Status, Domain"/> </mx:columns> </mx:DataGrid> </s:Application>