在本地调试 Dynamics365 代码 activity

Debugging a Dynamics365 code activity locally

我有一个 Dynamics365(在云中)设置,我的任务是调试它的一些怀疑无法正常工作的自定义工作流活动。 作为一名长期的桌面开发人员,整个云设置使得进行任何体面的调试变得非常棘手......

所以我的代码活动都是这样的:

public class MyCustomActivity : CodeActivity
{
    public IOrganizationService OrganizationService { get; private set; }
    public IExecutionContext ExecutionContext { get; private set; }
    public CodeActivityContext ActivityContext { get; private set; }
    public ITracingService TracingService { get; private set; }

    // Bunch of input parameters
    [Input("param1")]
    public InArgument<string> Param1 { get; set; }

    [Input("param2")]
    public InArgument<string> Param2 { get; set; }

    // possibly output parameters
    
    // main method with all the logic
    protected override void Execute(CodeActivityContext context)
    {
        var serviceFactory = context.GetExtension<IOrganizationServiceFactory>();

        this.ActivityContext = context;
        this.ExecutionContext = context.GetExtension<IExecutionContext>();
        this.OrganizationService = serviceFactory.CreateOrganizationService(ExecutionContext.UserId);
        this.TracingService = context.GetExtension<ITracingService>();

        // actual core of the code activity
    }
}

非常基本,我相信 运行 动态代码的普通代码 activity。

我想知道是否有一种方法(无需移动天堂和地狱)来创建一个 自定义(不是真正的“伪造”)CodeActivityContext 这样我基本上可以编写一个小的“测试应用程序”来创建这样一个上下文,实例化代码 activity,然后 运行 它的 Execute 方法?这将允许我实际 运行 并调试测试应用程序,并通过它查看发生了什么(以及可能出了什么问题)。

我知道 Jordi Montana 的 Fake Xrm Easy 包,并在我的集成测试中使用了它(一段很棒的代码!) - 但我认为在这种情况下它对我来说并不适用,因为我需要“真实的东西” - 我需要有一个工作 IOrganisationService 主要是 运行 代码 activity 的代码,看看它在 Dynamics 平台上做了什么......

有什么想法吗?以前有没有其他人尝试过做这样的事情??

我通过将 plug-in/activity 逻辑 与 plug-in/activity 管道分离来实现这一点。 逻辑存在于它自己的 class 并从 Execute 方法调用。从上下文和输入中传递您在逻辑中需要的东西,例如组织服务、输入等。 Execute 方法通常只有一行代码调用这些逻辑方法。

现在在您的本地控制台测试应用程序中,只需引用那些逻辑方法 - 它们只需要基本的东西,例如 org 服务和一些参数,而不是整个上下文。以这种方式构建您的代码还可以让您轻松地在 plugins/activities 之间共享逻辑,因为 plugins/activities 实际上只是围绕您的主要逻辑的包装器。