You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Evaluate ITracingService messages via String.Format and expose collected trace log
Trace messages with format args are now evaluated through String.Format so
invalid format strings surface during testing instead of being silently
swallowed. Arg-less messages remain verbatim, matching platform behavior.
Trace messages are also collected by the default tracing service factory and
exposed via XrmMockupBase.TraceLog (with ClearTraceLog) so tests can assert on
emitted trace output.
Co-Authored-By: Claude <noreply@anthropic.com> via Conducktor <conducktor@contextand.com>
* Group trace messages per plugin execution via PluginTraceLog
Trace messages are now grouped by the plugin execution that produced them,
mirroring the plugintracelog records of a real Dynamics 365 environment. Each
XrmMockupBase.PluginTraceLog entry captures the invoking type, message name,
primary entity, operation type, depth, correlation id, mode, request id,
execution start time, duration, the ordered list of trace messages and any
exception details.
PluginTrigger now times each sync/async plugin execution, captures thrown
exceptions and records an entry with the execution's own trace messages.
Internal XrmMockup system plugins are excluded. Configuration/secure
configuration and plugin step ids are not modeled by XrmMockup and remain null.
Co-Authored-By: Claude <noreply@anthropic.com> via Conducktor <conducktor@contextand.com>
* Extend grouped trace log to custom APIs and workflow activities
The per-execution trace grouping introduced for plugins now also covers custom
API executions and workflow activity executions (sync and async). A shared
PluginTraceRecorder helper centralizes the timing, exception capture and trace
message collection used by all three paths; CustomApiManager and WorkflowManager
now route their executions through it.
Custom API entries record the request name as the message and Plugin operation
type; workflow entries record the workflow name as the type, WorkflowActivity
operation type and the workflow's sync/async mode. Directly-invoked workflows
(ExecuteWorkflowRequest, which has no plugin context) are executed but not logged.
Co-Authored-By: Claude <noreply@anthropic.com> via Conducktor <conducktor@contextand.com>
* Address Copilot PR feedback on trace-log capture
- PluginTraceRecorder: fall back to the TargetInvocationException itself when
it has no inner exception, so ExceptionDispatchInfo.Capture is never handed
null (which would mask the original failure).
- TracingService: expose Messages as a read-only wrapper so callers cannot cast
it back to List<string> and mutate recorded trace output.
- XrmMockupBase: return Array.Empty<string>() rather than allocating a new list
on every TraceLog access when a custom tracing factory is configured.
Co-Authored-By: Claude <noreply@anthropic.com> via Conducktor <conducktor@contextand.com>
---------
Co-authored-by: Claude <noreply@anthropic.com> via Conducktor <conducktor@contextand.com>
0 commit comments