أكثر

يؤدي تعيين استعلامات تعريف اثنين كمعلمات في أداة Python Script إلى: خطأ وقت التشغيل: LayerObject: تعيين تعريف السمة الاستعلام غير موجود

يؤدي تعيين استعلامات تعريف اثنين كمعلمات في أداة Python Script إلى: خطأ وقت التشغيل: LayerObject: تعيين تعريف السمة الاستعلام غير موجود


لقد قمت بإنشاء برنامج نصي يضيف استعلامات تعريف لكل طبقة في mxd اعتمادًا على اسم الطبقة.

كان هذا يعمل بشكل جيد كبرنامج نصي مستقل ، ولكن عندما أحاول استخدامه كأداة نصية مع arcpy.GetParameterAsText () فإنه يفشل في الاستعلام الثاني.

ها هو المقتطف:

استيراد arcpy arcpy.env.overwriteOutput = صحيح mxd = arcpy.mapping.MapDocument (arcpy.GetParameterAsText (0)) def applicationDefQuery (mxd): df = arcpy.mapping.ListDataFrames (mxd، "") [0] طبقات = قوس. mapping.ListLayers (mxd، ""، df) للطبقة في الطبقات: if layer.name == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText (1) else: layer.definitionQuery = arcpy.GetParameterAsText (2) mxd. save () applicationDefQuery (mxd)

تكمن الفكرة في إعداد mxd لـ QA / QC عندما يقوم مقاول من الباطن بإرجاع عملية دفع مع عدد كبير من الطبقات. يجب أن يحدد البرنامج النصي جميع مضلعات منطقة المشروع التي قاموا بتحريرها داخل كل طبقة أخرى وحدد السجلات التي قام المقاول من الباطن بتحريرها.

لقد جربت استكشاف الأخطاء وإصلاحها بعدة طرق: إضافة دالة ثانية للاستعلام الثاني ، وإخراجها من حلقة for وتشغيلها قبل العبارة الشرطية ، والبحث عن القيم الخالية في حقول المحرر بدلاً من تلك التي أنا ' m أبحث عن (كنت قلقًا من أن تنسيق القيمة - "COMPANY editorname" تسبب في مشكلة نظرًا لاحتوائه على حرف إلغاء). لا شيء يبدو أنه يعمل باستثناء ترك الحقل الثالث في واجهة المستخدم الرسومية فارغًا وتشغيل استعلام التعريف الأول فقط.

فيما يلي معلمات أداة البرنامج النصي:

والمدخلات التي أنقلها إليها:

والخطأ:

التنفيذ: QCPrep "C:  Users  bhamson  Documents  Company Check- INs  VisualQC_04142015  VisualQC_04162015_2 (1) .mxd" "" CONTRACT '"=' AAA-CO-11-001_005 '" "" محرر "LIKE' COMPANY ٪ '"وقت البدء: الثلاثاء 05 مايو 18:30:38 2015 تشغيل البرنامج النصي QCPrep ... البرنامج النصي الفاشل QCPrep… Traceback (آخر مكالمة أخيرة): ملف" C:  Users  bhamson  Documents  Company Check-INs  VisualQC_04142015  QCPrep .py "، السطر 17 ، في  applicationDefQuery (mxd) ملف "C:  Users  bhamson  Documents  Company Check-INs  VisualQC_04142015  QCPrep.py" ، السطر 14 ، في applicationDefQuery layer.definitionQuery = arcpy.GetParameterAsText (2) File "c:  program files ( x86)  arcgis  desktop10.2  arcpy  arcpy  arcobjects  _base.py "، السطر 89 ، في _set return setattr (self._arc_object، attr_name، cval (val)) RuntimeError: LayerObject: تعيين تعريف السمة الاستعلام غير موجود

فشل تنفيذ (QCPrep). فشل في Tue May 05 18:30:56 2015 (الوقت المنقضي: 17.58 ثانية)

اي فكرة عما قد تكون المشكلة؟


من الممكن أن يكون لديك طبقات لا تدعم استعلامات التعريف. مثل طبقة نقطية أو حتى طبقة مجموعة.

أقترح إضافة بعض المنطق الإضافي الذي يطبق فقط استعلام التعريف على طبقات المعالم. شيء من هذا القبيل:

def applicationDefQuery (mxd): df = arcpy.mapping.ListDataFrames (mxd، "") [0] layer = arcpy.mapping.ListLayers (mxd، ""، df) للطبقة في الطبقات: if layer.isFeatureLayer: if layer. الاسم == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText (1) else: layer.definitionQuery = arcpy.GetParameterAsText (2) mxd.save ()

يمكنك قراءة المزيد عن خصائص الطبقة هنا.