Hey Jason,The Edit Widget is using the out-of-box Editor component. The Editor component uses AttributeInspector(http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/components/Editor.html#attributeInspector) to show/edit the attribute fields.You can order the fields by using AttributeInspectot.formItemsOrder(http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/components/AttributeInspector.html#formItemsOrder) propertyHere's a sample of how it is done using the API(you could do something similar in the Edit Widget's code, In this case the fields are ordered using the fieldInspector) :http://help.arcgis.com/en/webapi/flex/samples/index.html?sample=AttributeInspectorOutsideMapAs far as snapping is concerned, it is not there right now, but we still have plans to add it sometime in a future release.Hope that helps.
// This function establishes the attribute edit environment. // In particular, the order in which fields are presented, // and the labels attached to those fields. Lastly, fields // that should not be user editable are made not visible. private function createFieldInspectors():void { editor.attributeInspector.formItemsOrder = "fieldInspector"; var layer:Layer; var fLayer:FeatureLayer; layer = map.getLayer("Draft Conservation Land"); fLayer = layer as FeatureLayer; var field0:FieldInspector = new FieldInspector(); field0.featureLayer = fLayer; field0.fieldName = "NAME"; field0.label = "Parcel Name"; editor.attributeInspector.fieldInspectors.push(field0); var field0a:FieldInspector = new FieldInspector(); field0a.featureLayer = fLayer; field0a.fieldName = "P_RSIZE"; field0a.label = "Parcel Size (acres)"; editor.attributeInspector.fieldInspectors.push(field0a); var field0b:FieldInspector = new FieldInspector(); field0b.featureLayer = fLayer; field0b.fieldName = "RSIZE"; field0b.label = "Tract Size (acres)"; editor.attributeInspector.fieldInspectors.push(field0b); var field1:FieldInspector = new FieldInspector(); field1.featureLayer = fLayer; field1.fieldName = "PPTYPE"; field1.label = "Primary Protection Type"; editor.attributeInspector.fieldInspectors.push(field1); var field2:FieldInspector = new FieldInspector(); field2.featureLayer = fLayer; field2.fieldName = "PPAGENCY"; field2.label = "Primary Protection Agency"; editor.attributeInspector.fieldInspectors.push(field2); var field3:FieldInspector = new FieldInspector(); field3.featureLayer = fLayer; field3.fieldName = "PROGRAM"; field3.label = "Protection Program"; editor.attributeInspector.fieldInspectors.push(field3); // fields to omit from user editing var fieldx1:FieldInspector = new FieldInspector(); fieldx1.featureLayer = fLayer; fieldx1.fieldName = "TID"; fieldx1.visible = false; editor.attributeInspector.fieldInspectors.push(fieldx1); var fieldx2:FieldInspector = new FieldInspector(); fieldx2.featureLayer = fLayer; fieldx2.fieldName = "PID"; fieldx2.visible = false; editor.attributeInspector.fieldInspectors.push(fieldx2); var fieldx3:FieldInspector = new FieldInspector(); fieldx3.featureLayer = fLayer; fieldx3.fieldName = "CSIZE"; fieldx3.visible = false; editor.attributeInspector.fieldInspectors.push(fieldx3); var fieldx4:FieldInspector = new FieldInspector(); fieldx4.featureLayer = fLayer; fieldx4.fieldName = "P_CSIZE"; fieldx4.visible = false; editor.attributeInspector.fieldInspectors.push(fieldx4); }
<editablelayer> <layername>Sample Layer</layername> <fieldnames>FIELD1,FIELD2</fieldnames> <fieldlabels>Field1,Field2</fieldlabels> <hiddenfields>FIELD3</hiddenfields> </editablelayer>
[Bindable] private var showAttributesText:String; /* MODIFICATION -- setup variables for FieldInspector values from configXML */ private var editableLayerName:String; private var editableLayerFieldNames:Array; private var editableLayerFieldLabels:Array; private var editableLayerHiddenFields:Array; /* MODIFICATION -- END */ private function basewidget_widgetConfigLoaded(event:Event):void { // hide map infowindow if any map.infoWindow.hide(); if (configXML) { // MODIFICATION -- load configuration values for FieldInspector into variables editableLayerName = configXML.editablelayer.layername; if (configXML.editablelayer.fieldnames.length() > 0) { // add field names to array editableLayerFieldNames = []; const tempFieldArray:Array = configXML.editablelayer.fieldnames.split(","); for (var count1:Number = 0; count1 < tempFieldArray.length; count1++) { editableLayerFieldNames.push(tempFieldArray[count1]); } } if (configXML.editablelayer.fieldlabels.length() > 0) { // add field labels to array editableLayerFieldLabels = []; const tempLabelArray:Array = configXML.editablelayer.fieldlabels.split(","); for (var counter2:Number = 0; counter2 < tempLabelArray.length; counter2++) { editableLayerFieldLabels.push(tempLabelArray[counter2]); } } if (configXML.editablelayer.fieldlabels.length() > 0) { // add names of hidden fields to array editableLayerHiddenFields = []; const tempHiddenFieldArray:Array = configXML.editablelayer.hiddenfields.split(","); for (var count3:Number = 0; count3 < tempHiddenFieldArray.length; count3++) { editableLayerHiddenFields.push(tempHiddenFieldArray[count3]); } } // MODIFICATION -- END geometryService.url = configXML.geometryservice; const configToolbarVisible:Boolean = configXML.toolbarvisible == "true"; editor.toolbarVisible = configToolbarVisible; const configToolbarCutVisible:Boolean = configXML.toolbarcutvisible == "true"; editor.toolbarCutVisible = configToolbarCutVisible; const configToolbarMergeVisible:Boolean = configXML.toolbarmergevisible == "true"; editor.toolbarMergeVisible = configToolbarMergeVisible; const configToolbarReshapeVisible:Boolean = configXML.toolbarreshapevisible == "true"; editor.toolbarReshapeVisible = configToolbarReshapeVisible; if (configXML.createoptions.length() > 0) { createOptions.polygonDrawTools = new Array(); createOptions.polylineDrawTools = new Array(); if (configXML.createoptions.polygondrawtools.length() > 0) { const polygonDrawToolsList:Array = configXML.createoptions.polygondrawtools.split(","); for (var i:Number = 0; i < polygonDrawToolsList.length; i++) { createOptions.polygonDrawTools.push(polygonDrawToolsList); } } if (configXML.createoptions.polylinedrawtools.length() > 0) { const polylineDrawToolsList:Array = configXML.createoptions.polylinedrawtools.split(","); for (var j:Number = 0; j < polylineDrawToolsList.length; j++) { createOptions.polylineDrawTools.push(polylineDrawToolsList); } } editor.createOptions = createOptions; } //excludeLayers excludeLayers = []; var layers:XMLList = configXML.excludelayer as XMLList; for (var n:Number = 0; n < layers.length(); n++) { excludeLayers.push(layers.toString()); } //deleteFeatures if (configXML.deletefeatures.length() > 0) { deleteFeatures = configXML.deletefeatures == "true"; } editor.deleteEnabled = attachmentInspector.deleteEnabled = deleteFeatures; //labels if (configXML.labels.attributeslabel[0]) { attributesLabel = configXML.labels.attributeslabel[0]; } if (configXML.labels.attachmentslabel[0]) { attachmentsLabel = configXML.labels.attachmentslabel[0]; } // featurelayernotvisibletext EditWidgetTemplatePickerSkin.featureLayerNotVisibleText = configXML.featurelayernotvisibletext || "feature layer is either not visible or out of scale range"; // showattachmentstext EditWidgetAttributeInspectorSkin.showAttachmentsText = configXML.showattachmentstext || "Show Attachments"; // showattributestext showAttributesText = configXML.showattributestext || "Show Attributes"; } // MODIFICATION -- call function to setup FieldInspector createFieldInspectors(); // MODIFICATION -- END map.infoWindow.addEventListener(Event.CLOSE, infoWindowCloseHandler); ViewerContainer.dispatchEvent(new AppEvent(AppEvent.DATA_OPT_LAYERS, null, getOplayers)); }
// This function establishes the attribute edit environment. // In particular, the order in which fields are presented, // and the labels attached to those fields. Lastly, fields // that should not be user editable are made not visible. private function createFieldInspectors():void { editor.attributeInspector.formItemsOrder = "fieldInspector"; var layer:Layer; var fLayer:FeatureLayer; layer = map.getLayer(editableLayerName); fLayer = layer as FeatureLayer; var field:FieldInspector; var fieldHidden:FieldInspector; // Setup FieldInspectors for visible fields // Assumption: both editableLayerFieldNames and editableLayerFieldLabels will have the same number of elements for (var i:Number = 0; i < editableLayerFieldNames.length; i++) { field = new FieldInspector(); field.featureLayer = fLayer; field.fieldName = editableLayerFieldNames; field.label = editableLayerFieldLabels; editor.attributeInspector.fieldInspectors.push(field); } // Setup FieldInspectors for hidden fields for (var j:Number = 0; j < editableLayerHiddenFields.length; j++) { fieldHidden = new FieldInspector(); fieldHidden.featureLayer = fLayer; fieldHidden.fieldName = editableLayerHiddenFields; fieldHidden.visible = false; editor.attributeInspector.fieldInspectors.push(fieldHidden); } }
<editablelayers> <editablelayer> <layername>Sample Layer</layername> <fieldnames>FIELD1,FIELD2</fieldnames> <fieldlabels>Field1,Field2</fieldlabels> <hiddenfields>FIELD3</hiddenfields> </editablelayer> <editablelayer> <layername>Sample Layer 2</layername> <fieldnames>FIELD1,FIELD2</fieldnames> <fieldlabels>Field1,Field2</fieldlabels> <hiddenfields>FIELD3</hiddenfields> </editablelayer> <editablelayers>
private function basewidget_widgetConfigLoaded(event:Event):void { // hide map infowindow if any map.infoWindow.hide(); if (configXML) { geometryService.url = configXML.geometryservice; const configToolbarVisible:Boolean = configXML.toolbarvisible == "true"; editor.toolbarVisible = configToolbarVisible; const configToolbarCutVisible:Boolean = configXML.toolbarcutvisible == "true"; editor.toolbarCutVisible = configToolbarCutVisible; const configToolbarMergeVisible:Boolean = configXML.toolbarmergevisible == "true"; editor.toolbarMergeVisible = configToolbarMergeVisible; const configToolbarReshapeVisible:Boolean = configXML.toolbarreshapevisible == "true"; editor.toolbarReshapeVisible = configToolbarReshapeVisible; if (configXML.createoptions.length() > 0) { createOptions.polygonDrawTools = new Array(); createOptions.polylineDrawTools = new Array(); if (configXML.createoptions.polygondrawtools.length() > 0) { const polygonDrawToolsList:Array = configXML.createoptions.polygondrawtools.split(","); for (var i:Number = 0; i < polygonDrawToolsList.length; i++) { createOptions.polygonDrawTools.push(polygonDrawToolsList); } } if (configXML.createoptions.polylinedrawtools.length() > 0) { const polylineDrawToolsList:Array = configXML.createoptions.polylinedrawtools.split(","); for (var j:Number = 0; j < polylineDrawToolsList.length; j++) { createOptions.polylineDrawTools.push(polylineDrawToolsList); } } editor.createOptions = createOptions; } //excludeLayers excludeLayers = []; var layers:XMLList = configXML.excludelayer as XMLList; for (var n:Number = 0; n < layers.length(); n++) { excludeLayers.push(layers.toString()); } //deleteFeatures if (configXML.deletefeatures.length() > 0) { deleteFeatures = configXML.deletefeatures == "true"; } editor.deleteEnabled = attachmentInspector.deleteEnabled = deleteFeatures; //labels if (configXML.labels.attributeslabel[0]) { attributesLabel = configXML.labels.attributeslabel[0]; } if (configXML.labels.attachmentslabel[0]) { attachmentsLabel = configXML.labels.attachmentslabel[0]; } /*MODIFICATIONS */ var editablelayers:XMLList = configXML.editablelayers as XMLList; var editableLayerFieldNames:Array; var editableLayerFieldLabels:Array; var editableLayerHiddenFields:Array; for each(var eLayer:XML in editablelayers.children()) { if (eLayer.fieldnames.length() > 0) { // add field names to array editableLayerFieldNames = []; const tempFieldArray:Array = eLayer.fieldnames.split(","); for (var count1:Number = 0; count1 < tempFieldArray.length; count1++) { editableLayerFieldNames.push(tempFieldArray[count1]); } } if (eLayer.fieldlabels.length() > 0) { // add field labels to array editableLayerFieldLabels = []; const tempLabelArray:Array = eLayer.fieldlabels.split(","); for (var counter2:Number = 0; counter2 < tempLabelArray.length; counter2++) { editableLayerFieldLabels.push(tempLabelArray[counter2]); } } if (eLayer.fieldlabels.length() > 0) { // add names of hidden fields to array editableLayerHiddenFields = []; const tempHiddenFieldArray:Array = eLayer.hiddenfields.split(","); for (var count3:Number = 0; count3 < tempHiddenFieldArray.length; count3++) { editableLayerHiddenFields.push(tempHiddenFieldArray[count3]); } } createFieldInspectors(eLayer.layername,editableLayerFieldNames,editableLayerFieldLabels,editableLayerHiddenFields); } // MODIFICATION -- END // featurelayernotvisibletext EditWidgetTemplatePickerSkin.featureLayerNotVisibleText = configXML.featurelayernotvisibletext || "feature layer is either not visible or out of scale range"; // showattachmentstext EditWidgetAttributeInspectorSkin.showAttachmentsText = configXML.showattachmentstext || "Show Attachments"; // showattributestext showAttributesText = configXML.showattributestext || "Show Attributes"; } map.infoWindow.addEventListener(Event.CLOSE, infoWindowCloseHandler); ViewerContainer.dispatchEvent(new AppEvent(AppEvent.DATA_OPT_LAYERS, null, getOplayers)); }
// This function establishes the attribute edit environment. // In particular, the order in which fields are presented, // and the labels attached to those fields. Lastly, fields // that should not be user editable are made not visible. private function createFieldInspectors(editableLayerName:String, editableLayerFieldNames:Array, editableLayerFieldLabels:Array, editableLayerHiddenFields:Array):void { editor.attributeInspector.formItemsOrder = "fieldInspector"; var layer:Layer; var fLayer:FeatureLayer; layer = map.getLayer(editableLayerName); //if layer is null, you entered the wrong name in the layername tag of the specific editablelayer if(!layer) return; fLayer = layer as FeatureLayer; var field:FieldInspector; var fieldHidden:FieldInspector; // Setup FieldInspectors for visible fields // Assumption: both editableLayerFieldNames and editableLayerFieldLabels will have the same number of elements for (var i:Number = 0; i < editableLayerFieldNames.length; i++) { field = new FieldInspector(); field.featureLayer = fLayer; field.fieldName = editableLayerFieldNames; field.label = editableLayerFieldLabels; editor.attributeInspector.fieldInspectors.push(field); } // Setup FieldInspectors for hidden fields for (var j:Number = 0; j < editableLayerHiddenFields.length; j++) { fieldHidden = new FieldInspector(); fieldHidden.featureLayer = fLayer; fieldHidden.fieldName = editableLayerHiddenFields; fieldHidden.visible = false; editor.attributeInspector.fieldInspectors.push(fieldHidden); } }
private function createFieldInspectors():void { var layer:Layer; var fLayer:FeatureLayer; layer = map.getLayer(editableLayerName); fLayer = layer as FeatureLayer; editor.attributeInspector.formItemsOrder = "fieldInspector"; var field:FieldInspector; var fieldHidden:FieldInspector; // Setup FieldInspectors for visible fields // Assumption: both editableLayerFieldNames and editableLayerFieldLabels will have the same number of elements for (var i:Number = 0; i < editableLayerFieldNames.length; i++) { field = new FieldInspector(); field.featureLayer = fLayer; field.fieldName = editableLayerFieldNames; field.label = editableLayerFieldLabels; editor.attributeInspector.fieldInspectors.push(field); } // Setup FieldInspectors for hidden fields for (var j:Number = 0; j < editableLayerHiddenFields.length; j++) { fieldHidden = new FieldInspector(); fieldHidden.featureLayer = fLayer; fieldHidden.fieldName = editableLayerHiddenFields; fieldHidden.visible = false; editor.attributeInspector.fieldInspectors.push(fieldHidden); } }
Greetings all!I'm finding the code samples here to be very useful, especially the extention of functionality controlled by the EditWidget.xml file, but can anyone point me to a good comprehensive review of all the base tags that the EditWidget understands out of the box?- Bob
I'm having difficulty getting this to work for 2.4.I've copied in the code between the /*MODIFICATIONS*/ comments in hbostic's post to the basewidget_widgetConfigLoaded function within the if (configXML) statement, and added the createFieldInspectors function. I assume the rest of the EditWidget.mxml displayed was from a version previous to 2.4.I also added the import com.esri.ags.components.supportClasses.FieldInspector; statement and added the closing slash in the </editablelayers> xml tag, as mentioned by NeoGeo.When I run the widget I see no difference in the widgets behaviour. Can anyone who has managed to get this to work please offer some help? (jvroegop maybe?)Cheers,KarlAttached is my full EditWidget.mxml
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.