power-fx-development

Writes and debugs delegable Power Fx formulas for canvas Power Apps backed by SharePoint lists.

Updated Jul 25, 2026
One-click install
npx skills add https://github.com/RorySullivan1/powerapp_taskmaster --skill power-fx-development-rorysullivan1
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: power-fx-development
Source: https://github.com/RorySullivan1/powerapp_taskmaster/tree/main/.claude/skills/power-fx-development
Command: npx skills add https://github.com/RorySullivan1/powerapp_taskmaster --skill power-fx-development-rorysullivan1

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Canvas Power Apps formulas against SharePoint lists silently return wrong or partial results when they don't delegate, and procedural coding habits produce slow, non-idiomatic Power Fx. This Skill authors correct, delegable formulas from the start and fixes delegation warnings, Patch failures, and state-management confusion. ## Core Features & Use Cases - Delegation-first formula authoring: Rewrites non-delegable patterns (Search, in-operator, IsBlank predicates, aggregates) into delegable Filter/StartsWith/Or-of-equals forms, backed by a full SharePoint delegation matrix in delegation.md. - State and write-back guidance: Chooses the right scope (Set, UpdateContext, With, Collect, App.Formulas) and writes correct Patch/SubmitForm code including Choice, Lookup, and Person column record shapes. - Performance and error handling: Applies Concurrent, caching, named formulas, IfError/Notify patterns, and the data-row-limit-1 testing technique. - Use Case: A gallery over a 6,000-item Orders list shows only 500 rows with a blue underline under Search. The Skill rewrites it as a delegable Sort(Filter(...StartsWith...)) so SharePoint filters server-side and all rows are searchable. ## Quick Start Ask the assistant to write or fix a Power Fx formula for your canvas app, for example to make a gallery filter delegate to SharePoint or to Patch a record with Choice and Person columns.

Frequently Asked Questions about power-fx-development

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I fix a delegation warning in Power Apps?▼

Rewrite the non-delegable clause into a delegable equivalent: replace Search with Filter plus StartsWith, replace the in operator with an explicit Or chain of equals comparisons, and replace IsBlank predicates with column = Blank() on simple columns. One non-delegable clause makes the entire query local.

Why does my Power Apps gallery only show 500 rows?▼

A non-delegable formula causes Power Apps to pull only the first data-row-limit records (default 500, max 2000) and filter locally. Make every clause delegable so SharePoint filters server-side; raising the limit is a band-aid that still fails past 2000 rows.

How do I Patch a Choice or Person column to SharePoint?▼

Choice, Lookup, and Person columns are records, not strings. Patch a Choice as {Value: "Active"} and a Person with the full record shape including Claims, DisplayName, and Email. Patching plain strings fails or silently does nothing.

Should I use Set, UpdateContext, or App.Formulas in Power Apps?▼

Use UpdateContext for screen-local state, Set only for values shared across screens, and With for naming subexpressions inline. Prefer named formulas in App.Formulas over piling Set calls into OnStart, since named formulas recompute automatically and don't slow startup.

Does StartsWith delegate to SharePoint in Power Apps?▼

Yes, StartsWith delegates on plain Text columns, making it the standard replacement for the non-delegable Search function. It does not delegate on Choice or Lookup subfields, and on Person columns only Email and DisplayName subfields are delegable.

When should I not use ForAll in Power Fx?▼

ForAll is a table transform, not a loop, with no guaranteed order or accumulator. A Patch inside ForAll issues one network request per row and doesn't delegate; for bulk writes use a single Patch(list, table_of_records) or a Form instead.