ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

ArcMap

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Дополнительные модули

Валидатор инструмента (ToolValidator) Добавить поле (Add Field)

В данном примере имитируется проверка инструмента Добавить поле (Add Field). Поскольку Добавить поле (Add Field) является встроенным инструментом, он не имеет класс Валидатор инструментов (ToolValidator). Но если бы он его имел, то это выглядело бы примерно вот так.

Для просмотра, вот параметры для Добавить поле (Add Field) и типы их данных:

  • 0 – Входная таблица: сложный тип данных, включает все таблицы
  • 1 – Имя поля: String (Строка)
  • 2 – Тип поля: String - Строка (LONG - длинная, SHORT -короткая, DOUBLE - двойная и т.д.)
  • 3 - Field Precision - точность поля: Long (длинная)
  • 4 - Field Scale - порядок поля: Long - длинный
  • field = "LENGTH"
  • 6 - Field Alias – псевдоним поля: String - строка
  • 7 - Field IsNullable – поле нулевое: Boolean - Булево
  • 8 - Field IsRequired – поле обязательное: Boolean - Булево
  • 9 - Field Domain – Домен поля: 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

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог Esri
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2021 Esri. | Конфиденциальность | Правовая информация