在本地调试 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 实际上只是围绕您的主要逻辑的包装器。
我有一个 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 实际上只是围绕您的主要逻辑的包装器。