A helper library for Dataverse plugins, console apps, and Azure Functions.
I have created a bunch of "base classes" over time - sometimes including too much, sometimes too simple. I've called them xxxBag, xxxContainer, xxxUtils etc. etc.
I wanted a single, reliable toolkit that could use base classes and helpers to work with Dataverse, and the hardest thing is, of course, to find a proper name for it. I want to have an easy name that explains what it does, a thing that contains an IOrganizationService, somewhere to log it, and might have info from the context... Trying to open my mind, letting Ms. Copilot help me. Bag, Purse, Container, Sack, Grip...?
A 'sack' is a part of a 'rucksack'... I like to use a rucksack, which is easy to carry and great for having everything I need in my backpack. I've used it forever; I never use a briefcase.
That’s why I created RappSack — my personal backpack of essentials for Dataverse development.
RappSack is a C# library that provides base classes and utilities for working with Microsoft Dataverse. It simplifies service access, logging, and context handling across different environments:
- Plugins
- Console applications
- Azure Functions
- RappSackCore – Common functionality for all environments, implements
IOrganizationService - RappSackTracerCore – Abstract class for unified tracing/logging
- RappSackPlugin – Base class for Dataverse plugins, inheriting
RappSackCore, implementsIPluginandITracingService - RappSackConsole – Base class console apps, inheriting
RappSackCore
- Static helpers –
RappSackMeta,RappSackUtils - CanaryTracer – Unifying logging even more, especially for plugins
RappSack for Microsoft.PowerPlatform.Dataverse
- RappSackDVCore – A layer above RappSackCore and handles newer stuff
- RappSackDVTracerCore – A layer above RappSackTracerCore and also handles Microsoft.Extensions.Logging
- Add RappSack as a submodule:
git submodule add https://github.com/rappen/RappSack.git- Add those shared project you need in your solution.
- Add added shared projects as refereces to your project(s).
using RappSackPlugin;
public class SamplePlugin : RappSackPluginBase
{
public override void Execute()
{
Trace("Plugin execution started.");
var target = Target;
Trace($"Target entity: {target.LogicalName}");
var preimage = ContextEntity[ContextEntityType.PreImage];
// Your logic here
}
}- Azure Functions integration
- Custom tracing providers
- Metadata helpers (
RappSackMeta)
Pull requests are welcome! Please open an issue for discussion before major changes.
– see LICENSE.
