L'exécution d'un outil en arrière-plan vous permet de continuer à interagir avec l'application (comme ArcMap) et d'effectuer d'autres tâches pendant l'exécution de l'outil.
Par défaut, les outils de modèle ou de script s'exécutent au premier plan. Si vous souhaitez que l'outil s'exécute en arrière-plan, vous devez résoudre les problèmes décrits ci-après. Après vous être assuré que vos modèles et scripts ont corrigé ces problèmes, vous pouvez exécuter votre outil en arrière-plan en procédant de la manière suivante :
- Dans la fenêtre Catalogue ou ArcToolbox, cliquez avec le bouton droit sur votre outil de modèle et sélectionnez Propriétés. Dans l'onglet Général, désactivez Toujours exécuter au premier plan, puis cliquez sur OK.
- Dans le menu ArcMap, cliquez sur Géotraitement > Options de géotraitement. Dans le volet Traitement en arrière-plan, désactivez la case à cocher Activer.
Les problèmes que vous devez résoudre sont les suivants
- Utilisation de couches de documents ArcMap : ce problème concerne à la fois l'outil de modèle et l'outil de script.
- Utilisation de couches de documents ArcMap en cours dans les outils de script : ce problème est spécifique à l'outil de script.
Problème 1 : utilisation de couches de documents ArcMap
Exemple de modèle
Lorsqu'un outil de modèle est exécuté en arrière-plan, seules les couches qui en font partie en tant que paramètres de modèle sont disponibles pour le traitement en arrière-plan. Par exemple, le modèle suivant permet à l'utilisateur de saisir une zone d'intérêt, une isoligne de base et un intervalle des isolignes pour produire une classe d'entités isolignes. Ce modèle possède quatre paramètres (trois en entrée et un en sortie). Notez que la variable Raster d'altitude est une couche dans la Table des matières ArcMap, mais qu'elle n'est pas définie en tant que paramètre de modèle. Lorsque ce modèle est exécuté à l'aide de la boîte de dialogue de son outil, l'utilisateur saisit la couche Site d'enfouissement des déchets potentiels pour le paramètre Zone d'intérêt, mais n'a pas besoin de fournir la couche Raster d'altitude, car il ne s'agit pas d'un paramètre.
Le modèle ci-dessus s'exécutera comme prévu au premier plan. Cependant, s'il est configuré de sorte à s'exécuter en arrière-plan, il échouera avec l'avertissement "Aucun des processus n’est prêt à être exécuté", comme illustré ci-après. La raison de l'échec est que les traitements s'exécutant en arrière-plan ne peuvent pas utiliser des couches qui ne sont pas des paramètres d'outil. Dans ce cas, la variable de modèle Raster d'altitude n'étant pas un paramètre, le traitement en arrière-plan ne la trouve pas et échoue avec cet avertissement.
Solutions
Il existe différentes manières de modifier le modèle pour qu'il s'exécute en arrière-plan.
- Spécifiez la variable de couche comme paramètre de modèle. Cette opération transmet la couche au traitement en arrière-plan et l'outil s'exécute en arrière-plan. C'est la solution la plus simple.
- Au lieu d'utiliser une couche, utilisez un jeu de données sur le disque. Dans l'exemple ci-dessous, vous double-cliquez sur l'outil Extraction par masque et modifiez le paramètre Raster en entrée (représenté par la variable Raster d'altitude) pour utiliser un jeu de données raster plutôt qu'une couche de la table des matières. Le seul problème avec cette solution, c'est que les couches peuvent avoir des sélections, alors que les jeux de données sur le disque ne le peuvent pas. Si vous utilisez une variable de couche car vous avez besoin d'utiliser des sélections de couche, vous ne pouvez pas utiliser un jeu de données sur le disque. Dans ce cas, deux possibilités se présentent à vous (plutôt que faire de la variable un paramètre de modèle) :
- Dans le modèle, ajoutez l'outil Générer une couche pour créer une variable de couche à partir d'une variable de jeu de données et utilisez la variable de couche entrée du traitement du modèle suivant. (L'outil Générer une couche permet de saisir une expression de sélection.)
- Créez un fichier de couche (.lyr) et utilisez le fichier .lyr dans le modèle. Cela signifie que, dans le modèle ci-dessus, la variable Raster d'altitude pointe vers un fichier .lyr. Vous pouvez créer un fichier .lyr avec l'outil Enregistrer dans un fichier de couche.
Exemple d'outil de script
Les outils de script ont le même problème que les outils de modèle lorsqu'ils utilisent des couches comme entrées. Chaque couche doit être transmise comme paramètre et doit appartenir au type de données de géotraitement correspondant. Les outils de script offrent souplesse et choix ; ils peuvent, par exemple, agir sur des couches en utilisant un type de données de chaîne qui correspond à un nom de couche dans la table des matières. Même si cette méthode fonctionne au premier plan, elle ne fonctionne pas en arrière-plan, car aucune connexion n'existe entre la référence de couche et le traitement en arrière-plan. L'illustration suivante présente une couche de paramètre transmise en tant que chaîne et les propriétés de script modifiées pour utiliser une couche en entrée.
Solutions
Vérifiez que les paramètres d'outil de script utilisent les types de données appropriés, par exemple, couche d'entité, couche raster et vue tabulaire.
Si votre outil de script utilise une couche qui n'est pas un paramètre, vous devez effectuer les actions suivantes
- Définir la couche comme paramètre.
- Au lieu d'utiliser une couche, utilisez le jeu de données sur le disque ou un fichier .lyr sur le disque.
Problème 2 : utilisation d'un document ArcMap en cours dans les outils de script.
Les outils de script qui fonctionnent sur le document ArcMap en cours doivent être exécutés au premier plan. La classe MapDocument est une méthode puissante d'utilisation de votre document ArcMap en cours via des outils de script. Par exemple, vous pouvez avoir un script qui effectue un zoom automatique sur les entités que vous venez de sélectionner. L'exécution du script suivant engendre l'erreur « Objet : CreateObject ne peut pas ouvrir la carte ».
Exemple de script qui sélectionne les entités et effectue un zoom dessus à l'aide d'ArcPy Mapping
import arcpy
idvalue = arcpy.GetParameterAsText(0)
mxd = arcpy.mapping.MapDocument("CURRENT")
arcpy.SelectLayerByAttribute_management(
"Parcels", "NEW_SELECTION", '"ID" = ' + idvalue)
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
Solution
Les outils de script qui utilisent le document ArcMap en cours doivent toujours être exécutés au premier plan. Dans la fenêtre Catalogue, cliquez avec le bouton droit sur votre outil de script et sélectionnez Propriétés. Dans l'onglet Général, activez Toujours exécuter au premier plan.
Outils exécutant des outils
Supposons que vous possédiez un outil de script qui utilise le document ArcMap en cours comme décrit ci-dessus et que cet outil doive toujours être exécuté au premier plan. Que se passe-t-il si vous utilisez cet outil de script dans un outil de modèle et que ce dernier s'exécute en arrière-plan ? La réponse est que les modèles détectent les outils dans le modèle qui doivent s'exécuter au premier plan. Si certains outils doivent s'exécuter au premier plan, le modèle s'exécute automatiquement au premier plan.