フィールドの追加の ToolValidator
次の例は、[フィールドの追加(Add Field)] ツールの整合チェックをエミュレートしたものです。[フィールドの追加(Add Field)] はシステム ツールであるため、ToolValidator クラスを持ちません。しかし、もし ToolValidator クラスがあれば、次のようになります。
確認のために、[フィールドの追加(Add Field)] のパラメータとデータ タイプを以下に示します。
- 0 - 入力テーブル: Composite データ タイプ、すべてのテーブルを含みます
- 1 - フィールド名: String
- 2 - フィールド タイプ: String(LONG、SHORT、DOUBLE など)
- 3 - フィールドの精度:Long
- 4 - フィールドのスケール:Long
- 5 - フィールド長:Long
- 6 - フィールドのエイリアス:String
- 7 - フィールドの IsNullable:Boolean
- 8 - フィールドの IsRequired:Boolean
- 9 - フィールドのドメイン:String
- 0 - 出力テーブル:派生出力、取得元パラメータ 0
次の例は、[フィールドの追加(Add Field)] ツールの整合チェックをエミュレートしたものです。
class ToolValidator: def __init__(self): import arcpy self.params = arcpy.GetParameterInfo() def initializeParameters(self): # The derived output is a clone (copy) of the input # self.params[10].parameterDependencies = [0] self.params[10].schema.clone = True # Set up the field type list # self.params[2].filter.list = ["TEXT", "FLOAT", "DOUBLE", "SHORT", "LONG", "DATE", "BLOB", "RASTER"] # The default field type is LONG # self.params[2].value = "LONG" # Field scale & Length are disabled for LONG types # self.params[4].enabled = False self.params[5].enabled = False # Set the Boolean filters for IsNullable and IsRequired and # their default values # self.params[7].filter.list = ["NULLABLE", "NON_NULLABLE"] self.params[7].value = "NULLABLE" self.params[8].filter.list = ["REQUIRED", "NON_REQUIRED"] self.params[8].value = "NON_REQUIRED" return def updateParameters(self): # Set the default field type value unless the user altered it # if not self.params[2].altered: self.params[2].value = "LONG" # Enable/Disable parameters based on field type # fieldType = self.params[2].value.upper() if fieldType in ["TEXT", "BLOB"]: self.params[3].enabled = False self.params[4].enabled = False self.params[5].enabled = True elif fieldType in ["FLOAT", "DOUBLE"]: self.params[3].enabled = True self.params[4].enabled = True self.params[5].enabled = False elif fieldType in ["SHORT", "LONG"]: self.params[3].enabled = True self.params[4].enabled = False self.params[5].enabled = False elif fieldType in ["DATE", "RASTER"]: self.params[3].enabled = False self.params[4].enabled = False self.params[5].enabled = False else: # Unknown field type. Internal validation will catch this # and show an error. We might as well return here and let # internal validation do its work. # return # Update the output schema with the new field. Don't do anything # unless we have an input value and a field name # if self.params[0].value and self.params[1].value: newField = arcpy.Field() newField.name = self.params[1].value newField.type = self.params[2].value # Set up the field properties based on type of field # if self.params[3].value and self.params[3].enabled: newField.precision = self.params[3].value if self.params[4].value and self.params[4].enabled: newField.scale = self.params[4].value if self.params[5].value and self.params[5].enabled: newField.length = self.params[5].value if self.params[6].value: newField.aliasName = self.params[6].value newField.isNullable = self.params[7].value # Note: IsRequired is not a property on a field object -- it's # handled internally by the Add Field system tool. # if self.params[9].value: newField.domain = self.params[9].value # Set the additional field on the output schema # self.params[10].schema.additionalFields = [newField] def updateMessages(self): return
7/10/2012