Suite

La définition de deux requêtes de définition en tant que paramètres dans l'outil de script Python provoque : RuntimeError : LayerObject : définir l'attribut definitionQuery n'existe pas

La définition de deux requêtes de définition en tant que paramètres dans l'outil de script Python provoque : RuntimeError : LayerObject : définir l'attribut definitionQuery n'existe pas


J'ai créé un script qui ajoute des requêtes de définition à chaque couche d'un mxd en fonction du nom de la couche.

Cela a bien fonctionné en tant que script autonome, mais lorsque j'essaie de l'utiliser comme outil de script avec arcpy.GetParameterAsText(), la deuxième requête échoue.

Voici l'extrait :

import arcpy arcpy.env.overwriteOutput = True mxd = arcpy.mapping.MapDocument(arcpy.GetParameterAsText(0)) def applyDefQuery(mxd): df = arcpy.mapping.ListDataFrames(mxd, "")[0] calques = arcpy. mapping.ListLayers(mxd, "", df) pour la couche dans les couches : if layer.name == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText(1) else: layer.definitionQuery = arcpy.GetParameterAsText(2) mxd. save() appliqueDefQuery(mxd)

L'idée est de préparer un mxd pour QA/QC lorsqu'un sous-traitant renvoie une caisse avec une tonne de couches. Le script doit sélectionner tous les polygones de la zone du projet dans lesquels ils ont été modifiés et pour chaque autre couche, sélectionner les enregistrements que le sous-traitant a modifiés.

J'ai essayé de résoudre ce problème de diverses manières : en ajoutant une deuxième fonction pour la deuxième requête, en la retirant de la boucle for et en l'exécutant avant l'instruction conditionnelle, en recherchant des valeurs nulles dans les champs de l'éditeur au lieu de celles que je ' m à la recherche (je craignais que le format de valeur - 'COMPANYeditorname' ne provoquait un problème car il contenait un caractère d'échappement). Rien ne semble fonctionner, à part laisser le troisième champ de l'interface graphique vide et exécuter simplement la première requête de définition.

Voici les paramètres de l'outil de script :

et l'entrée que je lui passe :

et l'erreur :

Exécution : QCPrep "C:UsershamsonDocumentsCompany Check-INsVisualQC_04142015VisualQC_04162015_2 (1).mxd" ""CONTRACT'" = 'AAA-CO-11-001_005'" ""EDITOR" LIKE 'COMPANY %'" Heure de début : Mar 05 18:30:38 2015 Script en cours d'exécution QCPrep… Échec du script QCPrep… Traceback (dernier appel le plus récent) : Fichier "C:UsershamsonDocumentsCompany Check-INsVisualQC_04142015QCPrep .py", ligne 17, dans  applyDefQuery(mxd) Fichier "C:UsershamsonDocumentsCompany Check-INsVisualQC_04142015QCPrep.py", ligne 14, dans applyDefQuery layer.definitionQuery = arcpy.GetParameterAsText(2) Fichier "c:program files ( x86)arcgisdesktop10.2arcpyarcpyarcobjects\_base.py", ligne 89, dans _set return setattr(self._arc_object, attr_name, cval(val)) RuntimeError : LayerObject : Définir la définition de l'attribut La requête n'existe pas

Échec de l'exécution (QCPrep). Échec le mardi 05 mai 18:30:56 2015 (temps écoulé : 17,58 secondes)

Une idée de ce que pourrait être le problème ?


Il est possible que vous ayez des couches qui ne prennent pas en charge les requêtes de définition. Comme un calque raster ou même un calque de groupe.

Je suggère d'ajouter une logique supplémentaire qui applique uniquement la requête de définition aux couches d'entités. Quelque chose comme ça:

def applyDefQuery(mxd): df = arcpy.mapping.ListDataFrames(mxd, "")[0] calques = arcpy.mapping.ListLayers(mxd, "", df) pour le calque dans les calques: if layer.isFeatureLayer: if layer. name == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText(1) else: layer.definitionQuery = arcpy.GetParameterAsText(2) mxd.save()

Vous pouvez en savoir plus sur les propriétés des calques ici.