Skip to content
Back to skills

Add Dataverse

ASecurity

Adds Dataverse tables to a Power Apps code app with generated TypeScript models and services. Can also create new Dataverse tables. Use when connecting to Dataverse, adding tables, creating schema, or querying Dataverse data.

  • 963 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 27, 2026
developmenttypescriptgoshellbashazureapisecurity

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add microsoft/power-platform-skills --skill add-dataverse --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Add Dataverse?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Add Dataverse
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/microsoft-add-dataverse/badge)](https://www.skillsdirectory.com/skills/microsoft-add-dataverse)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: add-dataverse
description: Adds Dataverse tables to a Power Apps code app with generated TypeScript models and services. Can also create new Dataverse tables. Use when connecting to Dataverse, adding tables, creating schema, or querying Dataverse data.
user-invocable: true
allowed-tools: Read, Edit, Write, Grep, Glob, Bash, LSP, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, Skill, EnterPlanMode, ExitPlanMode
model: opus
---

**πŸ“‹ Shared Instructions: [shared-instructions.md](${CLAUDE_PLUGIN_ROOT}/shared/shared-instructions.md)** - Cross-cutting concerns.

**References:**

- [dataverse-reference.md](./references/dataverse-reference.md) - Picklist fields, virtual fields, lookups, file/image columns, form patterns (CRITICAL)
- [api-authentication-reference.md](./references/api-authentication-reference.md) - Dataverse API auth, token, publisher prefix
- [table-management-reference.md](./references/table-management-reference.md) - Query, create, extend tables and columns
- [data-architecture-reference.md](./references/data-architecture-reference.md) - Relationship types, dependency tiers

# Add Dataverse

Two paths: **existing tables** (skip to Step 5) or **new tables** (full workflow).

## Workflow

1. Plan β†’ 2. Setup API Auth β†’ 3. Review Existing Tables β†’ 4. Create Tables β†’ 5. Add Data Source β†’ 6. Review Generated Files β†’ 7. Build

---

### Step 1: Plan

Check memory bank for project context. Ask the user:

1. Which Dataverse table(s) do they need? (e.g., `account`, `contact`, `cr123_customentity`)
2. Do the tables **already exist** in their environment, or do they need to **create new** ones?

**If tables already exist:** Skip to Step 5.

**If creating new tables:**

- Ask about the data they need and design an appropriate schema
- Use standard Dataverse tables when appropriate (`contact` for people, `account` for organizations)
- Build a dependency graph -- see [data-architecture-reference.md](./references/data-architecture-reference.md) for tier classification
- Enter plan mode with `EnterPlanMode`, present ER model with tables, columns, relationships, and creation order
- Get approval with `ExitPlanMode`

### Step 2: Setup API Auth (if creating tables)

See [api-authentication-reference.md](./references/api-authentication-reference.md) for full details.

```powershell
az account show   # Verify Azure CLI logged in

# Find your Dataverse environment URL:
# In make.powerapps.com β†’ Settings β†’ Developer resources β†’ Web API endpoint
# It looks like: https://<org-name>.crm.dynamics.com/api/data/v9.2/
# Use the base URL: https://<org-name>.crm.dynamics.com

$api = Initialize-DataverseApi -EnvironmentUrl "https://<org>.crm.dynamics.com"
$headers = $api.Headers
$baseUrl = $api.BaseUrl
$publisherPrefix = $api.PublisherPrefix
```

Requires **System Administrator** or **System Customizer** security role.

### Step 3: Review Existing Tables (if creating tables)

**Always query existing tables first before creating:**

```powershell
$existingTables = Invoke-RestMethod -Uri "$baseUrl/EntityDefinitions?`$filter=IsCustomEntity eq true&`$select=SchemaName,LogicalName,DisplayName" -Headers $headers
```

See [table-management-reference.md](./references/table-management-reference.md) for `Find-SimilarTables`, `Compare-TableSchemas`, and `Build-TableNameMapping` functions.

Present findings to user with `AskUserQuestion`:

- Tables that can be **reused** (already exist with matching columns)
- Tables that need **extension** (exist but missing columns)
- Tables that must be **created** (no match found)

### Step 4: Create Tables (if creating tables)

Get explicit confirmation before creating. Create in dependency order:

- **Tier 0**: Reference tables (no dependencies)
- **Tier 1**: Primary entities (reference Tier 0)
- **Tier 2**: Dependent tables (reference Tier 1)

Use safe functions from [table-management-reference.md](./references/table-management-reference.md):

- `New-DataverseTableIfNotExists`
- `Add-DataverseColumnIfNotExists`
- `Add-DataverseLookupIfNotExists` (from [data-architecture-reference.md](./references/data-architecture-reference.md))

### Step 5: Add Data Source

For each table:

```bash
npx power-apps add-data-source -a dataverse -t <table-logical-name>
```

Can add multiple tables by running the command for each one.

### Step 6: Review Generated Files

The command generates:

- `src/generated/models/{Table}Model.ts` -- TypeScript interfaces, plus `{Table}FileColumnName`, `{Table}ImageColumnName`, `{Table}UploadColumnName` union types if the table has file/image columns
- `src/generated/services/{Table}Service.ts` -- CRUD methods (create, get, getAll, update, delete) plus `upload`, `downloadFile`, `downloadImage`, `deleteFileOrImage` if file/image columns exist

Show the user a usage example:

```typescript
import { AccountsService } from "../generated/services/AccountsService";

const result = await AccountsService.getAll({
  select: ["name", "accountnumber"],
  filter: "statecode eq 0",
  orderBy: ["name asc"],
  top: 50
});
const accounts = result.data || [];
```

**Key rules:**

- Use generated services (e.g., `AccountsService.getAll()`), not fetch/axios
- Check `result.data` for actual data
- Don't edit generated files unless needed
- **Read [dataverse-reference.md](./references/dataverse-reference.md) before writing any Dataverse code** -- picklist fields, virtual fields, lookups, and file/image columns all have critical gotchas

### Step 7: Build

```bash
npm run build
```

Fix TypeScript errors before proceeding. Do NOT deploy yet.

### Update Memory Bank

Record which tables were added (or created), generated files, and any schema notes.

Files in this skill

  • SKILL.md5.6 KB
  • references/api-authentication-reference.md5.2 KB
  • references/data-architecture-reference.md3.7 KB
  • references/dataverse-reference.md12.8 KB
  • references/table-management-reference.md15.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.