Neben Business Central arbeite ich auch intensiv im Dynamics 365 CRM-Umfeld (Sales, Customer Service, Field Service). Mein Fokus: saubere Anpassungen, robuste C#-Entwicklung und revisionssichere Datenmigrationen – immer mit Blick auf End-to-End-Prozesse und Integration in Azure/SharePoint/BC.
Was ich typischerweise umsetze
- Anpassungen (Low-/Pro-Code): Tabellen, Beziehungen, Formulare, Business Rules, Ansichten, Security-Rollen, App-Module.
- Automatisierung: Power Automate/Logic Apps für Benachrichtigungen, Genehmigungen, DMS-Ablage, EDI/REST-Integrationen.
- C#-Entwicklung: Plugins (Pre/Post Operation), Custom Actions, Webhooks, Azure Functions (isolated .NET) als leichtgewichtige Services, PCF-Controls für bessere UI/UX.
- Integration: Dataverse ↔ Business Central/D365-Apps via API Management, Service Bus/Event Grid, Dual-Write-Alternativen und maßgeschneiderte REST-Endpunkte.
- Datenmigration: KingswaySoft/SSIS, Configuration Migration Tool, Dataflows; Dedupe, Referenzreihenfolge, Delta-Cutover.
Mini-Beispiel: C#-Plugin (Pre-Operation on Create)
Ziel: Kundennummer erzeugen und USt-ID normalisieren – sauber und nachvollziehbar.
csharpCopyEditusing Microsoft.Xrm.Sdk;
using System;
public class AccountPrepareOnCreate : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var ctx = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
if (!ctx.InputParameters.Contains("Target") || !(ctx.InputParameters["Target"] is Entity target) || target.LogicalName != "account")
return;
// USt-ID vereinheitlichen
if (target.Contains("msdyn_vatnumber") && target["msdyn_vatnumber"] is string vat)
target["msdyn_vatnumber"] = vat.ToUpperInvariant().Replace(" ", "");
// Kundennummer generieren, falls leer
if (!target.Contains("accountnumber") || string.IsNullOrWhiteSpace(target.GetAttributeValue<string>("accountnumber")))
target["accountnumber"] = $"ACC-{DateTime.UtcNow:yyyyMMddHHmmss}";
}
}
Registrierung: Pre-Operation / Synchronous auf Create für account. Änderungen am Target greifen direkt ohne zusätzlichen Update-Call.
Azure-Anbindung (C#) – leichtgewichtig mit Functions
- Eingehende Webhooks aus Dataverse (Create/Update) per Azure Function (isolated .NET 8) verarbeiten.
- Validieren/Enrichen, dann in Business Central oder SharePoint schreiben.
- Vorteil: Skalierbar, kosteneffizient, sauber testbar; Secrets via Key Vault.
Datenmigration – kurz & schmerzlos (so weit möglich)
- Mapping fixieren: Leads/Kontakte/Konten, Aktivitäten, Produkte, Preislisten, Opportunities, Cases.
- Qualität: Pflichtfelder, Picklists, Dubletten, Schlüssel (extern/alternativ).
- Werkzeuge:
- KingswaySoft/SSIS für Massendaten & Deltas (inkl. Lookup auf Owner/Teams/BU).
- Configuration Migration Tool für Konfig/Referenzdaten.
- Skripte/.NET Loader für Spezialfälle (Attachments, Notes mit verknüpften IDs).
- Läufe: T0 (Mini), T1 (repräsentativ), T2 (voll), Delta kurz vor Cut-Over.
- Cut-Over: Reihenfolge (Stammdaten → Historie → Offene Vorgänge), Prüfberichte, Rollback-Plan.
Warum das in Projekten trägt
- Prozesse im Blick: Vom Lead bis zur Auslieferung/Service – CRM ist kein Insel-Tool.
- Entwicklung mit Maß: Erst Standard/No-Code, dann Events/Plugins/Functions, wenn nötig.
- Messbar besser: Weniger Klicks, konsistente Daten, klarer Betrieb (Telemetry, Retry, Idempotenz).
Wenn du CRM-Anpassungen, eine sichere Migration oder eine C#-Erweiterung brauchst (Plugin, Function, PCF) – sag Bescheid. Ich bringe dein Dynamics-365-Setup mit Azure/BC ins Laufen: stabil, nachvollziehbar, integrierbar.
Schreibe einen Kommentar