PPDS.Plugins
1.1.0
dotnet add package PPDS.Plugins --version 1.1.0
NuGet\Install-Package PPDS.Plugins -Version 1.1.0
<PackageReference Include="PPDS.Plugins" Version="1.1.0" />
<PackageVersion Include="PPDS.Plugins" Version="1.1.0" />
<PackageReference Include="PPDS.Plugins" />
paket add PPDS.Plugins --version 1.1.0
#r "nuget: PPDS.Plugins, 1.1.0"
#:package PPDS.Plugins@1.1.0
#addin nuget:?package=PPDS.Plugins&version=1.1.0
#tool nuget:?package=PPDS.Plugins&version=1.1.0
PPDS.Plugins
Plugin development attributes for Microsoft Dataverse. Part of the Power Platform Developer Suite ecosystem.
Overview
PPDS.Plugins provides declarative attributes for configuring Dataverse plugin registrations directly in your plugin code. These attributes are extracted by PPDS.Tools to generate registration files that can be deployed to any environment.
Installation
dotnet add package PPDS.Plugins
Or via the NuGet Package Manager:
Install-Package PPDS.Plugins
Usage
Basic Plugin Step
using PPDS.Plugins;
[PluginStep(
Message = "Create",
EntityLogicalName = "account",
Stage = PluginStage.PostOperation)]
public class AccountCreatePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Plugin implementation
}
}
Plugin with Filtering Attributes
[PluginStep(
Message = "Update",
EntityLogicalName = "contact",
Stage = PluginStage.PreOperation,
Mode = PluginMode.Synchronous,
FilteringAttributes = "firstname,lastname,emailaddress1")]
public class ContactUpdatePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Only triggers when specified attributes change
}
}
Plugin with Images
[PluginStep(
Message = "Update",
EntityLogicalName = "account",
Stage = PluginStage.PostOperation)]
[PluginImage(
ImageType = PluginImageType.PreImage,
Name = "PreImage",
Attributes = "name,telephone1,revenue")]
public class AccountAuditPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Access pre-image via context.PreEntityImages["PreImage"]
}
}
Asynchronous Plugin
[PluginStep(
Message = "Create",
EntityLogicalName = "email",
Stage = PluginStage.PostOperation,
Mode = PluginMode.Asynchronous)]
public class EmailNotificationPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Runs in background via async service
}
}
Attributes
PluginStepAttribute
Defines how a plugin is registered in Dataverse.
| Property | Type | Description |
|---|---|---|
Message |
string | SDK message name (Create, Update, Delete, etc.) |
EntityLogicalName |
string | Target entity logical name |
Stage |
PluginStage | Pipeline stage (PreValidation, PreOperation, PostOperation) |
Mode |
PluginMode | Execution mode (Synchronous, Asynchronous) |
FilteringAttributes |
string | Comma-separated attributes that trigger the plugin |
ExecutionOrder |
int | Order when multiple plugins registered for same event |
Name |
string | Display name for the step |
StepId |
string | Unique ID for associating images with specific steps |
PluginImageAttribute
Defines pre/post images for a plugin step.
| Property | Type | Description |
|---|---|---|
ImageType |
PluginImageType | PreImage, PostImage, or Both |
Name |
string | Key to access image in plugin context |
Attributes |
string | Comma-separated attributes to include |
EntityAlias |
string | Entity alias (defaults to Name) |
StepId |
string | Associates image with specific step |
Enums
PluginStage
PreValidation (10)- Before main system validationPreOperation (20)- Before main operation, within transactionPostOperation (40)- After main operation
PluginMode
Synchronous (0)- Immediate execution, blocks operationAsynchronous (1)- Background execution via async service
PluginImageType
PreImage (0)- Entity state before operationPostImage (1)- Entity state after operationBoth (2)- Both pre and post images
Related Projects
- power-platform-developer-suite - VS Code extension
- ppds-tools - PowerShell deployment module
- ppds-alm - CI/CD pipeline templates
- ppds-demo - Reference implementation
License
MIT License - see LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Framework | net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
-
.NETFramework 4.6.2
- No dependencies.
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Added SecureConfiguration property to PluginStepAttribute. Updated CI dependencies.