Hello All,
I am running ArcGIS Pro 2.8. I am also experimenting with Visual Studio to build an add-in with a button. I want the button to run a python script which calculates the geometry attributes (acres) of a selected polygon and then I plan to make the add-in button available to our users in the office. I was going to build a model in ArcGIS Pro which uses the "Calculate Geometry Attributes" tool to do this, but I quickly realized a few issues: #1 use the feature that is hard coded to my profile path and #2 not sure it will allow me to add a parameter to require the use to select the feature they want calculated due to the the issue with #3 the data source is a polygon stored in an SDE which is versioned. Any suggestions?
Solved! Go to Solution.
I did try exporting it several times. That logical operator is only meant for model builder. I think what I am going to do at this point is just build the model to select all parcel features that contain a null value and then use that selection to calculate the geometry attributes.
Thank you for all your help. Sorry this one wasn't solved. 😕
I already did that several times. I am going to just eliminate that logical operation from the model in order to export it as a script. Its not optimal though. Unfortunately this wasn't solved.
With arcpy, you can find the layer you want by looking at the data source, validate if a feature is selected, and run calculate field on the layer (so it only calculates the selected field). You may need to use the Editor class to start and stop an edit session. Alternatively, you could put that responsibility on the user to start an edit session. Catch and handle the error that arises when not in an edit session and display a helpful message in the geoprocessing results indicating to the user what they need to do.
Thank you for your reply. I am not a python programmer, but I have written python code from models and geoprocessing tasks in ArcGIS Pro. Would you be so kind to point me to the specific tools and the order I should run them in the model? I would then use the model to create a python script which would be executed in the add-in button "On Click" function.
I'm not sure about making a custom selection and validating it with a model, but here are the tools I would use for writing my Python script.
Thank you again for the information but its not exactly what I am trying to do with this workflow. The mapping module requires that I have a set project for this button to work and unfortunately our users all have their own projects and edit versions. I would basically need to set the selection request from the user and have them select the feature. Based on their selection, the calculation of the geometry attribute would occur. I am looking into doing a model with parameters but having difficulty with that as well.
Amanda
You can get the "current" project that is open running the script.
Guidelines for arcpy.mp—ArcGIS Pro | Documentation
aprx = arcpy.mp.ArcGISProject('current')
OK... so aprx is a variable correct? Would I need to call up a selection of the polygon feature class also? I want to use this in the calculate geometry attributes tool as an input.
Yes, aprx is the variable name for the current ArcGISProject object in the line of code I posted. Once you have that project, you will need to identify the Map in the project you want. If you know it by name for everyone, that's best. Otherwise, you'd have to look at all the maps to find a layer with the feature class name you want. Once you find the layer (by name) in the map of the project, step 1 I described above is complete.
I want to use "current" so that when they open whatever project they have with the layer "parcel" for instance, that I can just find the selection made in the "parcel" layer and perform the calculate geometry attributes geoprocessing tool on the current selection. This really shouldn't be this hard, but I am terrible with writing code from scratch and therefore having to do a lot of reading to figure out the correct format.
Is it safe to assume the layer will always have the same name ("parcel") or would it be better to check the data source of the layer for the feature class name?