ツールの [OK] ボタンを押す前に、整合チェックを必ず実行します。独自のカスタム ツールを作成する場合、整合チェックによって、パラメータの値に対する動作とパラメータ同士の動作をカスタマイズすることができます。整合チェックは、ツールの動作を制御するために使用される Python コードのブロックを使用して実行されます。
整合チェックの詳細については、「スクリプト ツールの整合チェックの概要」をご参照ください。
Python ツールボックスでは、個々のツール パラメータは、ツールの整合チェックに便利なプロパティとメソッドを備えた Parameter オブジェクトと関連付けられています。Python ツールボックスでは、パラメータの定義はツール クラスの getParameterInfo メソッドで行われます。これらのパラメータの動作と、他のパラメータや入力とやり取りを行う方法は、ツール クラスの updateParameters メソッドに従って整合チェックされます。
ツール パラメータへのアクセス
Parameter オブジェクトは、パラメータの定義方法と Python ツールボックスでのやり取りの方法に関する基礎を構成します。標準的な方法では、次のコードに示すように、ツール クラスの getParameterInfo メソッド内にパラメータのリストを作成します。
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
return [param0]
Python ツールボックスのパラメータを定義する詳細については、「Python ツールボックスのパラメータの定義」をご参照ください。
パラメータ オブジェクト
メソッド
メソッド名 | 使用法の説明 |
---|---|
setErrorMessage(message:string) | パラメータにエラー(赤の X 印)と該当するメッセージがあるとマークします。任意のパラメータにエラーがある場合、ツールは実行できません。 |
setWarningMessage(message:string) | パラメータに警告(黄色の三角印)と該当するメッセージがあるとマークします。エラーと異なり、警告メッセージがある場合でもツールは実行します。 |
setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2}) | システム メッセージを設定できます。引数は、AddIDMessage 関数と同じです。 |
clearMessage() | メッセージのテキストを消去し、ステータスを情報(エラーまたは警告なし)に設定します。 |
hasError() | パラメータにエラーがある場合に true を返します。 |
hasWarning() | パラメータに警告がある場合に true を返します。 |
isInputValueDerived() | ツールがモデル内で整合チェック中で入力値がモデル内にある別のツールの出力である場合に、true を返します。 |
プロパティ
プロパティ名 | Read/Write | 値 | 説明 |
---|---|---|---|
name | Read-only | 文字列 | パラメータ名。 |
direction | Read-only | 文字列:"Input"、"Output" | パラメータの入力または出力の方向。 |
datatype | Read-only | 文字列 | パラメータのデータ タイプのリストについては、「Python ツールボックスにあるパラメータのデータ タイプの定義」をご参照ください。 |
parameterType | Read-only | 文字列:"Required"、"Optional"、"Derived" | パラメータ タイプ。 |
parameterDependencies | Read/write | Python リスト | 各従属パラメータのインデックスのリスト。 |
value | Read/write | Value オブジェクト | パラメータの値。 |
defaultEnvironmentName | Read-only | 文字列 | デフォルトの環境設定。 |
enabled | Read/write | ブール演算 | パラメータが使用不可の場合は false。 |
altered | Read-only | ブール演算 | ユーザが値を変更した場合は true。 |
hasBeenValidated | Read-only | ブール演算 | 内部整合チェック ルーチンがパラメータをチェック済みの場合は true。 |
category | Read/write | 文字列 | パラメータのカテゴリ。 |
schema | Read-only | Schema オブジェクト | 出力データセットのスキーマ。 |
filter | Read-only | Filter オブジェクト | パラメータ内の値に適用するフィルタ。 |
symbology | Read/write | 文字列 | 出力の描画に使用するレイヤ ファイル(*.lyr)のパス。 |
message | Read-only | 文字列 | ユーザに表示するメッセージ。上記の SetErrorMessage および SetWarningMessage をご参照ください。 |
parameterDependencies
パラメータの依存性は、通常、Schema オブジェクトで使用するために設定します。ツールの getParameterInfo メソッドで、依存性がすでに設定されている場合が 2 つあります。
- タイプが Derived の出力データセット パラメータの場合、依存性は出力の派生元となるパラメータのインデックスです。
- 特定の入力データ タイプの場合、次の表に示したように、依存性はコントロールが使用する情報を含むパラメータのインデックスです。
入力データ タイプ | 従属データ タイプ | 説明 |
---|---|---|
フィールドまたは SQL 文 | テーブル | そのフィールドを持つテーブル。 |
INFO アイテムまたは INFO 条件式 | INFO テーブル | そのアイテムを持つ INFO テーブル。 |
カバレッジ フィーチャクラス | カバレッジ | フィーチャを含むカバレッジ。 |
面積単位または距離単位 | ジオデータセット | デフォルト単位を決定するジオグラフィック データセット。 |
座標系 | ワークスペース | デフォルトの座標系を決定するワークスペース。 |
Network Analyst 階層設定 | ネットワーク データセット | 階層情報を持つネットワーク データセット。 |
Geostatistical 値テーブル | Geostatistical レイヤ | テーブルを含む解析レイヤ。 |
通常、依存性は getParameterInfo メソッドで設定されます。
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
value
これは、ユーザが入力したか、プログラムで設定したパラメータの値です。getParameterInfo メソッドで値を設定すると、パラメータの初期のデフォルト値になります。また、以下に示すように、ユーザ入力に対応して updateParameters で値を設定することもできます。
def updateParameters(self, parameters):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (Altered is true).
#
if parameters[0].value:
if not parameters[6].altered:
extent = arcpy.Describe(parameters[0].value).extent
if extent.width > extent.height:
parameters[6].value = extent.width / 100
else:
parameters[6].value = extent.height / 100
return
パラメータの value プロパティはオブジェクトを返します。ただし、パラメータが設定されていない場合、value は None を返します。パラメータが設定されない場合を避けるには、その値を使用する前に if チェックを使用します。
次のコード部では、値が文字列「Get Spatial Weights From File」と等しいかどうかをテストしています。このテストが機能するのは、パラメータのデータ タイプが文字列だからです。
# If the option to use a weights file is selected, enable the
# parameter for specifying the file, otherwise disable it
if parameters[3].value: # check that parameter has a value
if parameters[3].value == "Get Spatial Weights From File":
parameters[8].enabled = True
else:
parameters[8].enabled = False
値オブジェクトは文字列の操作をサポートしていないため、文字列を操作または解析するときは、必ず値オブジェクトの値プロパティを使用します。次のサンプル コードは os.path.dirname メソッドを使用して、データセットからディレクトリを返しています。
if parameters[0].value:
workspace = os.path.dirname(parameters[0].value.value)
altered
altered は、ユーザが出力パスを入力するなど、パラメータの値を変更した場合に true になります。パラメータを変更すると、ユーザが値を空白にするまで変更済みの状態となります。空白にすると、未変更に戻ります。整合チェック コードによって値をプログラムから変更しても、変更済みの状態には変化しません。つまり、パラメータの値を設定しても、パラメータの未変更の状態は変化しません。
altered は、パラメータの値を変更できるかどうかを判別するために使用されます。たとえば、ツールにフィーチャクラスのパラメータとキーワードのパラメータがあるとします。フィーチャクラスにポイントまたはポリゴンが含まれる場合、キーワードは RED、GREEN、BLUE になり、ラインが含まれる場合、キーワードは ORANGE、YELLOW、PURPLE、WHITE になります。
ユーザがポイント フィーチャクラスを入力したとします。キーワードのパラメータが変更されていない場合、値をデフォルト値の RED を設定します。
ライン フィーチャクラスが入力された場合、キーワードのパラメータが変更されていない限り、デフォルト値を ORANGE に設定します。
しかし、キーワードのパラメータがユーザによって変更された場合(キーワードが GREEN に設定された場合)、キーワードを再設定してはなりません。ユーザは GREEN を選択しましたが、その意図がわからないからです。ユーザは、GREEN が有効になるようにフィーチャクラスを変更するかもしれませんし、キーワードを(PURPLE などに)変更するかもしれません。GREEN は、ライン用に作成したキーワード群のメンバーではないため、内部整合チェックは、このパラメータにエラーのフラグを付けます。この時点で、ユーザには、入力フィーチャクラスを変更するかキーワードを変更するかの 2 つの選択肢があります。
if not parameters[2].altered:
parameters[2].value = "POINT"
hasBeenValidated
hasBeenValidated は、updateParameters と内部整合チェックが最後に呼び出されてから、ユーザがパラメータの値を変更した場合に、false になります。内部整合チェックが呼び出されると、ジオプロセシングはすべてのパラメータについて hasBeenValidated を true に自動的に設定します。
hasBeenValidated は、updateParameters を最後に呼び出してから、ユーザが値を変更したかどうかを判別するために使用されます。この情報は、パラメータを独自にチェックするかどうかを決定する際に利用できます。
def updateParameters(self, parameters):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (Altered is true).
#
if parameters[0].value:
if not parameters[6].altered:
extent = arcpy.Describe(parameters[0].value).extent
if extent.width > extent.height:
parameters[6].value = extent.width / 100
else:
parameters[6].value = extent.height / 100
return