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)

  1. Mapping fixieren: Leads/Kontakte/Konten, Aktivitäten, Produkte, Preislisten, Opportunities, Cases.
  2. Qualität: Pflichtfelder, Picklists, Dubletten, Schlüssel (extern/alternativ).
  3. 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).
  4. Läufe: T0 (Mini), T1 (repräsentativ), T2 (voll), Delta kurz vor Cut-Over.
  5. 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert