3

I need to define a required field parameter, and I'd like it to work with both existing and new fields, i.e. regardless of whether the field already exists.

The problem is, if I enter a new (non-existing field), I get error 000728: Field ... does not exist within table.

This must be due to the parameterDependencies property, but without it I would not get a dropdown allowing to select an existing field. The direction parameter does not seem to matter (Input or Output).

Basically, I'd like to be able to use the drop-down field selection when the field exists, and enter the name directly for a new field. This sounds pretty basic, I must be missing something simple. Could this be done?

Here is a sample *.pyt code to illustrate what I am trying to do.

import arcpy

class Toolbox(object):
    def __init__(self):
        self.label = "[Test] Select existing or new field"

        # List of tool classes associated with this toolbox
        self.tools = [Test_SelectExistingOrNewField]


class Test_SelectExistingOrNewField(object):
    def __init__(self):
        self.label = "Select existing or new field"
        self.description = ""

    def getParameterInfo(self):
        # Feature class where an existing field resides, or a new field will be added to
        p0 = arcpy.Parameter(
                        displayName   = "Input feature class",
                        name          = "fc",
                        datatype      = "DEFeatureClass",
                        parameterType = "Required",
                        direction     = "Input")

        # Name of the output field in the `normals` feature class which will contain the final (conflated) Z values.
        p1 = arcpy.Parameter(
                        displayName   = "Existing or new field name in the input feature class",
                        name          = "fld",
                        datatype      = "Field",
                        parameterType = "Required",
                        direction     = "Output")
        p1.parameterDependencies = [p0.name]
        p1.value = 'AField'

        return [p0, p1]

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return

    def execute(self, parameters, messages):
        pass
4
  • Make two parameters, one for existing, one for new, and then just handle it in the code
    – Midavalo
    Commented May 13, 2016 at 22:27
  • I think that would work, but would be quite confusing for users to have 2 parameters for the same purpose. I am hoping there may be a simpler and more elegant way ...
    – A. Naumov
    Commented May 16, 2016 at 15:44
  • If you include a test Python Toolbox (*.pyt) rather than just this small part of it then you may attract a potential answerer to give it a test and experiment with modifications.
    – PolyGeo
    Commented May 17, 2016 at 9:42
  • Thanks for the suggestion, I modified the post to include a complete *.pyt code.
    – A. Naumov
    Commented May 26, 2016 at 17:04

1 Answer 1

1

Similar response to Midavalo on the 13th May except add a Boolean parameter so the user can select an existing field or enter a new field. i.e. Add two additional input parameters

  1. Boolean parameter to process an existing field from an input feature class or a new field
  2. New field

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.