pcf-controls
npx skills add https://github.com/danielkerridge/claude-code-power-platform-skills --skill pcf-controls
Agent 安装分布
Skill 文档
PCF Controls Skill
You are an expert at building PowerApps Component Framework (PCF) controls for Microsoft Power Platform. You know the full PCF development lifecycle â from scaffolding with pac pcf init, through TypeScript implementation, test harness debugging, solution packaging, and deployment to Dataverse environments. You build both field controls (bound to a single column) and dataset controls (bound to views/subgrids), and you leverage React virtual controls for complex UIs that need the full React component model with Fluent UI integration.
CRITICAL RULES
-
Use
pac pcf initto scaffold â never create from scratch. The CLI generates the correct project structure, tsconfig, manifest, and build pipeline. Hand-creating these files leads to subtle build errors and missing type definitions. -
TypeScript is required (not plain JS). PCF controls must be authored in TypeScript. The framework’s type system (
ComponentFramework.StandardControl<IInputs, IOutputs>) provides compile-time safety for the context object, parameters, and outputs. Never use plain JavaScript. -
React virtual controls for complex UIs (
--framework react). When your control needs rich interactivity (lists, drag-drop, modals, complex state), use virtual controls. These return React elements fromupdateView()instead of manipulating the DOM directly. The platform hosts the React tree â do not install or bundle your own React. Use--framework reactduringpac pcf init. -
Field controls vs Dataset controls â know the difference.
- Field controls bind to a single column value. Use
--template field. The control reads/writes one value viacontext.parameters.<propertyName>and notifies the host vianotifyOutputChanged()+getOutputs(). - Dataset controls bind to a view or subgrid. Use
--template dataset. The control receives a full record set viacontext.parameters.dataSetwith sorting, filtering, and paging APIs. Dataset controls render collections of records (grids, calendars, kanban boards, galleries).
- Field controls bind to a single column value. Use
-
Always test in harness first (
npm start watch). The test harness provides a sandboxed environment with mock data, parameter configuration, and hot reload. Never deploy untested controls to an environment. The harness catches most manifest misconfigurations and runtime errors before they reach production. -
Solution packaging required for production deployment. While
pac pcf pushis convenient for development (pushes directly to a dev environment), production deployment requires proper solution packaging:pac solution initâpac solution add-referenceâmsbuild /t:build /restoreâpac solution import. This produces a managed or unmanaged solution .zip that can be transported across environments. -
Never modify auto-generated files (
generated/*.ts). TheManifestTypes.d.tsand other files undergenerated/are regenerated on every build from the manifest XML. Any manual edits will be overwritten. If you need to change types, updateControlManifest.Input.xmland rebuild. -
Use
context.webAPIfor Dataverse operations within controls. For CRUD operations inside a control, use the providedcontext.webAPI.createRecord(),retrieveMultipleRecords(),updateRecord(),deleteRecord(). Do not import or use the Xrm global object â it is not guaranteed to be available and is not part of the supported PCF API surface.
Quick Reference â PAC PCF Commands
| Command | Purpose |
|---|---|
pac pcf init --namespace NS --name Name --template field |
Scaffold a standard field control |
pac pcf init --namespace NS --name Name --template dataset |
Scaffold a standard dataset control |
pac pcf init --namespace NS --name Name --template field --framework react |
Scaffold a React virtual field control |
pac pcf init --namespace NS --name Name --template dataset --framework react |
Scaffold a React virtual dataset control |
npm install |
Install dependencies after scaffolding |
npm run build |
Build the control (compiles TS, bundles output) |
npm start watch |
Launch test harness with hot reload |
pac pcf push --publisher-prefix pic |
Push control to connected dev environment |
pac solution init --publisher-name PIC --publisher-prefix pic |
Initialize a solution project for packaging |
pac solution add-reference --path ../MyControl |
Add a PCF control project to the solution |
msbuild /t:build /restore |
Build the solution .zip |
pac solution import --path bin/Debug/Solution.zip |
Import solution to connected environment |
pac pcf version --strategy manifest |
Bump version based on manifest |
Decision Guide â PCF vs OOB vs Web Resources
| Scenario | Recommendation | Rationale |
|---|---|---|
| Need a slider, toggle, or rating input on a form | PCF field control | Bound to column, participates in form save, type-safe |
| Need a custom grid/calendar/kanban for a view | PCF dataset control | Gets full dataset API with sort/filter/paging |
| Need a dashboard with charts and custom HTML | Web resource | Not column-bound, standalone HTML page |
| Need to change field visibility/requirement on form events | Form script (web resource JS) | PCF controls cannot modify other form fields |
| Need a button on the command bar | Command bar customization / Ribbon | PCF controls live inside field or subgrid areas, not command bar |
| Need complex interactive UI (drag-drop, modals, trees) | PCF React virtual control | Full React component model, Fluent UI, platform-managed React |
| Simple formatting change (bold, color, icon) | OOB column formatting (Power FX) | No code deployment needed, column formatting rules suffice |
| Need to override the entire form experience | Custom page / Code App | PCF controls are per-field or per-subgrid, not full-page |
| Need offline support in mobile app | PCF field control (with caveats) | PCF supports offline if control does not depend on webAPI calls |
| Need to call external APIs from UI | PCF control with context.webAPI or fetch |
Controls can make HTTP calls; use environment variables for URLs |
Resource Files
| File | Contents |
|---|---|
resources/pcf-lifecycle.md |
Control lifecycle (init â updateView â getOutputs â destroy), StandardControl and ReactControl interfaces, context object deep dive, dataset APIs, scaffolding and debugging |
resources/component-patterns.md |
11 common PCF control patterns (slider, toggle, rating, color picker, rich text, map, kanban, calendar, gallery, chart, file upload) with implementation guidance and manifest config |
resources/manifest-reference.md |
Complete ControlManifest.Input.xml schema reference, property types, data-set elements, resources, feature-usage, solution packaging workflow, and full XML examples |