ツールの [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 を返します。 |
プロパティ
プロパティ名 | 読み取り/書き込み | 値 | 説明 |
---|---|---|---|
name | 読み取り専用 | String | パラメーター名。 |
direction | 読み取り専用 | 文字列: "Input"、"Output" | パラメーターの入力または出力の方向。 |
datatype | 読み取り専用 | String | パラメーターのデータ タイプのリストについては、「Python ツールボックスにあるパラメーターのデータ タイプの定義」をご参照ください。 |
parameterType | 読み取り専用 | 文字列: "Required"、"Optional"、"Derived" | パラメーター タイプ。 |
parameterDependencies | 読み取り/書き込み | Python リスト | 各従属パラメーターのインデックスのリスト。 |
value | 読み取り/書き込み | Value オブジェクト | パラメーターの値。 |
defaultEnvironmentName | 読み取り専用 | String | デフォルトの環境設定。 |
enabled | 読み取り/書き込み | Boolean | パラメーターが使用不可の場合は false。 |
altered | 読み取り専用 | Boolean | ユーザーが値を変更した場合は true。 |
hasBeenValidated | 読み取り専用 | Boolean | 内部整合チェック ルーチンがパラメーターをチェック済みの場合は true。 |
category | 読み取り/書き込み | String | パラメーターのカテゴリ。 |
schema | 読み取り専用 | Schema オブジェクト | 出力データセットのスキーマ。 |
filter | 読み取り専用 | Filter オブジェクト | パラメーター内の値に適用するフィルター。 |
symbology | 読み取り/書き込み | String | 出力の描画に使用するレイヤー ファイル (*.lyr) のパス。 |
message | 読み取り専用 | String | ユーザーに表示するメッセージ。上記の 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