@uipath/skills 1.195.0 → 1.196.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CODEOWNERS +16 -10
- package/README.md +39 -4
- package/assets/skill-status.json +189 -0
- package/assets/uip-catalog-snapshot.json +67 -97
- package/commands/install-permissions.md +46 -2
- package/hooks/suggest-permissions.sh +0 -0
- package/hooks/validate-skill-descriptions.sh +0 -0
- package/package.json +1 -1
- package/skills/uipath-admin/SKILL.md +6 -7
- package/skills/uipath-admin/references/audit-commands.md +32 -10
- package/skills/uipath-admin/references/audit-workflow-guide.md +25 -6
- package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +1 -1
- package/skills/uipath-agents/SKILL.md +5 -3
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +6 -0
- package/skills/uipath-agents/references/coded/flow-integration.md +1 -0
- package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +2 -2
- package/skills/uipath-agents/references/coded/frameworks/llamaindex-integration.md +1 -1
- package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +5 -1
- package/skills/uipath-agents/references/coded/lifecycle/build.md +1 -0
- package/skills/uipath-agents/references/coded/lifecycle/evaluate.md +8 -6
- package/skills/uipath-agents/references/coded/quickstart.md +17 -12
- package/skills/uipath-agents/references/lowcode/agent-definition.md +17 -16
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/analyze-attachments.md +2 -2
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/impl-json.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/built-in-tools.md +4 -4
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/impl-json.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/context.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/datafabric.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +12 -12
- package/skills/uipath-agents/references/lowcode/capabilities/escalation/escalation.md +14 -14
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +23 -20
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +27 -26
- package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +12 -13
- package/skills/uipath-agents/references/lowcode/capabilities/mcp/mcp.md +133 -0
- package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +9 -9
- package/skills/uipath-agents/references/lowcode/capabilities/process/process.md +25 -24
- package/skills/uipath-agents/references/lowcode/capabilities/process/solution-files.md +6 -6
- package/skills/uipath-agents/references/lowcode/critical-rules.md +17 -17
- package/skills/uipath-agents/references/lowcode/debug.md +55 -0
- package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +6 -6
- package/skills/uipath-agents/references/lowcode/evaluations/evaluation-sets.md +1 -1
- package/skills/uipath-agents/references/lowcode/evaluations/evaluators.md +3 -3
- package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +8 -8
- package/skills/uipath-agents/references/lowcode/lowcode.md +18 -12
- package/skills/uipath-agents/references/lowcode/model-selection-guide.md +3 -3
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +53 -33
- package/skills/uipath-agents/references/lowcode/solution-resources.md +8 -8
- package/skills/uipath-api-workflow/SKILL.md +32 -83
- package/skills/uipath-api-workflow/references/cli-reference.md +40 -26
- package/skills/uipath-api-workflow/references/connector-activity-discovery.md +75 -23
- package/skills/uipath-api-workflow/references/troubleshooting.md +4 -12
- package/skills/uipath-automation-discovery/SKILL.md +234 -0
- package/skills/uipath-automation-discovery/references/intake-guide.md +85 -0
- package/skills/uipath-automation-discovery/references/mining-guide.md +156 -0
- package/skills/uipath-automation-discovery/references/report-template.md +95 -0
- package/skills/uipath-coded-apps/SKILL.md +0 -2
- package/skills/uipath-data-fabric/SKILL.md +0 -2
- package/skills/uipath-feedback/SKILL.md +1 -1
- package/skills/uipath-governance/SKILL.md +0 -2
- package/skills/uipath-human-in-the-loop/SKILL.md +2 -3
- package/skills/uipath-maestro-bpmn/.maintenance/check-all.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-anchors.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-depth.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-link-text.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-links.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-orphans.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-plugin-pairs.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-template.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-uip-commands.sh +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.py +0 -0
- package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.sh +0 -0
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/api-workflow.md +1 -1
- package/skills/uipath-maestro-bpmn/references/operate/references/run.md +1 -1
- package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +2 -2
- package/skills/uipath-maestro-bpmn/references/shared/wrapper-shells.md +1 -1
- package/skills/uipath-maestro-case/SKILL.md +22 -27
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +7 -1
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +7 -16
- package/skills/uipath-maestro-case/references/case-commands.md +9 -9
- package/skills/uipath-maestro-case/references/case-editing-operations.md +51 -67
- package/skills/uipath-maestro-case/references/case-schema.md +74 -138
- package/skills/uipath-maestro-case/references/connector-integration.md +32 -5
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +39 -12
- package/skills/uipath-maestro-case/references/evals/evals.json +9 -23
- package/skills/uipath-maestro-case/references/implementation.md +24 -24
- package/skills/uipath-maestro-case/references/phased-execution.md +24 -38
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +9 -9
- package/skills/uipath-maestro-case/references/planning.md +20 -79
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +15 -122
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +10 -22
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +7 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +10 -0
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +10 -42
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +8 -79
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +7 -14
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +4 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +2 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +12 -7
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +4 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +4 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +3 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +6 -7
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -27
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +8 -20
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +6 -11
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +15 -30
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +8 -7
- package/skills/uipath-maestro-case/references/registry-discovery.md +4 -4
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +12 -10
- package/skills/uipath-maestro-case/references/troubleshooting-guide.md +1 -1
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +0 -0
- package/skills/uipath-maestro-flow/SKILL.md +9 -6
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +4 -4
- package/skills/uipath-maestro-flow/references/author/references/brownfield.md +17 -2
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-cli.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +9 -9
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +13 -10
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +75 -5
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +2 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +14 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +20 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +5 -5
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/planning.md +5 -5
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +81 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +63 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +59 -57
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/planning.md +8 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +23 -23
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/planning.md +2 -2
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +1 -1
- package/skills/uipath-maestro-flow/references/diagnose/references/failure-modes.md +6 -6
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +2 -2
- package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +1 -1
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +8 -8
- package/skills/uipath-maestro-flow/references/operate/references/run.md +2 -2
- package/skills/uipath-maestro-flow/references/operate/references/ship.md +7 -7
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +19 -17
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +7 -7
- package/skills/uipath-planner/SKILL.md +110 -74
- package/skills/{uipath-solution → uipath-planner}/assets/templates/agent-sdd-template.md +3 -3
- package/skills/{uipath-solution → uipath-planner}/assets/templates/api-workflow-sdd-template.md +4 -4
- package/skills/{uipath-solution → uipath-planner}/assets/templates/case-sdd-template.md +4 -4
- package/skills/{uipath-solution → uipath-planner}/assets/templates/coded-app-sdd-template.md +3 -3
- package/skills/{uipath-solution → uipath-planner}/assets/templates/flow-sdd-template.md +4 -4
- package/skills/{uipath-solution → uipath-planner}/assets/templates/rpa-sdd-template.md +11 -11
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +3 -3
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +10 -6
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +17 -7
- package/skills/uipath-planner/references/plan-and-tasks-format.md +2 -2
- package/skills/{uipath-solution/references/design → uipath-planner/references}/product-selection-guide.md +8 -8
- package/skills/{uipath-solution/references/design → uipath-planner/references}/rpa-product-guide.md +1 -1
- package/skills/{uipath-solution/references/design → uipath-planner/references}/sdd-generation-guide.md +26 -39
- package/skills/{uipath-solution/references/design → uipath-planner/references}/tenant-library-search-guide.md +7 -7
- package/skills/uipath-platform/SKILL.md +21 -48
- package/skills/uipath-platform/references/integration-service/http-request.md +5 -2
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +19 -1
- package/skills/uipath-platform/references/integration-service/triggers.md +21 -5
- package/skills/uipath-platform/references/licensing/consumables-report.md +1 -1
- package/skills/uipath-platform/references/licensing/tenant-allocations.md +1 -1
- package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +1 -1
- package/skills/uipath-platform/references/{resources → orchestrator}/manage-assets.md +37 -34
- package/skills/uipath-platform/references/orchestrator/manage-sessions.md +1 -1
- package/skills/uipath-platform/references/orchestrator/orchestrator.md +4 -31
- package/skills/uipath-platform/references/{resources → orchestrator}/process-queues.md +61 -50
- package/skills/uipath-platform/references/{resources → orchestrator}/resources.md +21 -21
- package/skills/uipath-platform/references/orchestrator/run-jobs.md +26 -14
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +20 -16
- package/skills/uipath-platform/references/orchestrator/tenant-admin.md +7 -7
- package/skills/uipath-platform/references/{resources → orchestrator}/triggers-and-webhooks.md +41 -37
- package/skills/uipath-platform/references/{resources → orchestrator}/work-with-storage.md +56 -34
- package/skills/uipath-platform/references/uip-commands.md +20 -19
- package/skills/uipath-review/SKILL.md +81 -7
- package/skills/uipath-review/references/agents/agent-common-issues.md +42 -0
- package/skills/uipath-review/references/agents/agent-review-checklist.md +79 -57
- package/skills/uipath-review/references/agents/agents-coded-rules.md +160 -0
- package/skills/uipath-review/references/agents/agents-common-rules.md +32 -0
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +128 -0
- package/skills/uipath-review/references/platform/platform-resources-checklist.md +2 -2
- package/skills/uipath-review/references/review-workflow-guide.md +1 -1
- package/skills/uipath-review/references/rpa/rpa-review-checklist.md +2 -2
- package/skills/uipath-review/references/rule-catalog-workflow.md +90 -0
- package/skills/uipath-review/references/rule-format.md +91 -0
- package/skills/uipath-rpa/SKILL.md +16 -6
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/CreateEntityRecord.md +149 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/CreateMultipleEntityRecords.md +67 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteEntityRecord.md +44 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteFileFromRecordField.md +56 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteMultipleEntityRecords.md +65 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DownloadFileFromRecordField.md +115 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/GetEntityRecordById.md +50 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/QueryEntityRecords.md +69 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UpdateEntityRecord.md +120 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UpdateMultipleEntityRecords.md +67 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UploadFileToRecordField.md +103 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +461 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/overview.md +355 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AppendRangeX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AutoFillX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AutoFitX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ChangeDataRangeModification.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ChangePivotTableDataSourceX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ClearRangeX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CopyPasteRangeX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CreatePivotTableXv2.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CreateTableX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteColumnX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteRowsX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DuplicateSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExecuteMacroArgumentX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExecuteMacroX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExportExcelToCsvX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FillRangeX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FilterPivotTableX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FilterX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FindFirstLastDataRowX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FindReplaceValueX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FormatRangeX.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertColumnX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertExcelChartX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertRowsX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InvokeVBAArgumentX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InvokeVBAX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/LookupX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/PivotTableFieldX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ProtectSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ReadCellFormulaX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ReadCellValueX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RefreshPivotTableX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RemoveDuplicatesX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RenameSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SaveAsPdfX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SaveExcelFileX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SortColumnX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SortX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/UnprotectSheetX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/UpdateChartX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/VLookupX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/WriteCellX.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/overview.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.GSuite.Activities/3.8/activities/overview.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.Mail.Activities/2.8/activities/overview.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.MicrosoftOffice365.Activities/3.8/activities/SendMailConnections.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.MicrosoftOffice365.Activities/3.8/activities/overview.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Presentations.Activities/2.5/activities/overview.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.System.Activities/25.10/activities/overview.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Word.Activities/2.5/activities/overview.md +2 -2
- package/skills/uipath-rpa/references/cli-reference.md +108 -554
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
- package/skills/uipath-rpa/references/coded/operations-guide.md +3 -3
- package/skills/uipath-rpa/references/coded/third-party-packages-guide.md +1 -1
- package/skills/uipath-rpa/references/connector-capabilities.md +3 -2
- package/skills/uipath-rpa/references/debugging.md +43 -36
- package/skills/uipath-rpa/references/environment-setup.md +3 -3
- package/skills/uipath-rpa/references/is-connector-xaml-guide.md +3 -3
- package/skills/uipath-rpa/references/library-authoring-guide.md +226 -0
- package/skills/uipath-rpa/references/project-structure-guide.md +43 -0
- package/skills/uipath-rpa/references/publishing-guide.md +5 -5
- package/skills/uipath-rpa/references/tenant-library-search-guide.md +18 -14
- package/skills/uipath-rpa/references/testing-guide.md +6 -6
- package/skills/uipath-rpa/references/trigger-pattern-guide.md +2 -2
- package/skills/uipath-rpa/references/ui-automation-guide.md +43 -6
- package/skills/uipath-rpa/references/uia-configure-target-workflows.md +2 -2
- package/skills/uipath-rpa/references/uia-prerequisites.md +1 -1
- package/skills/uipath-rpa/references/validation-guide.md +4 -4
- package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +4 -1
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +18 -6
- package/skills/uipath-rpa/references/xaml/long-running-workflow-guide.md +304 -0
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +3 -0
- package/skills/uipath-solution/SKILL.md +23 -125
- package/skills/uipath-solution/references/{operate/activate-and-manage.md → activate-and-manage.md} +1 -1
- package/skills/uipath-solution/references/{operate/develop-solution.md → develop-solution.md} +43 -37
- package/skills/uipath-solution/references/{operate/pack-and-deploy.md → pack-and-deploy.md} +3 -3
- package/skills/uipath-solution/references/{operate/scenarios → scenarios}/intra-solution-references.md +2 -2
- package/skills/uipath-solution/references/{operate/scenarios → scenarios}/manual-edits.md +4 -4
- package/skills/uipath-solution/references/{operate/scenarios → scenarios}/same-name-across-folders.md +2 -2
- package/skills/uipath-solution/references/{operate/scenarios → scenarios}/shared-cloud-resource.md +3 -3
- package/skills/uipath-solution/references/{operate/scenarios → scenarios}/virtual-resource.md +4 -4
- package/skills/uipath-solution/references/{operate/scenarios.md → scenarios.md} +5 -5
- package/skills/uipath-solution/references/{operate/solution-overview.md → solution-overview.md} +3 -3
- package/skills/uipath-tasks/SKILL.md +0 -2
- package/skills/uipath-test/SKILL.md +26 -7
- package/skills/uipath-troubleshoot/agents/triage.md +6 -4
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/overview.md +55 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/add-queue-item-failed.md +58 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/application-launch-failed.md +56 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/browser-open-or-attach-failed.md +59 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/file-operation-failed.md +60 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/foreach-row-failed.md +56 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/image-target-not-found.md +56 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/invoke-code-failed.md +54 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/invoke-workflow-failed.md +58 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/kill-process-failed.md +49 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-activity-configuration-error.md +80 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-activity-timeout.md +61 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-element-interaction-failed.md +61 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-element-not-found.md +64 -0
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/summary.md +24 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-file-locked.md +142 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-file-not-found.md +140 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-null-reference.md +119 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-sheet-not-found.md +146 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/write-cell-failures.md +131 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/summary.md +5 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/investigation_guide.md +1 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/overview.md +16 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/activity-configuration-error.md +42 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/ambiguous-selector.md +131 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/application-not-found.md +84 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/application-open-failed.md +46 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/browser-navigation-failed.md +45 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/click-coordinate-off-screen.md +120 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/disabled-element.md +0 -2
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/element-found-not-actionable.md +43 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/healing-agent-no-license.md +12 -12
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/healing-agent-orch-issues.md +108 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/inject-js-failed.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +7 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/select-item-no-items.md +37 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/selector-failure-manual.md +2 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/timeout-issue.md +2 -2
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/verify-execution-failure.md +120 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/wrong-target-application.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/summary.md +12 -0
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/guardrail-violation.md +111 -0
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-connection-disabled.md +90 -0
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-invalid-credentials.md +123 -0
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-invalid-element-instance.md +96 -0
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/llm-insufficient-information.md +1 -1
- package/skills/uipath-troubleshoot/references/products/agents/summary.md +4 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/investigation_guide.md +7 -7
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-pending-no-host.md +3 -1
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-pending-stale-dispatch.md +2 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-stopped-exit-code-0x40010004.md +104 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/summary.md +1 -0
- package/skills/uipath-troubleshoot/references/summary.md +10 -1
- package/version-manifest.json +2 -2
- package/skills/uipath-ixp/SKILL.md +0 -84
- package/skills/uipath-ixp/references/cli-reference.md +0 -113
- package/skills/uipath-ixp/references/improve-prompts-guide.md +0 -283
- package/skills/uipath-ixp/references/label-documents-guide.md +0 -175
- package/skills/uipath-ixp/references/project-setup-guide.md +0 -90
- package/skills/uipath-maestro-case/references/plugins/edges/impl-json.md +0 -152
- package/skills/uipath-maestro-case/references/plugins/edges/planning.md +0 -93
- /package/skills/{uipath-solution/references/design → uipath-planner/references}/package-selection-guide.md +0 -0
- /package/skills/{uipath-solution/references/design → uipath-planner/references}/pdd-analysis-guide.md +0 -0
- /package/skills/uipath-solution/references/{operate/scenarios → scenarios}/failure-modes.md +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: medium
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Read Range — Sheet With The Specified Name Does Not Exist
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A `UiPath.Excel.Activities` Read Range (or any range-addressed Excel activity) opens the workbook successfully but fails when it tries to resolve the configured `SheetName` against the workbook's actual sheet titles. No sheet in the workbook matches the configured name exactly, so the activity throws before any range parsing or cell reads happen.
|
|
10
|
+
|
|
11
|
+
What this looks like:
|
|
12
|
+
- Activity fails with `UiPath.Excel.BusinessException: The sheet with the name '<configured-name>' does not exist.` (legacy `Excel Application Scope` family) or `UiPath.Excel.ExcelException: Sheet '<configured-name>' does not exist in the workbook.` (modern `Use Excel File` family). Exact wording shifts across package versions; the constant signal is the literal configured `SheetName` echoed back in the error.
|
|
13
|
+
- The configured workbook path is correct — the file opened (no preceding `IOException`, `FileNotFoundException`, or password-protection error).
|
|
14
|
+
- The error names a `SheetName` that the user believes exists. Comparing against the workbook's actual sheets is the next step.
|
|
15
|
+
- Affects every range-addressed Excel activity: `Read Range`, `Read Cell`, `Read Column`, `Read Row`, `Write Range`, `Write Cell`, `Append Range`, `Filter Range`, `Pivot Range`, `Sort Range`, `For Each Row in Excel`, etc.
|
|
16
|
+
|
|
17
|
+
What can cause it (cause-branches — pick the right one from evidence):
|
|
18
|
+
|
|
19
|
+
1. **Typo in the configured sheet name** — `SheetName` literal differs from the actual sheet by one or more characters. Most common when the value is hard-coded in the workflow and the workbook is authored by a different person. Symptom: error names a sheet that simply isn't in the workbook's sheet list.
|
|
20
|
+
2. **Case mismatch under the OpenXML provider** — `Use Excel File` running on the OpenXML provider (Excel not installed or COM fallback not triggered) treats sheet names **case-sensitively**. Excel COM (legacy `Excel Application Scope`, or `Use Excel File` falling back to COM) is case-insensitive. Symptom: same workflow that worked on a Studio dev box (where Excel is installed → COM) fails on a headless Robot host (no Excel → OpenXML). The configured name differs from the actual sheet only by letter casing.
|
|
21
|
+
3. **Sheet was renamed upstream** — the workbook publisher renamed the sheet (`Sheet1` → `January 2026`, `Data` → `Raw Data`, etc.). The workflow's configured name is now stale. Symptom: error names the OLD sheet; opening the workbook in Excel shows the NEW sheet name.
|
|
22
|
+
4. **Sheet was deleted upstream** — the workbook publisher removed the sheet entirely. Symptom: error names a sheet that no longer exists; the data the workflow is meant to read may have been moved to a different sheet.
|
|
23
|
+
5. **Leading or trailing whitespace** — the configured `SheetName` is `"Data "` (trailing space) or `" Data"` (leading space) and the actual sheet is `"Data"` (or vice versa). Common when the name comes from a variable concatenated with another string (`"Data " + month`) or from an external source (queue item, asset, CSV) where whitespace is not trimmed. Symptom: error wording shows the whitespace if you copy it byte-exact; visually the configured name looks correct.
|
|
24
|
+
6. **Non-ASCII or look-alike characters** — sheet name contains characters that look identical but are different code points: regular space (`U+0020`) vs. non-breaking space (`U+00A0`), Latin `a` (`U+0061`) vs. Cyrillic `а` (`U+0430`), straight quote vs. curly quote. Common when the name was copy-pasted from email, Word, or an internationalized data source. Symptom: configured name and actual name look identical in the UI but bytes differ.
|
|
25
|
+
7. **Variable resolved to wrong value at runtime** — the `SheetName` property is a dynamic expression (`row("Region").ToString()`, `Environment.GetEnvironmentVariable(...)`, etc.) that resolved to an unexpected value at runtime. Symptom: error names a sheet that nobody configured deliberately — possibly `Null`, an empty string `""`, a row index like `0`, or an unrelated cell value.
|
|
26
|
+
8. **Sheet is hidden or very-hidden** — the configured sheet name DOES exist in the workbook but is set to `xlSheetHidden` or `xlSheetVeryHidden` visibility. The OpenXML provider returns hidden sheets in lookups, but historical bug reports show legacy `Excel Application Scope` skipping very-hidden sheets when resolving by name on some `UiPath.Excel.Activities` versions. Symptom: an interactive admin can see the sheet via Excel's `Format → Sheet → Unhide`, but the activity reports it missing; `Get Workbook Sheets` may or may not list it depending on provider and version.
|
|
27
|
+
|
|
28
|
+
What to look for:
|
|
29
|
+
- **The literal configured `SheetName` echoed in the error** — the authoritative input at runtime. Don't trust the design-time expression alone; the runtime value may differ.
|
|
30
|
+
- **The workbook's actual sheet titles** — open the workbook in Excel, or enumerate via a one-off `Get Workbook Sheets` activity in a scratch project. Compare verbatim against the configured name.
|
|
31
|
+
- **Provider in use** — COM or OpenXML. Determines whether case-sensitivity applies. Legacy `Excel Application Scope` is always COM. Modern `Use Excel File`: OpenXML by default; falls back to COM when `Read Formatting`, `Edit Password`, or macro-related properties are set.
|
|
32
|
+
- **Whether the workbook was recently re-authored** — ask whether the upstream owner renamed, deleted, or restructured sheets. A `git log` / SharePoint version history check on the workbook itself is conclusive.
|
|
33
|
+
- **Whether `SheetName` is a literal or a dynamic expression** — workflow source. Dynamic expressions point at branch 7.
|
|
34
|
+
- **Byte-level comparison if the names look identical** — for branches 5 and 6. Paste both into a hex viewer or use `[char]<n>` in PowerShell to inspect code points.
|
|
35
|
+
|
|
36
|
+
## Investigation
|
|
37
|
+
|
|
38
|
+
Go in this order — cheaper checks first.
|
|
39
|
+
|
|
40
|
+
1. **Confirm the activity, configured `SheetName`, and workbook.** From workflow source: which activity (`Read Range` / `Read Cell` / etc.), which scope (`Excel Application Scope` vs. `Use Excel File`), and the configured `SheetName` expression — literal string or dynamic. From `uip or jobs get <job-key> --output json` → `Info`: the exception class, the workbook path, and the `<configured-name>` echoed in the error string.
|
|
41
|
+
|
|
42
|
+
2. **Distinguish branch 7 (variable resolved wrong) immediately.** If the `SheetName` expression in source is dynamic, the runtime value is what matters. If the error names something nonsensical (`Null`, empty string, `0`, an integer, a row value, a path fragment), the variable resolved to the wrong thing — go to step 7. If the error names a plausible sheet (`Sheet1`, `Data`, `January 2026`), continue with branches 1-6.
|
|
43
|
+
|
|
44
|
+
3. **Enumerate the workbook's actual sheets.** If the user can open the workbook in Excel, list the sheet titles verbatim. If they cannot (headless host, file lives on a share they don't access), have them run a one-off scratch workflow with `Get Workbook Sheets` against the same path on the same host. The returned `IEnumerable<String>` is the authoritative list.
|
|
45
|
+
|
|
46
|
+
4. **Compare verbatim against the configured name.**
|
|
47
|
+
- **Identical match in the list** → not this playbook. The activity should not have failed; check the next-most-likely playbook (file-locked, file-not-found) or look for a version-specific package bug.
|
|
48
|
+
- **No similar name in the list** → branch 4 (deleted) or branch 1 (typo big enough that no close match exists).
|
|
49
|
+
- **A close-but-different name in the list** → continue with branches 1, 2, 3, 5, or 6 per the diff:
|
|
50
|
+
- Exactly one character different → branch 1 (typo).
|
|
51
|
+
- Same letters, different casing → branch 2 (case mismatch).
|
|
52
|
+
- Different word entirely, recent rename → branch 3.
|
|
53
|
+
- Same visible characters but one has leading/trailing space → branch 5 (whitespace).
|
|
54
|
+
- Same visible characters, no obvious diff → branch 6 (look-alike characters). Continue to step 5.
|
|
55
|
+
|
|
56
|
+
5. **Detect whitespace / look-alike characters when the names look identical.**
|
|
57
|
+
```powershell
|
|
58
|
+
$configured = '<configured-name>'
|
|
59
|
+
$actual = '<actual-name-from-workbook>'
|
|
60
|
+
"configured: $($configured.Length) chars bytes: $(([System.Text.Encoding]::UTF8.GetBytes($configured) | ForEach-Object { $_.ToString('X2') }) -join ' ')"
|
|
61
|
+
"actual: $($actual.Length) chars bytes: $(([System.Text.Encoding]::UTF8.GetBytes($actual) | ForEach-Object { $_.ToString('X2') }) -join ' ')"
|
|
62
|
+
```
|
|
63
|
+
- Length differs → branch 5 (whitespace at one end).
|
|
64
|
+
- Length equal, byte sequences differ → branch 6 (look-alike character at some position).
|
|
65
|
+
- Length equal, byte sequences equal → not a name-mismatch issue; recheck step 4.
|
|
66
|
+
|
|
67
|
+
6. **Determine the provider in use (branch 2 confirmation).** Legacy `Excel Application Scope` is always COM (case-insensitive sheet lookups) — branch 2 is impossible here. Modern `Use Excel File`:
|
|
68
|
+
- If the activity inputs include `Read Formatting: True`, `Edit Password`, or macro-related properties → COM fallback, case-insensitive.
|
|
69
|
+
- If none of those are set → OpenXML, case-sensitive on the OpenXML version in use.
|
|
70
|
+
- Verify by re-running on a host where Excel **is** installed; if the same workflow succeeds there with the same workbook, branch 2 is confirmed.
|
|
71
|
+
|
|
72
|
+
7. **Trace the dynamic `SheetName` expression (branch 7).** If the configured name is a variable / expression:
|
|
73
|
+
- Add a `LogMessage` immediately before the failing activity that logs `String.Format("[SheetName resolved to: '{0}']", <expression>)`. Re-run and observe the runtime value.
|
|
74
|
+
- Or inspect `jobs logs` if the workflow already logs the value.
|
|
75
|
+
- Trace the upstream variable assignments to find where the bad value was produced (null-safe lookup, queue item field missing, asset typo, etc.).
|
|
76
|
+
|
|
77
|
+
The root cause is **which specific kind of mismatch** between the configured `SheetName` and the workbook's actual sheet titles — not "the sheet doesn't exist" generically. A confirmed finding names the configured name verbatim, the actual sheet name(s), and one of the cause-branches.
|
|
78
|
+
|
|
79
|
+
## Resolution
|
|
80
|
+
|
|
81
|
+
Map the branch identified in Investigation to the fix:
|
|
82
|
+
|
|
83
|
+
- **Branch 1 — Typo:**
|
|
84
|
+
- Update the `SheetName` property on the activity to match the actual sheet name verbatim. If the value is a literal in the workflow, edit it directly. If it comes from a config asset or argument, fix the source.
|
|
85
|
+
- Prevention: enumerate sheets via `Get Workbook Sheets` at job start when the workbook is authored externally and the sheet name is not stable. Validate the configured name against the list before reading; fail fast with a clear message if not present.
|
|
86
|
+
|
|
87
|
+
- **Branch 2 — Case mismatch on OpenXML:**
|
|
88
|
+
- **Match casing in the workflow** — change the configured `SheetName` to the exact casing the workbook uses. This is the cheapest fix and avoids depending on provider behavior.
|
|
89
|
+
- **Or force the COM provider** — set `Read Formatting: True` (or another COM-forcing property) on the `Use Excel File` scope so the activity uses Excel COM, which is case-insensitive. Requires Excel installed on the host.
|
|
90
|
+
- **Or normalize at read time** — if the casing is unstable across workbook versions, enumerate sheets via `Get Workbook Sheets` and look up the actual case via `sheets.First(Function(s) s.Equals(target, StringComparison.OrdinalIgnoreCase))`.
|
|
91
|
+
- Prevention: do not assume case-insensitive sheet lookups on `Use Excel File`. Default to case-sensitive matching; document the convention.
|
|
92
|
+
|
|
93
|
+
- **Branch 3 — Sheet was renamed upstream:**
|
|
94
|
+
- Update the configured `SheetName` to the new name.
|
|
95
|
+
- Coordinate with the workbook publisher: agree on a stable sheet name convention, or use a sentinel header row / named range that the workflow can locate independent of sheet title.
|
|
96
|
+
- Prevention: do not hard-code sheet names that the workbook publisher may rename. If the workbook layout is owned by a different team, encode the layout contract somewhere stable (sheet name AND header-row signature; named ranges; a metadata sheet).
|
|
97
|
+
|
|
98
|
+
- **Branch 4 — Sheet was deleted upstream:**
|
|
99
|
+
- Confirm where the deleted sheet's data went (moved to another sheet? rolled up? archived elsewhere?). Update the workflow to read from the new location.
|
|
100
|
+
- If the deletion was unintentional, restore from version history (SharePoint / OneDrive: Version History → Restore; local file: Excel's `File → Info → Version History`).
|
|
101
|
+
- Prevention: treat the workbook layout as a contract. Don't delete sheets without coordinating with downstream consumers.
|
|
102
|
+
|
|
103
|
+
- **Branch 5 — Leading or trailing whitespace:**
|
|
104
|
+
- **If the workbook's sheet name has the whitespace** (the publisher named it `"Data "`): either ask the publisher to rename without whitespace (cleanest), or update the workflow's configured name to include the whitespace verbatim.
|
|
105
|
+
- **If the workflow's configured name has the whitespace** (it came from a variable or concatenation): trim. `SheetName = sheetVar.Trim()`. Audit the upstream source.
|
|
106
|
+
- Prevention: always `.Trim()` external-sourced sheet names. Reject names with whitespace at the boundaries at validation time.
|
|
107
|
+
|
|
108
|
+
- **Branch 6 — Non-ASCII / look-alike characters:**
|
|
109
|
+
- Identify the offending code point from the byte comparison in investigation step 5. Replace it with the intended character in whichever side has the wrong code point (usually the workflow's configured name).
|
|
110
|
+
- Prevention: when sheet names come from external sources (especially emails, Word docs, internationalized data), normalize: `System.Text.RegularExpressions.Regex.Replace(name, " ", " ")` for NBSP, or stronger Unicode normalization (`String.Normalize(NormalizationForm.FormC)`) for combining characters.
|
|
111
|
+
|
|
112
|
+
- **Branch 7 — Variable resolved to wrong value:**
|
|
113
|
+
- Fix the upstream source of the variable. Common patterns:
|
|
114
|
+
- Null-safe queue item field access (`If(item.SpecificContent.ContainsKey("Sheet"), item.SpecificContent("Sheet").ToString(), defaultSheet)`).
|
|
115
|
+
- Asset / config lookup that returned empty — make the asset required and validate at job start.
|
|
116
|
+
- String concatenation that included an unexpected value (`"Data " + month` where `month` was `Nothing`).
|
|
117
|
+
- Add a guard before the activity that fails the workflow with a clear message when the resolved name is empty, null, or doesn't match a known sheet — rather than letting the BusinessException surface generically.
|
|
118
|
+
- Prevention: validate dynamic sheet names against `Get Workbook Sheets` output at the start of the job. Treat an unresolved sheet name as a configuration error, not a runtime error.
|
|
119
|
+
|
|
120
|
+
- **Branch 8 — Hidden or very-hidden sheet:**
|
|
121
|
+
- Unhide the sheet in Excel: `Format → Sheet → Unhide` (for `xlSheetHidden`), or open the VBA editor (`Alt+F11`) and set the sheet's `Visible` property to `xlSheetVisible` (for `xlSheetVeryHidden` — Excel's `Unhide` dialog does not list very-hidden sheets).
|
|
122
|
+
- If the sheet must remain hidden (presentation reasons), update the workflow to enumerate sheets via a method that includes hidden ones, and confirm the configured name still matches verbatim.
|
|
123
|
+
- Upgrade `UiPath.Excel.Activities` to the latest version if the project is on an older release; historical bug reports show legacy `Excel Application Scope` skipping very-hidden sheets in some versions.
|
|
124
|
+
- Prevention: do not very-hide data sheets that workflows depend on. Either keep them visible, OR document the dependency in the workbook itself (cover sheet / metadata sheet listing all programmatically-read sheets).
|
|
125
|
+
|
|
126
|
+
## Anti-patterns (what NOT to do)
|
|
127
|
+
|
|
128
|
+
Two common pieces of advice for this failure mode are anti-patterns that hide the bug without fixing it. The agent should NOT recommend either as a primary resolution.
|
|
129
|
+
|
|
130
|
+
- **Switching from `Use Excel File` to `Excel Application Scope` (or vice versa) as a "magic fix".** Provider divergence between OpenXML and Excel COM is the cause of branch 2 (case mismatch) — switching scopes coincidentally hides that one branch by replacing case-sensitive lookup with case-insensitive lookup. It does NOT fix branches 1, 3, 4, 5, 6, 7, or 8, and it ties the workflow to a host that must have Excel installed (Excel Application Scope is COM-only). The real fix for branch 2 is to match the casing in the workflow, or to force COM explicitly via a documented property. Treat "try the other scope" as a debugging step (does the same workflow succeed under COM?), not as the resolution.
|
|
131
|
+
|
|
132
|
+
- **Wrapping the activity in a Try Catch to "handle missing tabs gracefully" with no real recovery path.** A bare `Catch System.Exception` (or `UiPath.Excel.BusinessException`) that only logs and continues turns the workflow into a silent-failure pipeline: the DataTable is empty, downstream activities produce zeros / empty reports / no queue items, and the operator sees a job that completed Successfully despite reading nothing. Use Try Catch only as part of a real recovery path: fall back to a different sheet, send a notification, mark a queue item Failed, or re-throw a domain-specific exception. The same anti-pattern is called out as an orphan-cause in [`read-range-file-locked.md`](./read-range-file-locked.md) — silent exception suppression around Excel scopes is consistently harmful, not helpful.
|
|
133
|
+
|
|
134
|
+
## Prevention (cross-branch)
|
|
135
|
+
|
|
136
|
+
- Enumerate sheets at job start (`Get Workbook Sheets`) and validate every configured sheet name against the actual list. Fail fast with a message that includes the configured name AND the actual list — saves operators 20 minutes of guessing.
|
|
137
|
+
- Treat the workbook layout as a contract between publisher and consumer. Sheet renames are a breaking change; coordinate them.
|
|
138
|
+
- Default to case-sensitive matching in your workflows even when the provider is currently case-insensitive — you may switch to a headless OpenXML-only host later.
|
|
139
|
+
- `.Trim()` any sheet name that comes from outside the workflow's literal source code.
|
|
140
|
+
- Normalize Unicode for names sourced from email / Word / internationalized data.
|
|
141
|
+
- Log the resolved sheet name at the start of any Excel scope when the name is dynamic; future debugging gets significantly cheaper.
|
|
142
|
+
|
|
143
|
+
## Related
|
|
144
|
+
|
|
145
|
+
- Other Excel Read Range failure fingerprints (file-locked, file-not-found, null-reference on formatted files) are separate playbooks — see [`../summary.md`](../summary.md).
|
|
146
|
+
- For shared / cloud Excel workbooks accessed via Microsoft Graph rather than the local filesystem, see [`o365-activities/overview.md`](../../o365-activities/overview.md).
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: medium
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Write Cell Failures
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A `UiPath.Excel.Activities` `Write Cell` activity (Classic Workbook surface, Classic `Excel Application Scope`, or Modern `Use Excel File`) writes a single value or formula to a target cell. Failures originate in one of four places: the file (locked by another process / wrong scope owns it), the cell target (sheet name mismatch, bad cell reference, protected target), the value (formula syntax rejected by Excel's parser), or the surrounding loop pattern (repeated Write Cell calls thrashing Excel's COM state).
|
|
10
|
+
|
|
11
|
+
What this looks like — Write Cell faults surface as one of these signatures:
|
|
12
|
+
|
|
13
|
+
- `System.IO.IOException: The process cannot access the file '<path>' because it is being used by another process.` — file lock, branch 1.
|
|
14
|
+
- `UiPath.Excel.BusinessException: The data you want to write has a wrong format, or Excel is busy.` — formula syntax (branch 2) or Excel state thrash (branch 3); same wording for two different causes, distinguish by context.
|
|
15
|
+
- `UiPath.Excel.BusinessException: The sheet with the name '<name>' does not exist.` — branch 4, identical signature to Read Range's sheet-not-found.
|
|
16
|
+
- `System.Runtime.InteropServices.COMException` with message about a protected sheet or read-only workbook — branch 5.
|
|
17
|
+
- `UiPath.Excel.BusinessException: The cell reference '<ref>' is invalid.` or `Application-defined or object-defined error` from Excel COM — branch 6, bad A1 notation / unknown named range.
|
|
18
|
+
|
|
19
|
+
What can cause it (cause-branches — pick the right one from evidence):
|
|
20
|
+
|
|
21
|
+
1. **Workbook locked OR Classic/Modern scope conflict** — A different process holds the file's lock, OR a Classic `Write Cell` (the standalone "Workbook" surface) targets a workbook that a surrounding `Excel Application Scope` / `Use Excel File` has already opened. The Classic Workbook surface accesses the file's raw bytes directly and refuses to write while any other process — including UiPath's own Excel COM scope — holds it. The error wording is the same `System.IO.IOException` as Read Range branch 1; the divergent fix is "stop mixing scopes" rather than "kill the locker."
|
|
22
|
+
2. **Formula syntax rejected** — The configured `Value` is a formula string (`=SUM(A1:A10)`, `=IF(...)`) that Excel's formula parser refuses. Three common causes: parameter separators (UiPath requires `,` even when the host's Windows regional setting expects `;`), unescaped or unbalanced quotes (string literals inside formulas need `""` around inner quotes when assembled from a UiPath VB.NET expression), or function names that depend on an add-in not loaded on the Robot's Excel session.
|
|
23
|
+
3. **Loop-induced "Excel is busy" / memory thrash** — `Write Cell` is called inside a `For Each Row` (or any tight loop) so the activity opens, writes, saves, and closes the workbook on every iteration. After ~100–500 iterations Excel COM accumulates COM-object leaks, the file lock churn races with itself, and the activity fails with the same "wrong format, or Excel is busy" wording as branch 2 — but here the wording is misleading: nothing's wrong with the data, the Excel instance is destabilized. Symptom: first N iterations succeed, then a sudden failure mid-loop; restarting the job gets through a different N iterations before failing again.
|
|
24
|
+
4. **Sheet name mismatch** — Configured `SheetName` does not match any sheet in the workbook. Verbatim the same diagnostic as the Read Range version — typos, OpenXML case-sensitivity, sheet renamed upstream, leading/trailing whitespace, look-alike Unicode characters, or a dynamic variable that resolved to the wrong value. See [`read-range-sheet-not-found.md`](./read-range-sheet-not-found.md) for the full investigation chain; the same diagnostic applies on the write side.
|
|
25
|
+
5. **Protected sheet or workbook** — The sheet has `Protect Sheet` enabled (with or without a password) or the workbook is opened read-only (file system ACL denies write, `Mark as Final` flag is on, the file came from email with `Protected View`, or the activity is running under a Modern `Use Excel File` scope with `Read-only mode: True`). Excel rejects the write with a COMException mentioning protection, or the activity returns silently with no observable change to the file.
|
|
26
|
+
6. **Invalid cell reference** — Configured `Cell` is malformed A1 notation (`AA0`, `B`, `1B`, leading whitespace), out of the workbook's bounds (`A1048577` exceeds the 1,048,576-row limit on `.xlsx`), or a named range that does not exist in the workbook's defined names. Same diagnostic as branch 4 (sheet mismatch) but at one level deeper: the sheet resolved, the cell reference inside it did not.
|
|
27
|
+
|
|
28
|
+
What to look for:
|
|
29
|
+
|
|
30
|
+
- **The exception class and message** — first signal. `IOException` → branch 1. "`wrong format, or Excel is busy`" → branch 2 or 3 (distinguish by loop context). "`sheet with the name`" → branch 4. COMException with "`protected`" / "`read-only`" → branch 5. "`cell reference`" / "`Application-defined or object-defined`" → branch 6.
|
|
31
|
+
- **Workflow source** — which `Write Cell` surface? Classic Workbook (no enclosing scope), Classic inside `Excel Application Scope`, or Modern `Write Cell` inside `Use Excel File`. The surface determines whether branch 1's scope-conflict variant applies.
|
|
32
|
+
- **The configured `Value`** — literal string vs. formula (`=…`). Branch 2 is only possible when the value is a formula.
|
|
33
|
+
- **Loop context** — is `Write Cell` inside `For Each` / `For Each Row` / `While`? Branch 3 is impossible outside a loop.
|
|
34
|
+
- **The configured `Cell`** — literal A1 notation, an expression, or a named range. Bad expressions are branch 6.
|
|
35
|
+
- **The workbook's protection state** — open the file in Excel; `Review → Protect Sheet` shows protection status; `File → Info` shows `Mark as Final` and `Protected View`. Branch 5 confirmation.
|
|
36
|
+
- **Job logs around the failure** — the activity's Trace logs echo the configured `Value` (truncated) and the resolved `Cell` / `SheetName`. Mismatches between source and resolved values point at branch 4 / 6 with a dynamic-expression cause.
|
|
37
|
+
|
|
38
|
+
## Investigation
|
|
39
|
+
|
|
40
|
+
Go in this order — cheaper checks first.
|
|
41
|
+
|
|
42
|
+
1. **Capture the exact error, activity, and target.** From `uip or jobs get <job-key> --output json` → `Info`: exception class and full message. From workflow source: the `Write Cell` surface (Classic Workbook / Classic inside scope / Modern), configured `SheetName`, `Cell`, and `Value` (literal or expression). Look at job logs (`uip or jobs logs <key>`) for the activity's Trace lines, which echo the resolved runtime values.
|
|
43
|
+
|
|
44
|
+
2. **Branch the diagnostic on the exception signature.**
|
|
45
|
+
- `System.IO.IOException` → branch 1; go to step 3.
|
|
46
|
+
- `BusinessException: ... sheet with the name '<x>' does not exist` → branch 4; see [`read-range-sheet-not-found.md`](./read-range-sheet-not-found.md). Done.
|
|
47
|
+
- `BusinessException: ... wrong format, or Excel is busy` → branches 2 or 3; go to step 4.
|
|
48
|
+
- `COMException` with "protected" / "read-only" / `0x800A03EC` near `Worksheet.Protect` → branch 5; go to step 5.
|
|
49
|
+
- `BusinessException: ... cell reference '<x>' is invalid` or `Application-defined or object-defined error` → branch 6; go to step 6.
|
|
50
|
+
|
|
51
|
+
3. **Distinguish branch 1's two variants (lock vs. scope conflict).** If the activity is **Classic Workbook `Write Cell`** (no surrounding scope) and the workflow ALSO has an `Excel Application Scope` or `Use Excel File` for the same path elsewhere in the call graph, the scope-conflict variant applies — the Modern/Classic scope still holds the file when the Classic Workbook activity tries to write. Fix is structural (don't mix), not host-side (no killing required). If the Write Cell is the only Excel reference to that path, the issue is an external locker — pivot to [`read-range-file-locked.md`](./read-range-file-locked.md) for the full lock-investigation chain (orphan EXCEL.EXE, user editing, network share, AV scanner, concurrent jobs).
|
|
52
|
+
|
|
53
|
+
4. **Distinguish branch 2 from branch 3 (formula syntax vs. loop thrash).** Both surface with the "wrong format, or Excel is busy" wording.
|
|
54
|
+
- If the activity is inside a `For Each` / `For Each Row` / `While` loop AND fails partway through (some iterations succeeded before the failure) → branch 3 (loop thrash). The misleading "wrong format" wording masks Excel COM instability. Confirm: `uip or jobs logs <key>` shows successful iterations preceding the fault.
|
|
55
|
+
- If the activity is not in a loop, OR fails on the first iteration of a loop → branch 2 (formula syntax). Examine the configured `Value`. Formula? Inspect for:
|
|
56
|
+
- Parameter separators: `=SUM(A1;A10)` is invalid; must be `=SUM(A1,A10)` regardless of host's Windows regional setting.
|
|
57
|
+
- Quote escaping: in UiPath VB.NET, an inner string literal inside a formula expression needs doubled quotes. Source: `"=IF(A1=""x"",1,0)"` produces the formula `=IF(A1="x",1,0)` at runtime. Single quotes at the boundaries or unbalanced doubled quotes produce malformed formulas.
|
|
58
|
+
- Function names: `=IFERROR(...)` and similar exist in modern Excel COM but not the OpenXML provider; functions from add-ins (e.g., `=BAHTTEXT(...)` from the Thai add-in) require the add-in registered for the Robot user.
|
|
59
|
+
- If the value is not a formula and the activity is not in a loop → uncommon edge case; check for invisible characters in the `Value` itself (NBSP, BOM, control chars) before assuming Excel COM bug.
|
|
60
|
+
|
|
61
|
+
5. **Confirm branch 5 (protected sheet / workbook).** Open the workbook in Excel on the Robot user's profile (or have the user do so):
|
|
62
|
+
- `Review → Protect Sheet` — if "Unprotect Sheet" is shown, the sheet is protected. The target cell may or may not be in the protected-cells range; check `Format Cells → Protection → Locked`.
|
|
63
|
+
- `File → Info` — "Always Open Read-Only" or "Mark as Final" badges indicate workbook-level write blocks.
|
|
64
|
+
- File system: `Get-Acl '<path>' | Format-List` confirms the Robot user has write permission. NTFS read-only or share-level read-only blocks the write at the OS layer.
|
|
65
|
+
- If the workbook came from email or download: Excel's `Protected View` blocks writes until "Enable Editing" is clicked — a Robot session never clicks it.
|
|
66
|
+
|
|
67
|
+
6. **Confirm branch 6 (invalid cell reference).** Compare the configured `Cell` against:
|
|
68
|
+
- A1 notation rules: column letters then row number, no whitespace, row ≥ 1, column within the workbook's column count (16,384 for `.xlsx`).
|
|
69
|
+
- Workbook's defined names: open in Excel → `Formulas → Name Manager`, OR via PowerShell with `OpenXML SDK` if the host has it. The configured cell may be a named range that was renamed / deleted upstream.
|
|
70
|
+
- Sheet-relative vs. workbook-relative: `Sheet1!A1` syntax is allowed in some surfaces but rejected in others; check whether the activity expects `Cell` to include the sheet prefix or whether the sheet comes from a separate property.
|
|
71
|
+
|
|
72
|
+
The root cause is **which of the six fault surfaces** (lock, scope conflict, formula syntax, loop thrash, protection, cell reference, sheet mismatch) the failure maps to. A confirmed finding names the surface (Classic Workbook / Classic scope / Modern scope), the resolved runtime values for `SheetName` / `Cell` / `Value`, and one of the cause-branches.
|
|
73
|
+
|
|
74
|
+
## Resolution
|
|
75
|
+
|
|
76
|
+
Map the branch identified in Investigation to the fix:
|
|
77
|
+
|
|
78
|
+
- **Branch 1 — Workbook locked OR Classic/Modern scope conflict:**
|
|
79
|
+
- **Scope-conflict variant**: replace the standalone Classic Workbook `Write Cell` with one nested inside the surrounding scope. If the scope is Modern (`Use Excel File`), use Modern `Write Cell`. If the scope is Classic `Excel Application Scope`, use Classic `Write Cell` nested inside it. Do not mix Modern scopes with Classic Workbook activities — they own the file by different mechanisms.
|
|
80
|
+
- **External locker variant**: the file is held by something outside the workflow. Follow [`read-range-file-locked.md`](./read-range-file-locked.md)'s investigation and resolution chain — orphan EXCEL.EXE kill, user-coordinated close, network-share unlock, AV exclusion, etc.
|
|
81
|
+
- Stop-gap (any variant): add a `Kill Process` activity targeting `EXCEL` immediately before the failing `Write Cell` to terminate stragglers. Treat this as a diagnostic patch, not a permanent fix — it masks scope-cleanup bugs in the workflow.
|
|
82
|
+
|
|
83
|
+
- **Branch 2 — Formula syntax rejected:**
|
|
84
|
+
- Replace semicolons with commas in parameter lists. UiPath passes the formula string to Excel verbatim and Excel COM requires commas regardless of the host's regional setting (the Excel UI displays semicolons in non-US locales, but the COM API does not).
|
|
85
|
+
- Double-quote inner strings: `"=IF(A1=""hello"","""",A1)"` produces `=IF(A1="hello","",A1)`. Verify by logging the resolved formula (`Log Message Level=Info Message=$"Formula: {value}"`) before the Write Cell.
|
|
86
|
+
- Confirm function availability: `=IFERROR` and other modern functions require Excel 2007+. Functions from add-ins (`=BAHTTEXT`, `=GETPIVOTDATA` against an unloaded PivotCache) need the add-in registered under the Robot user. Replace with primitive equivalents where possible.
|
|
87
|
+
- For literal values (not formulas) that get misinterpreted as formulas — values starting with `=`, `+`, or `-` — prepend an apostrophe (`'`) or use the activity's `Preserve Format` property to force literal interpretation.
|
|
88
|
+
|
|
89
|
+
- **Branch 3 — Loop-induced "Excel is busy":**
|
|
90
|
+
- Replace the cell-by-cell write pattern with bulk Write Range. Read the workbook into a `DataTable` once via `Read Range`, modify rows in memory inside the loop (`row("Column") = newValue`), then `Write Range` the modified table back to the workbook once after the loop. This collapses N file open/close cycles into 2.
|
|
91
|
+
- If a per-cell pattern is unavoidable (e.g., the writes are interleaved with reads that depend on intermediate computed values), batch them: collect the writes into a `List<(string Cell, object Value)>` during the loop, then drain the list with a single Write Range or repeated Write Cell calls outside the loop where COM thrash is bounded.
|
|
92
|
+
- Avoid `Save Workbook` inside the loop. Modern `Use Excel File` controls save semantics through the scope's `Auto Save` property; setting it to False and saving once at the end of the workflow eliminates per-iteration disk I/O.
|
|
93
|
+
|
|
94
|
+
- **Branch 4 — Sheet name mismatch:**
|
|
95
|
+
- Apply the resolution from [`read-range-sheet-not-found.md`](./read-range-sheet-not-found.md). The write-side fix is identical to the read-side: correct the configured `SheetName`, match casing if on OpenXML, trim whitespace, normalize Unicode, or validate dynamic expressions against `Get Workbook Sheets` output at job start.
|
|
96
|
+
|
|
97
|
+
- **Branch 5 — Protected sheet or workbook:**
|
|
98
|
+
- **Sheet protection**: unprotect via `Worksheet.Unprotect` before the write and re-protect after, OR remove protection from the sheet at the workbook source and replace it with per-cell `Locked: False` on the cells the workflow targets. Per-cell unlocking + sheet-wide protection is the safer pattern for production workbooks that humans also edit.
|
|
99
|
+
- **Workbook read-only / Mark as Final**: open the workbook, remove the `Mark as Final` flag (`File → Info → Mark as Final`), or change file-system ACL to grant the Robot user write access. If the workbook arrived via Protected View (downloaded / emailed), have the publisher trust the source path or unblock the file (`Unblock-File '<path>'` on the Robot host).
|
|
100
|
+
- **Modern scope with `Read-only mode: True`**: change the scope property to `False`. The default-True is a footgun on `Use Excel File` for workflows that include any Write activity.
|
|
101
|
+
|
|
102
|
+
- **Branch 6 — Invalid cell reference:**
|
|
103
|
+
- Fix the A1 notation. Common typos: `B` instead of `B1`, `1B` instead of `B1`, trailing whitespace.
|
|
104
|
+
- For named ranges: open the workbook in Excel → `Formulas → Name Manager` to confirm the name exists and points where expected. If the name was renamed upstream, update the activity. If the name is dynamic per-workbook, enumerate defined names at job start and validate.
|
|
105
|
+
- For dynamic `Cell` expressions: log the resolved runtime value (`Log Message Level=Info Message=$"Cell: {cellExpr}"`) before the activity. Validate against the workbook's actual bounds (16,384 cols × 1,048,576 rows for `.xlsx`; `.xls` is smaller).
|
|
106
|
+
|
|
107
|
+
## Anti-patterns (what NOT to do)
|
|
108
|
+
|
|
109
|
+
Common quick-fixes for `Write Cell` failures hide the bug without fixing it. The agent should NOT recommend these as primary resolutions.
|
|
110
|
+
|
|
111
|
+
- **"Add a `Kill Process` activity for EXCEL before every Write Cell."** A blanket `Kill Process` masks scope-management bugs (branch 1 scope-conflict variant), terminates other legitimate Excel work on the host, and creates a brittle workflow that depends on the absence of Excel processes rather than correct scope ownership. Use `Kill Process` as a one-off diagnostic step to confirm a fix candidate, not as a recurring activity. The real fix for branch 1 is to align Modern/Classic scopes correctly; for branch 2/3 it's the formula or the loop pattern.
|
|
112
|
+
|
|
113
|
+
- **"Wrap the Write Cell in a Retry Scope to handle Excel-is-busy."** A Retry Scope around branch-3 (loop thrash) waits a few seconds and tries again — the underlying Excel COM state is still corrupt, and the retry compounds the damage. Worse, a Retry Scope around branch 2 (formula syntax) retries an invalid formula and either succeeds spuriously (Excel parses differently on the retry, masking the bug) or fails identically (wasted job time). Use Retry only with a real recovery action (re-open the workbook, reset COM state) AND only after diagnosing the underlying branch.
|
|
114
|
+
|
|
115
|
+
- **"Use `Continue On Error: True` on the Write Cell so the workflow doesn't fail."** Silently suppresses every fault surface — protected sheet, bad formula, missing cell reference, locked file — and the job completes "successfully" while producing wrong outputs. Branches 4 (sheet missing) and 5 (protection) most commonly drift into this anti-pattern because the failure looks "expected" when the workbook structure shifts. Treat any Excel write failure as a data-correctness incident, not a flake.
|
|
116
|
+
|
|
117
|
+
## Prevention (cross-branch)
|
|
118
|
+
|
|
119
|
+
- Pick one Excel surface per workflow and stay on it. New workflows: prefer Modern `Use Excel File` + nested Modern activities (`Write Cell` inside the scope). Existing workflows: do not mix Classic Workbook activities with Modern scopes — the surfaces own files differently and conflict.
|
|
120
|
+
- For any cell-by-cell write pattern, prefer Read Range → in-memory DataTable mutation → Write Range. Reserve `Write Cell` for single targeted writes (a header, a status flag, a timestamp) — not for bulk data.
|
|
121
|
+
- Validate formula strings before passing to Write Cell. Log the resolved formula; eyeball the separators and quote-escaping; consider building formulas via a helper function that asserts the comma-separator rule.
|
|
122
|
+
- Validate configured `SheetName` and `Cell` against the workbook's actual sheets / defined names at job start (`Get Workbook Sheets` + a quick `Read Cell` smoke test on the target). Fail fast with a clear message instead of letting a generic BusinessException surface mid-workflow.
|
|
123
|
+
- Author workbooks consumed by UiPath without sheet- or workbook-level protection when possible. If protection is required for human consumers, scope it to specific cell ranges and leave the Robot's target cells unlocked.
|
|
124
|
+
- Keep `UiPath.Excel.Activities` updated on a known-good version across the automation host fleet. Mismatched versions across hosts produce intermittent failures that look like branch 3 (Excel busy) but are package bugs; pinning the version in `project.json` and verifying it on each host eliminates this confound.
|
|
125
|
+
- Set `Auto Save: False` on `Use Excel File` for workflows that write inside loops; explicit `Save Workbook` outside the loop avoids per-iteration disk pressure.
|
|
126
|
+
|
|
127
|
+
## Related
|
|
128
|
+
|
|
129
|
+
- Branch 4 (sheet not found) shares its diagnostic with [`read-range-sheet-not-found.md`](./read-range-sheet-not-found.md) — the same investigation steps and resolutions apply on the write side.
|
|
130
|
+
- Branch 1's external-locker variant shares its diagnostic with [`read-range-file-locked.md`](./read-range-file-locked.md) — orphan EXCEL.EXE, user editing, network-share locks, AV/EDR scanners, and concurrent jobs all surface identically on Write Cell.
|
|
131
|
+
- For shared / cloud Excel workbooks accessed via Microsoft Graph rather than the local filesystem, see [`../../o365-activities/overview.md`](../../o365-activities/overview.md) — the Write Cell equivalents on the cloud surface have entirely different fault modes (auth, throttling, eTag conflicts) covered there.
|
|
@@ -15,3 +15,8 @@
|
|
|
15
15
|
| Lookup Range — Object Reference Not Set | Medium | `NullReferenceException` from a missing sheet/range name or the activity running outside an Excel scope | [lookup-range-null-reference.md](./playbooks/lookup-range-null-reference.md) |
|
|
16
16
|
| Lookup Range — Invalid Range or Value | Medium | `Range` set to `""` instead of blank, malformed A1 reference, unescaped wildcards, or a text-vs-number type mismatch in the search value | [lookup-range-invalid-range.md](./playbooks/lookup-range-invalid-range.md) |
|
|
17
17
|
| Lookup Range — Silent Miss Against a Formula Cell | Medium | Target value is the *computed* result of an Excel formula; Interop reads a stale/null cached value or fails to re-evaluate, so the lookup returns null even though the displayed text matches | [lookup-range-formula-cells.md](./playbooks/lookup-range-formula-cells.md) |
|
|
18
|
+
| Read Range — File In Use By Another Process | Medium | Workbook held open by another process (user Excel UI, orphan `EXCEL.EXE`, network-share lock on a different host) so the activity cannot acquire the file (`System.IO.IOException: The process cannot access the file '<path>' because it is being used by another process.`) | [read-range-file-locked.md](./playbooks/read-range-file-locked.md) |
|
|
19
|
+
| Read Range — Sheet With Specified Name Does Not Exist | Medium | The workbook opened successfully but the configured `SheetName` does not match any sheet in the workbook (`UiPath.Excel.BusinessException: The sheet with the name '<name>' does not exist.`). Causes: typo, case mismatch on the OpenXML provider, sheet renamed or deleted upstream, leading/trailing whitespace, look-alike Unicode characters, or a dynamic `SheetName` expression resolving to the wrong value at runtime | [read-range-sheet-not-found.md](./playbooks/read-range-sheet-not-found.md) |
|
|
20
|
+
| Read Range — Workbook File Or Directory Not Found | Medium | The configured `WorkbookPath` does not resolve to an existing file at runtime (`System.IO.FileNotFoundException: Could not find file '<path>'.` or `System.IO.DirectoryNotFoundException`). Causes: file moved/deleted upstream, UNC share unreachable, relative path resolved against wrong CWD, drive letter not mapped under the Robot's session, OneDrive/SharePoint Files-On-Demand placeholder, or extension/casing mismatch on case-sensitive shares | [read-range-file-not-found.md](./playbooks/read-range-file-not-found.md) |
|
|
21
|
+
| Read Range — NullReferenceException / TargetInvocationException From Inside Activity | Low | The workbook opens but a generic .NET runtime exception fires during cell / range / formula / formatting parsing (`System.NullReferenceException` or `System.Reflection.TargetInvocationException` with no cell pointer). Possible causes: Microsoft Purview / AIP sensitivity label blocking the Robot user, workbook structural corruption (often from non-Excel writers like `openpyxl`), broken named range or formula reference (`#REF!`), unsupported OpenXML feature requiring COM, or heavy conditional formatting / parser scale limit. Low-confidence: error wording does not distinguish branches; diagnosis usually requires manual workbook inspection | [read-range-null-reference.md](./playbooks/read-range-null-reference.md) |
|
|
22
|
+
| Write Cell Failures | Medium | `Write Cell` (Classic Workbook, Classic `Excel Application Scope`, or Modern `Use Excel File`) fails to write a value or formula. Symptoms surface as `System.IO.IOException` (file lock), `UiPath.Excel.BusinessException: ... wrong format, or Excel is busy` (formula syntax OR Excel COM state thrash — same wording, two causes), `BusinessException: ... sheet with the name '<x>' does not exist`, `COMException` about protected sheet / read-only workbook, or `BusinessException: ... cell reference '<x>' is invalid`. Causes: workbook locked OR Classic/Modern scope conflict (Classic Workbook activity racing a surrounding Modern scope on the same file), formula syntax (comma vs. semicolon separators, unescaped inner quotes, add-in-dependent functions), loop-induced Excel COM thrash when Write Cell runs cell-by-cell inside a tight loop, sheet name mismatch (same diagnostic as read-range-sheet-not-found), protected sheet / workbook / Read-only Mode scope, or invalid A1 cell reference / unknown named range. Includes anti-patterns section rejecting blanket Kill-Process-for-EXCEL, Retry-Scope-around-bad-formula, and Continue-On-Error suppression | [write-cell-failures.md](./playbooks/write-cell-failures.md) |
|
package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/investigation_guide.md
CHANGED
|
@@ -23,3 +23,4 @@ When testing hypotheses for UI Automation issues, gather and verify these before
|
|
|
23
23
|
5. **Execution context** — check if running attended vs unattended, screen resolution, RDP session state — these affect UI element visibility
|
|
24
24
|
6. **Package version** — confirm `UiPath.UIAutomation.Activities` package version; behavior differs across versions
|
|
25
25
|
7. **Enclosing scope container configuration** — for activities inside a scope container (`NApplicationCard`, `NBrowser`, `Use Application/Browser`, `NWindow`, `Attach Window`, `Attach Browser`, etc.), open the workflow XAML and capture the container's `AttachMode`, `OpenMode` (defaults to `IfNotOpen` when absent), and `TargetApp.{Selector,Url}` values. The scope container determines which application instance/page the inner selector resolves against — a misconfigured scope makes a structurally correct selector fail (e.g., card attaches to an unintended existing tab via `AttachMode=ByInstance` + default `OpenMode=IfNotOpen` + a loose `TargetApp.Selector`). Do not confirm a selector-failure hypothesis before naming the scope container's configuration.
|
|
26
|
+
8. **Silent no-op check** — if a UI activity completed `Successful` but its effect did not occur (e.g. the click never happened), check **Verify Execution** on that activity. An absent or target-less Verify (`VerifyOptions` with a Mode but no verification target) lets a wrong-target / wrong-page no-op pass without faulting — so a "succeeded but did nothing" report is usually a missing Verify, not a missing exception. See [playbooks/scope-container-wrong-page.md](./playbooks/scope-container-wrong-page.md).
|
|
@@ -29,10 +29,26 @@ When a robot executes a UI activity (Click, Type Into, Get Text, etc.), it uses
|
|
|
29
29
|
- **UiElementNotFoundException** — UI element lookup failed (similar to selector not found, different internal path)
|
|
30
30
|
- **ElementNotInteractableException** — element was found but can't be clicked/typed into (hidden, disabled, covered by overlay)
|
|
31
31
|
- **UiNodeDisabledElementException** — element was found but is disabled and the activity's `AlterIfDisabled` property is not `True`. Driver HRESULT `E_UINODE_CANNOT_ALTER_DISABLED_ELEM` (0x8004027D). Raised by interaction activities `NClick`, `NTypeInto`, `NSetText`, `NCheck`, `NSelectItem`, `NSAPClickPictureOnScreen`.
|
|
32
|
+
- **VerifyActivityExecutionException** — activity's primary action succeeded but its `VerifyOptions` post-condition assertion did not hold within the verify retry window. Thrown by `VerifyExecutionService`, not COM-friendlied. Raised by `NClick`, `NHover`, `NKeyboardShortcuts`, `NTypeInto`. Multiple friendly messages route to distinct cause branches (`ExceptionCheckActivity`, `ExceptionVerificationTargetNotFoundOrInvalid`, `ExceptionVerificationTextNotSupported`, `ExceptionVerificationImageCouldNotBeRetrieved`, `ExceptionRecoveredButValidationFailed`, plus NTypeInto-specific text-match keys).
|
|
32
33
|
- **NodeNotFoundException** — DOM or UI tree node missing
|
|
34
|
+
- **NodeAmbiguousException** — selector matched more than one element. Distinct from `NodeNotFoundException` (zero matches): ambiguous = multiple matches.
|
|
33
35
|
- **TimeoutException** — activity exceeded its wait time (ambiguous — could be UI or non-UI)
|
|
34
36
|
- **ImageOperationException** — image-based UI automation failure
|
|
35
37
|
- **ScreenScrapingException** — screen scraping activity failure
|
|
38
|
+
- **ApplicationNotFoundException** — scope-level failure from `NApplicationCard` (Use Application / Use Browser) when the target application can't be located **and** the scope's `OpenMode=Never`. Distinct from `ApplicationOpenException` (which fires when `OpenMode != Never` and launch failed) and `WrongTargetApplicationException` (selector matched the wrong process).
|
|
39
|
+
- **UiAutomationException — "Cannot send input to UI element because it is outside of screen bounds."** — input activity (`NClick`, `NTypeInto`, ...) located the element but the destination coordinate is outside the runtime host's virtual screen. Wraps `COMException 0x800402bd` at `UiPath.UiNodeClass.Click`. Distinct from the selector-failure family — element was resolved, coordinate was rejected. See [click-coordinate-off-screen.md](./playbooks/click-coordinate-off-screen.md).
|
|
40
|
+
|
|
41
|
+
UIAutomationNext (`N*`) activities also raise these more specific exceptions:
|
|
42
|
+
|
|
43
|
+
- **RuntimeTimeoutException** — modern activity timeout ("Activity execution exceeded the set timeout."). A UI timeout can also surface as **NodeNotFoundException** when the element never appeared within the timeout window.
|
|
44
|
+
- **ApplicationOpenException** — a `Use Application/Browser` scope with `Open` ≠ `Never` tried to launch the app and the launch failed ("Could not open target application.")
|
|
45
|
+
- **WrongTargetApplicationException** — the identified element belongs to a different application/browser than the scope's target
|
|
46
|
+
- **BrowserFailedToNavigateToUrlException** / **BrowserInvalidURLException** — `Go To URL` could not navigate (failed navigation, invalid/empty URL, or a local `file://` blocked on Chromium)
|
|
47
|
+
- **InvalidNodeException** / **UiNodeUninitializedElementException** — the element went invalid/stale between being found and acted on
|
|
48
|
+
- **TargetFoundButNotVisibleException** — element found but its visibility did not match what the target expected
|
|
49
|
+
- **TargetNotFoundBrowserBlockedException** — element could not be reached because a dialog is blocking the browser
|
|
50
|
+
- **UiNodeHasNoItemsException** — Select Item's target container had no items
|
|
51
|
+
- **UiAutomationException (activity configuration)** — an activity rejected an invalid property value (e.g. Mouse Scroll `Movement units` < 1, Keyboard Shortcuts empty/invalid sequence, Take Screenshot missing `File name`/`Saved image`, Go To URL / Inject Js Script missing required input)
|
|
36
52
|
|
|
37
53
|
## Features
|
|
38
54
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: high
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Activity Configuration Error — Invalid Property Value
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A UI Automation activity faulted on its own property validation, before (or independent of) finding the target: a required input was empty or a value was out of range. The exception names the property, so the cause is the configuration of that activity.
|
|
10
|
+
|
|
11
|
+
What this looks like — one of these messages, by activity:
|
|
12
|
+
- **Mouse Scroll** (`NMouseScroll`):
|
|
13
|
+
- `Value for property [Movement units] can not be lower than 1.` — `Movement units` was 0 or negative.
|
|
14
|
+
- `Searched element Target or Input UI Element must be set when Scroll type is set to Until element is found.` — "scroll until found" was selected with no searched-element target/input.
|
|
15
|
+
- `Unable to find the searched element.` — scrolling completed without ever finding the configured searched element.
|
|
16
|
+
- **Keyboard Shortcuts** (`NKeyboardShortcuts`): `Invalid or empty shortcut sequence.` — no keys, or an unparseable key combination.
|
|
17
|
+
- **Take Screenshot** (`NTakeScreenshot`):
|
|
18
|
+
- `'File name' can not be null, empty or whitespace.` — saving to file with no `File name`.
|
|
19
|
+
- `Required argument 'Saved image' was not provided.` — saving to an image output with no `Saved image` argument bound.
|
|
20
|
+
|
|
21
|
+
What can cause it:
|
|
22
|
+
- A property left at an invalid value (Movement units < 1, empty shortcut, empty file name).
|
|
23
|
+
- A property fed by a variable/expression that evaluates to empty/zero at runtime because an upstream step did not populate it.
|
|
24
|
+
- A mode/option chosen without its dependent input (scroll-until-found without a searched element; save-to-file without a file name; save-to-image without an output argument).
|
|
25
|
+
|
|
26
|
+
What to look for:
|
|
27
|
+
- The message names the property and the activity — read that property's configured value in the workflow.
|
|
28
|
+
- If the value comes from a variable/expression, check what produced it.
|
|
29
|
+
|
|
30
|
+
## Investigation
|
|
31
|
+
|
|
32
|
+
1. From the failed job, capture the exact message (it names the property), the activity, and the workflow.
|
|
33
|
+
2. Open the activity and read the named property's value.
|
|
34
|
+
3. If the property is bound to a variable/expression, trace the upstream step that should set it; an empty/zero value usually means that step did not run or returned nothing.
|
|
35
|
+
4. For mode-dependent inputs (Mouse Scroll "until element is found", Take Screenshot save mode), confirm the dependent input is provided for the selected mode.
|
|
36
|
+
|
|
37
|
+
## Resolution
|
|
38
|
+
|
|
39
|
+
- **Out-of-range/empty literal:** set a valid value on the activity (Movement units ≥ 1, a non-empty shortcut sequence, a file name / output argument).
|
|
40
|
+
- **Empty from upstream:** fix the upstream step/variable that should populate the property — do not hard-code a literal to mask a missing producer unless the value is genuinely static.
|
|
41
|
+
- **Mode missing its input:** provide the dependent input for the chosen mode (a searched-element target for scroll-until-found; a file name for save-to-file; a `Saved image` output for save-to-image).
|
|
42
|
+
- **Mouse Scroll "Unable to find the searched element":** the searched element never appeared while scrolling — confirm the element exists on that view and is reachable by scrolling; if it should appear only after an earlier step, fix that step. Increase the searched-element timeout only if the element genuinely appears late.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: high
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Ambiguous Selector — Target Matched Multiple Elements
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A UI Automation Next activity threw `NodeAmbiguousException` because its target selector matched more than one element in the live UI tree. The target-find service walks the tree, accumulates every node satisfying the selector, and refuses to act when the result set has more than one. The activity never dispatches — no click, no key, no read.
|
|
10
|
+
|
|
11
|
+
Applies to every UIAutomationNext activity that resolves a target before acting:
|
|
12
|
+
|
|
13
|
+
- `NClick`, `NTypeInto`, `NCheck`, `NHover`, `NHighlight`, `NSetFocus`
|
|
14
|
+
- `NGetText`, `NSetText`, `NGetAttribute`
|
|
15
|
+
- `NSelectItem`
|
|
16
|
+
- `NCheckElement`, `NCheckState`
|
|
17
|
+
|
|
18
|
+
What this looks like:
|
|
19
|
+
|
|
20
|
+
- Exception class: `UiPath.UIAutomationNext.Exceptions.NodeAmbiguousException`
|
|
21
|
+
- Friendly message (the only one — this exception carries a static resource string with no placeholders):
|
|
22
|
+
> Multiple similar matches found.
|
|
23
|
+
>
|
|
24
|
+
> Could not uniquely identify the user-interface element for this action.
|
|
25
|
+
> Edit the element, run Validation, and add anchors in order to ensure the element is uniquely identified.
|
|
26
|
+
- Resource key: `Strings.NodeNotFoundMultipleMatches`
|
|
27
|
+
- Stack origin: the find phase of the activity (no `VerifyExecutionService` frames, no Healing Agent recovery frames — the find phase short-circuits before either runs).
|
|
28
|
+
- Fault duration is short (typically under the activity `Timeout` — once the ambiguity is detected the find service does not retry).
|
|
29
|
+
- The exception message does NOT include the offending selector — you must read the workflow source to recover it.
|
|
30
|
+
|
|
31
|
+
What can cause it:
|
|
32
|
+
|
|
33
|
+
- Selector is too generic — no anchor, no parent context, no `idx=`. Common authoring mistakes: `<webctrl tag='BUTTON' />`, `<webctrl tag='INPUT' type='submit' />`, `<wnd cls='Button' />`.
|
|
34
|
+
- The UI legitimately has repeated controls (table rows, card grid, list items, paginated wizard steps) and the selector does not narrow to one row/card/page.
|
|
35
|
+
- Multiple windows or tabs of the same application are open and the selector does not include a window-scope qualifier (`<html app='msedge.exe' title='Specific Title' />`).
|
|
36
|
+
- Dynamic attributes drifted — the attribute that was unique at design time is no longer unique at runtime (regenerated id, A/B-tested layout duplicated a control).
|
|
37
|
+
- Iframe / shadow-root traversal that pulls the same logical DOM tree into the search twice.
|
|
38
|
+
- A previous activity (e.g., an opened dialog) introduced a duplicate of the target element on top of the existing one.
|
|
39
|
+
|
|
40
|
+
What to look for:
|
|
41
|
+
|
|
42
|
+
- Confirm the exception class is `NodeAmbiguousException`. If it is `NodeNotFoundException` / `SelectorNotFoundException` / `UiElementNotFoundException`, the selector matched ZERO elements — use the `selector-failure-*.md` playbooks instead. Ambiguous = multiple matches; failure = no matches.
|
|
43
|
+
- Healing Agent **explicitly bypasses** this exception. Its recovery pipeline (`FindAlternativeOriginalTargetHiddenStrategy`) checks for `NodeAmbiguousException` and returns immediately, producing no recovery data. If you see `HealingAgentBehavior=Job` or `=Card` on the activity and no recovery payload for this fault, that is correct behavior — not an HA misconfiguration. Do NOT treat this as a `no-recovery-data.md` case.
|
|
44
|
+
- The exception message ALONE does not identify the duplicate. To diagnose you must:
|
|
45
|
+
- Read the workflow source to get the selector
|
|
46
|
+
- Open the target page at the time of failure (or its `InformativeScreenshot` if attached to the `TargetAnchorable`) and count how many elements satisfy the selector
|
|
47
|
+
- The activity `Timeout` is irrelevant. Extending it does not give the find service more time to disambiguate — the service has already decided as soon as >1 match is found.
|
|
48
|
+
|
|
49
|
+
## Investigation
|
|
50
|
+
|
|
51
|
+
1. From the failed job, capture the exception class, faulting activity, and workflow file.
|
|
52
|
+
2. Open the workflow source. Locate the failing activity by `DisplayName` or `IdRef`. Read its `Target` block:
|
|
53
|
+
- The active selector — check the `SearchSteps` attribute on the `TargetAnchorable` and read whichever selector matches: `SearchSteps='FullSelector'` → `FullSelectorArgument`; `SearchSteps='FuzzySelector'` → `FuzzySelectorArgument`. One of these will be set, the other typically empty. Do not assume `FullSelectorArgument` is always populated.
|
|
54
|
+
- `ScopeSelectorArgument` — the window/scope wrapper (often just the app + window title)
|
|
55
|
+
- `BrowserURL` — for web targets, the URL the target lives on
|
|
56
|
+
- `InformativeScreenshot` — design-time screenshot of the intended element (filename only — file may not be in the repo)
|
|
57
|
+
3. Inspect the selector specificity. Decompose attributes into "specific" (`aaname`, `aria-label`, stable `id`, `name`, `data-testid`, application-owned `data-*`) vs. "generic" (`tag`, `type`, `cls`, `role`). A selector with only generic attributes against a page that has repeated patterns is the canonical ambiguous case.
|
|
58
|
+
4. Determine the duplication source. Classify the failure:
|
|
59
|
+
- Repeated UI pattern (multiple rows / cards / list items)
|
|
60
|
+
- Multiple windows / tabs of the same app open simultaneously
|
|
61
|
+
- Dynamic attribute drift (id was stable at design time, regenerated at runtime)
|
|
62
|
+
- Iframe / shadow-root double traversal
|
|
63
|
+
- Overlay / dialog opening a duplicate of the underlying control
|
|
64
|
+
5. Confirm the duplication is reachable from the activity's scope at runtime. If a sibling activity opens a dialog before the failing activity runs, the duplicate may only exist transiently — the fix is to gate on the dialog being closed, not to narrow the selector.
|
|
65
|
+
6. Confirm the activity is NOT wrapped in a Retry Scope on `NodeAmbiguousException`. If it is, retrying does not help — the ambiguity is structural, not transient. The retry block must be removed and the selector fixed at source.
|
|
66
|
+
|
|
67
|
+
## Resolution
|
|
68
|
+
|
|
69
|
+
### Decision tree
|
|
70
|
+
|
|
71
|
+
Walk this tree from the top. Stop at the first branch that matches.
|
|
72
|
+
|
|
73
|
+
1. **Is the selector relying only on generic attributes** (`tag`, `type`, `cls`, `role`) with no specific identifier?
|
|
74
|
+
- YES → branch **(A)**. Selector is too generic — add a specific attribute.
|
|
75
|
+
- NO → continue.
|
|
76
|
+
|
|
77
|
+
2. **Does the failure happen against a repeated UI pattern** (table rows, card grid, list items, paginated forms)?
|
|
78
|
+
- YES → branch **(B)**. The selector matches the pattern but not a specific instance — narrow by anchor or index.
|
|
79
|
+
- NO → continue.
|
|
80
|
+
|
|
81
|
+
3. **Are multiple windows / tabs of the same application open** when the activity runs?
|
|
82
|
+
- YES → branch **(C)**. Narrow the `ScopeSelectorArgument` to the specific window — or attach to the scope explicitly via `NApplicationCard`.
|
|
83
|
+
- NO → continue.
|
|
84
|
+
|
|
85
|
+
4. **Was the unique attribute stable at design time but drifts at runtime** (regenerated id, dynamic GUID, A/B-tested attribute)?
|
|
86
|
+
- YES → branch **(D)**. Replace the drifting attribute with a stable one — or use a wildcard / regex match.
|
|
87
|
+
- NO → continue.
|
|
88
|
+
|
|
89
|
+
5. **Does the page contain iframes or shadow-roots that traverse the same logical DOM twice**?
|
|
90
|
+
- YES → branch **(E)**. Anchor the selector inside the correct frame.
|
|
91
|
+
- NO → continue.
|
|
92
|
+
|
|
93
|
+
6. **Default — an overlay / dialog opened a duplicate of the target** → branch **(F)**. Gate the activity on the dialog being closed before the action runs.
|
|
94
|
+
|
|
95
|
+
### Branches
|
|
96
|
+
|
|
97
|
+
- **(A) Selector too generic — add a specific attribute.** The selector uses only generic attributes (`tag`, `type`, `cls`, `role`) that match many sibling controls. Open the target in Studio's Selector Editor or Object Repository. Add the first stable, specific attribute the target exposes: `aaname` / `aria-label`, `name`, `id` (only if it does not drift), `data-testid`, application-owned `data-*`. Re-run Validation in Studio to confirm "single match". Example: change `<webctrl tag='INPUT' type='submit' />` to `<webctrl tag='INPUT' type='submit' name='btnK' />` (Google Search) to disambiguate from the "I'm Feeling Lucky" submit on the same page.
|
|
98
|
+
|
|
99
|
+
- **(B) Repeated UI pattern — narrow by anchor or index.** The selector matches a pattern that legitimately repeats (rows, cards, list items). Two viable fixes:
|
|
100
|
+
- **Use an anchor**: wrap the target with a `Find Anchor` (or Object Repository anchor) that locks the search to a specific neighbor (the row's first cell with a known label, the card's title, the section header above the action button). Anchors are the preferred Object Repository pattern because they survive row reordering.
|
|
101
|
+
- **Use `idx='N'`** in the selector if the position is stable across runs (e.g., always the first row). Fragile under list reordering.
|
|
102
|
+
|
|
103
|
+
Do NOT loop over every match and act on each — that is a different operation, surfaced via `NForEachUiElement`, not a fix for `NodeAmbiguousException`.
|
|
104
|
+
|
|
105
|
+
- **(C) Multiple windows / tabs open — narrow window scope.** The selector's `ScopeSelectorArgument` was too generic — e.g., `<html app='msedge.exe' title='Google' />` matches every Edge window currently titled "Google". Fix one of:
|
|
106
|
+
- Narrow the `ScopeSelectorArgument` to a title pattern unique to the intended window.
|
|
107
|
+
- Attach to the application explicitly via an `NApplicationCard` opened on the intended window — actions inside the card inherit the card's scope and ignore other windows.
|
|
108
|
+
- If multiple windows of the same app are an expected and legitimate workflow state, surface that to the workflow author — the workflow needs an explicit "switch to window N" step before the action, not a tighter selector.
|
|
109
|
+
|
|
110
|
+
- **(D) Dynamic attribute drift — use a stable attribute or wildcard.** The attribute that disambiguated at design time was regenerated, A/B-tested, or replaced at runtime. Symptom: a previously-working workflow starts failing with `NodeAmbiguousException` without any workflow change. Fix:
|
|
111
|
+
- Replace the drifting attribute with a stable one (`name`, `data-testid`, application-owned `data-*`).
|
|
112
|
+
- If no fully-stable attribute exists, use wildcard matching: `id='button_*'` or regex on the drifting portion. Validate that the wildcard still uniquely matches the intended element.
|
|
113
|
+
- Coordinate with the application team to add a stable test-id if the application is internal. UI automation against an app whose every attribute is generated is the actual problem.
|
|
114
|
+
|
|
115
|
+
- **(E) Iframe / shadow-root double traversal.** The selector traverses into an iframe or shadow root that hosts the same logical DOM as the parent — the find service then matches both the original element and the duplicate inside the frame. Open the target page's DOM and identify which frame the intended element lives in. Anchor the selector explicitly: prepend an iframe selector segment (e.g., `<webctrl tag='IFRAME' aaname='specific-frame-name' />`) for iframe, or use the application's shadow-root selector. If the duplication is unintentional (the application's bug), report it — UI automation cannot reliably target an application that duplicates its own DOM into ambient frames.
|
|
116
|
+
|
|
117
|
+
- **(F) Overlay / dialog duplicated the target — gate on dialog state.** A dialog, modal, or popup opened between a prior activity and the failing one, and the dialog hoists a copy of the underlying control. Symptom: ambiguity that only fires when a specific sibling activity ran just before. Fix:
|
|
118
|
+
- Add an `NCheckAppState` before the failing activity to wait for the dialog to close (`Disappears` mode).
|
|
119
|
+
- If the dialog is expected to stay open, narrow the selector to scope into the dialog's container only (the dialog's root has a distinguishing attribute — `role='dialog'`, `aria-modal='true'`, a specific class).
|
|
120
|
+
- Do NOT add a fixed `Delay` and hope the dialog dismisses on its own — race conditions reappear under load.
|
|
121
|
+
|
|
122
|
+
### Anti-patterns
|
|
123
|
+
|
|
124
|
+
The following are NOT valid fixes for `NodeAmbiguousException`:
|
|
125
|
+
|
|
126
|
+
- **Increase the activity `Timeout`** — irrelevant. The find service has already decided as soon as >1 match is found; more time does not change the outcome.
|
|
127
|
+
- **Switch `InteractionMode`** (Simulate / Hardware Events / ChromiumAPI / WindowMessages) — input mode applies to the action after the target is found. The target was never found uniquely; input mode does not enter.
|
|
128
|
+
- **Enable Healing Agent on the activity / card / process** — Healing Agent explicitly bypasses `NodeAmbiguousException` (`FindAlternativeOriginalTargetHiddenStrategy` short-circuits when the exception type is detected). Turning HA on produces no recovery data and no fix.
|
|
129
|
+
- **Wrap the activity in a try / catch and ignore the exception** — the action never happened; downstream workflow state is invalid.
|
|
130
|
+
- **Wrap the activity in a Retry Scope** — ambiguity is structural, not transient. Retrying the same selector returns the same multiple matches every time.
|
|
131
|
+
- **Add `idx='1'` unconditionally** — only valid in branch (B) when position is stable across runs. Doing it blindly hides selector drift and masks future regressions.
|