European Credit Management Firm — Insurance & Debt Recovery · 2026
Credit Management Platform Engineering
Multi-workstream Dataverse platform engineering for a credit management firm — custom plugins, flow engineering, web resource modernization, SharePoint security, and search performance optimization.
0+
Active cases under management
0
Power Automate flows maintained
0
JavaScript web resources audited
~0%
Search index reduction (projected)
Challenge
A European credit management firm operates a mature Dynamics 365 CE platform managing 35,000+ active debt recovery cases, served by 30+ case handlers, 163 Power Automate flows, and a client self-service Power Pages portal. After several years of incremental development across multiple teams, the platform accumulated technical debt spanning plugins, flows, web resources, and search/storage configuration — beginning to affect reliability and performance.
Solution
Brought in as external Dataverse consultant to own technical analysis and engineering across multiple workstreams in parallel: custom C# plugin development, Power Automate flow engineering, JavaScript web resource modernization, SharePoint security architecture, and Dataverse Search performance optimization. Each workstream involved direct stakeholder communication with the product owner, technical lead, and case handlers to validate scope and trade-offs before implementation.
Tech Stack
The Problem
The platform showed several symptoms of accumulated drift: email duplication on the Outlook tracking layer (the add-in's retry mechanism produced two records with identical MessageID, polluting case timelines), no server-side enforcement of business rules (key template-generated tasks could be deleted by handlers, breaking workflow integrity), 12 of 32 JavaScript web resources still relied on the deprecated Xrm.Page API, a SharePoint security mismatch where every authenticated tenant user could browse confidential case documents regardless of Dataverse roles, and a bloated Dataverse Search index consuming 16 GB on DEV alone across 51 indexed tables including many Microsoft-managed entities the firm never used.
Custom Plugin Development
Built a Pre-Validation Delete plugin in C# that blocks deletion of any task created from a key template — server-side enforcement closes the bypass loophole that UI-level locks left open, regardless of whether the deletion comes from the form, a grid, or the Web API. The plugin was scaffolded, built, signed, and deployed entirely from macOS using dotnet + pac CLI + direct Dataverse Web API calls — no Visual Studio, no Plugin Registration Tool. Navigating this required working through several undocumented Dataverse behaviours (solution-prefix requirement on PluginPackage fields, first-time registration via direct POST, correct ComponentType for package-to-solution association). I captured the full cross-platform recipe in a reference file now reused across multiple Power Platform projects.
Power Automate Flow Engineering
Diagnosed and rebuilt the email deduplication pipeline across three concrete scenarios: incoming email arriving when an Outgoing record already exists (cancel incoming, clear the regarding lookup), same-direction duplicates (cancel the newer, preserve the older), and outgoing email superseding an incoming (cancel the older, migrate the regarding link). Several Dataverse/Power Automate discoveries fed the implementation: the Dataverse connector cannot clear polymorphic lookups like regardingobjectid (implemented via raw HTTP DELETE with forwarded auth token), a 60-second Delay protecting against race conditions required a sibling Terminate action with runAfter Failed/TimedOut to swallow legitimate 404s from Get_trigger_email without flooding the support inbox. Validated by byte-level structural diff against backup before deployment and end-to-end tested on DEV.
Web Resource Modernization
Audited all 32 JavaScript web resources in the active solution and produced a per-script refactoring plan: 12 of 32 still used the deprecated Xrm.Page API, 27 of 32 lacked namespace wrappers (global scope collision risk), 29 of 32 lacked try/catch blocks (silent failure risk), and 20 of 32 had console.log statements left from development. Delivered a phased plan (~5–6 hours of work across 4 phases) with per-script problem/solution/test specifications structured as Jira-ready tasks. Phases 1–3 fully eliminate deprecated API usage; Phase 4 handles best-practice cleanup. The shared utility library refactor was flagged as high-impact (signature change requires updating all callers simultaneously) and isolated to its own phase.
Dataverse Search Performance
The product owner reported that Dataverse Search in PPAC showed 354 indexed columns out of 950 (37%), and the team hadn't been able to reconcile this with a SQL backend dump showing different field counts. Performed a full reconciliation: confirmed 51 tables enabled for Global Search via EntityMetadata.SyncToExternalSearchIndex, parsed all 50 default Quick Find Views extracting Find/View/Filter columns, applied Microsoft's index multipliers (Lookup ×3, OptionSet/State/Status ×2), and reconciled to 328 weighted fields plus common defaults — within ~5% of the UI's number. Identified that the SQL flag the team was investigating (issearchable = 2,011 fields) is IsValidForAdvancedFind — a permission flag, not a Global Search membership flag. The team had been chasing the wrong lever. Delivered a cleanup plan with two leverage points: remove ~35 unused tables from the index (Customer Service, Field Service, Copilot Studio, Power Pages tables the firm never used) for the largest single ROI, plus trim Find/View columns from remaining Quick Find Views. Created a dedicated unmanaged solution structured for clean transport to TEST and PROD, with projected ~50–60% reduction in weighted index fields.
Outcome
Custom plugin deployed to DEV and confirmed by the product owner ("All works as expected"). Email deduplication flow active on DEV and PROD covering all three duplicate scenarios with safe failure modes. Web resource refactoring plan accepted — 25 dev tasks ready for sprint planning with per-script test plans. SharePoint security architecture decision unblocked with written trade-off matrix delivered to the technical lead for budget approval. Search index cleanup solution prepared for transport with projected ~60% reduction in weighted indexed fields. Parallel documentation produced: a reference file for cross-platform plugin deployment from macOS (now reused across other projects), a worklog capturing every deploy and decision for client billing transparency, and an ongoing Dataverse API knowledge base capturing platform-specific gotchas.