RAJ,
You need to start a new thread in the JS API space as this space is about an old technology called Flex.
Hi Robert, i saw lots of discussions on coded Domain values when doing Query tasks. But not a single is useful for me yet. I am having same question as you explain here. Can you please help me with the same for 4.9 API.
I am having 2 attributes with coded values..I want to add a drop down menu to selecting values for that specific attribute. So user can select specific value of that attribute and perform query task.
Right now am using below function..
Thank you.
let Status = new Query({ returnGeometry: false, where: '1=1', returnDistinctValues: true, outFields: ['STATUS'] }); qTask1.execute(Status).then(function(results) { results.features.map(function(feat) { let opt5 = document.createElement('option'); opt5.value = feat.attributes.STATUS; opt5.innerHTML = feat.attributes.STATUS; stadd.appendChild(opt5); });view.graphic.add(selectedGraphics); });let qSubtype = new Query({ returnGeometry: false, where: '1=1', returnDistinctValues: true, outFields: ['SUBTYPE'] }); qTask72.execute(qSubtype).then(function(results) { results.features.map(function(feat) { let opt3 = document.createElement('option'); opt3.value = feat.attributes.SUBTYPE; opt3.innerHTML = feat.attributes.SUBTYPE; subdd.appendChild(opt3); }); view.graphic.add(selectedGraphics); });
let Status = new Query({ returnGeometry: false, where: '1=1', returnDistinctValues: true, outFields: ['STATUS'] }); qTask1.execute(Status).then(function(results) { results.features.map(function(feat) { let opt5 = document.createElement('option'); opt5.value = feat.attributes.STATUS; opt5.innerHTML = feat.attributes.STATUS; stadd.appendChild(opt5); });view.graphic.add(selectedGraphics); });
let qSubtype = new Query({ returnGeometry: false, where: '1=1', returnDistinctValues: true, outFields: ['SUBTYPE'] }); qTask72.execute(qSubtype).then(function(results) { results.features.map(function(feat) { let opt3 = document.createElement('option'); opt3.value = feat.attributes.SUBTYPE; opt3.innerHTML = feat.attributes.SUBTYPE; subdd.appendChild(opt3); }); view.graphic.add(selectedGraphics); });
currentState="test"
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>
<?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; }
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.htmlhttp://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/supportClasses/Domain.html
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.