A reference implementation for Dynamics 365 CE / Dataverse that demonstrates the capabilities of the Power Platform Developer Suite VS Code extension and the PPDS ecosystem.
This repository serves four main goals:
-
Showcase Extension Capabilities - Provides real-world examples of plugins, web resources, cloud flows, and other components that demonstrate what the VS Code extension can do
-
Reference Architecture / Starter Template - Clone this repo, replace the demo content, keep the infrastructure (CI/CD, branching, docs) as a starting point for new projects
-
AI-Assisted Development Reference - Well-structured patterns in CLAUDE.md that AI coding assistants can use when helping build Power Platform solutions
-
Educational Example - Shows complex ALM concepts at a micro level without clutter - one correct example of each component type
- .NET SDK 6.0+ (for tooling)
- .NET Framework 4.6.2 Developer Pack (for plugins)
- Power Platform CLI (PAC) (for solution management)
- PPDS.Plugins (NuGet): Plugin step registration attributes
# Installed via project reference - see src/Plugins/PPDSDemo.Plugins/PPDSDemo.Plugins.csproj
- PPDS.Tools (PowerShell): Deployment automation cmdlets
Install-Module PPDS.Tools -Scope CurrentUser
# Clone the repository
git clone https://github.com/joshsmithxrm/ppds-demo.git
cd ppds-demo
# Restore NuGet packages
dotnet restore
# Build the plugin projects
dotnet build src/Plugins/PPDSDemo.Plugins/PPDSDemo.Plugins.csproj
# Run tests (when available)
dotnet test
# Pack the solution (requires PAC CLI)
pac solution pack --zipfile solutions/exports/PPDSDemo.zip --folder solutions/PPDSDemo/src| Component | Description |
|---|---|
| Plugin Assembly | Classic IPlugin implementations with PPDS.Plugins attributes |
| Plugin Package | Modern NuGet-based plugin package with external dependencies |
| Custom Workflow Activities | CodeActivity implementations for classic workflows |
| Web Resources | JavaScript/TypeScript, HTML, CSS, and images |
| Custom Tables | Demo entities with relationships |
| Solution | Unpacked solution using --packagetype Both |
| CI/CD Workflows | GitHub Actions for export and deployment |
/
├── src/
│ ├── Plugins/ # Plugin assemblies
│ │ └── PPDSDemo.Plugins/ # Classic plugin assembly
│ ├── PluginPackages/ # Modern plugin packages
│ │ └── PPDSDemo.PluginPackage/ # NuGet-based plugin package
│ └── Shared/
│ └── PPDSDemo.Entities/ # Generated early-bound entities
│
├── solutions/
│ └── PPDSDemo/
│ └── src/ # Unpacked solution (source control)
│
├── tools/ # Example deployment scripts
├── .github/ # CI/CD workflows
└── docs/ # Documentation
This demo solution is part of the Power Platform Developer Suite ecosystem:
| Repository | Purpose | Usage in this Demo |
|---|---|---|
| ppds-sdk | NuGet packages for plugin development | PPDS.Plugins package for step registration attributes |
| ppds-tools | PowerShell module for Dataverse operations | Deployment scripts in tools/ |
| ppds-alm | CI/CD templates for GitHub Actions | Workflow examples in .github/workflows/ |
| power-platform-developer-suite | VS Code extension | Development experience |
Plugins use attribute-based registration with the PPDS.Plugins package:
using PPDS.Plugins;
[PluginStep(
Message = "Update",
EntityLogicalName = "account",
Stage = PluginStage.PostOperation,
Mode = PluginMode.Asynchronous,
FilteringAttributes = "name,telephone1")]
[PluginImage(
ImageType = PluginImageType.PreImage,
Name = "PreImage",
Attributes = "name,telephone1")]
public class AccountAuditPlugin : PluginBase
{
protected override void ExecutePlugin(LocalPluginContext context)
{
// Plugin implementation
}
}- Build:
dotnet build -c Release - Extract:
.\tools\Extract-PluginRegistrations.ps1 - Deploy:
.\tools\Deploy-Plugins.ps1
This repository includes GitHub Actions workflows for Power Platform ALM:
| Workflow | Trigger | Description |
|---|---|---|
| ci-export.yml | Nightly / Manual | Exports from Dev with noise filtering |
| cd-qa.yml | Push to develop | Deploys to QA environment |
| cd-prod.yml | Push to main | Deploys managed solution to Production |
| pr-validation.yml | Pull requests | Validates solution builds correctly |
See docs/strategy/PIPELINE_STRATEGY.md for details.
- ALM Overview - High-level ALM philosophy
- Environment Strategy - Dev/QA/Prod configuration
- Branching Strategy - develop/main workflow
- Pipeline Strategy - CI/CD approach
- CLAUDE.md - AI-assistable coding patterns
- Plugin Components Reference - Plugin development
- Solution Structure Reference - ALM structure
- Tools Reference - Deployment scripts
This is primarily a demonstration repository. If you find issues or have suggestions for better patterns, please open an issue.
MIT License - See LICENSE for details.