AMLで使用される一般的なコーディングパターンは、別のAML内でAML(パラメーター付き)を実行することでした。
現在開発中のアプリケーションは、別のPythonスクリプト内で(パラメーターを使用して)Pythonスクリプトを実行できるという利点があります。
ただし、これはまったく簡単ではないようです。
ArcGIS 10を使用して、「内部の」Pythonスクリプトをパラメーターを持つArcGISツールにラップする実験を行っています。「外部の」Pythonスクリプトでarcpy.ImportToolboxを使用してツールボックスをインポートし、その中でツールを実行するのは簡単なことだと思いました。ただし、これまでのテストでは、「外部」スクリプトから「内部」ツールを実行しようとする試みはすべて、単に「内部」ツールをスキップするように見えます(エラーはスローされません)。
ここに、私が説明しようとしていることをよりよく説明するためのテストコードを示します。
私のtestinner.pyスクリプトは次のとおりです。
inputString = arcpy.GetParameterAsText(0)
newFC = "C:\\Temp\\test.gdb\\" + inputString
arcpy.Copy_management("C:\\Temp\\test.gdb\\test",newFC)
私のtestouter.pyスクリプトは次のとおりです。
import arcpy
inputString1 = arcpy.GetParameterAsText(0)
inputString2 = arcpy.GetParameterAsText(1)
arcpy.ImportToolbox("C:\\Temp\\test.tbx")
arcpy.testinner_test(inputString1)
arcpy.testinner_test(inputString2)
testinner.pyの場合、そのツールには単一のStringパラメーターが必要です。
testouter.pyの場合、そのツールには2つのStringパラメーターが必要です
2つのツールはtest.tbxに配置されます。
test.gdbには、testという名前の単一の空のフィーチャクラスが必要です。
上記を組み立てたら、パラメーターとして渡された「abc」などの文字列を使用してtestinnerツールを実行すると、フィーチャクラス「test」が「abc」という名前のクラスにコピーされます。
ただし、パラメーターとして「uvw」や「xyz」などの2つの文字列を使用してtestouterツールを実行しようとすると、testouter.py内のtestinnerツールは1回正常に実行されるように見えますが、Vista SP2上のArcMap 10 SP2を重大なアプリケーションエラーに送信します二度目にそれを使用しようとしています。
Windows XP SP3とArcGIS Desktop 10 SP2を使用した同じテストでも、同じ時点で深刻なアプリケーションエラーが発生します。