Fake Xrm Easy:如何在 orgService.Create() 上模拟插件的行为?

Posted

技术标签:

【中文标题】Fake Xrm Easy:如何在 orgService.Create() 上模拟插件的行为?【英文标题】:Fake Xrm Easy: How to emulate a plugin's behaviour on orgService.Create()? 【发布时间】:2021-12-29 02:07:16 【问题描述】:

Microsoft Dynamics CRM 2015。

我测试了 Asp.Net Core 控制器的操作。当我创建新的Lead 记录时,一些插件会为lead.new_master_id 字段生成新的Guid(它的类型是string)。因此,在创建后我检索记录以获取它生成的new_master_id 值。如何通过Fake Xrm Easy 模拟此插件行为?

var fakedContext = new XrmFakedContext();
fakedContext.ProxyTypesAssembly = typeof(Lead).Assembly;
var entities = new Entity[]

  // is empty array
;

fakedContext.Initialize(entities);
var orgService = fakedContext.GetOrganizationService();

var lead = new Lead  FirstName = "James", LastName = "Bond" ;
var leadId = orgService.Create(lead);

var masterId = orgService.Retrieve(Lead.EntityLogicalName, leadId, 
    new Microsoft.Xrm.Sdk.Query.ColumnSet(Lead.Fields.new_master_id))
    .ToEntity<Lead>().new_master_id;

【问题讨论】:

【参考方案1】:

在 FakeXrmEasy v1.x 中,您需要启用 PipelineSimulation 并通过注册步骤手动注册您希望在 Create 上触发的插件步骤。

fakedContext.UsePipelineSimulation = true;

启用后,您需要通过调用 RegisterPluginStep 启用必要的步骤。在您的示例中,您至少需要注册以下内容:

fakedContext.RegisterPluginStep<LeadPlugin>("Create", ProcessingStepStage.Preoperation);

LeadPlugin 是生成 new_master_id 属性的插件的名称。

请记住,v1.x 仅限于支持基本 CRUD 请求的管道模拟

更高版本(2.x 和/或 3.x)带有全新的中间件实现,允许为任何消息注册插件步骤。很快我们将实现根据实际环境和/或自定义属性自动注册插件步骤

这是一个使用新中间件的示例

public class FakeXrmEasyTestsBase

    protected readonly IXrmFakedContext _context;
    protected readonly IOrganizationServiceAsync2 _service;

    public FakeXrmEasyTestsBase() 
    
    _context = MiddlewareBuilder
                    .New()

                    .AddCrud()
                    .AddFakeMessageExecutors()
                    .AddPipelineSimulation()

                    .UsePipelineSimulation()
                    .UseCrud()
                    .UseMessages()

                    .Build();

    _service = _context.GetAsyncOrganizationService2();

您可以在QuickStart guide here找到更多信息

免责声明:我是 FakeXrmEasy 的作者 :)

【讨论】:

以上是关于Fake Xrm Easy:如何在 orgService.Create() 上模拟插件的行为?的主要内容,如果未能解决你的问题,请参考以下文章

NSSCTF逆向2023题目《doublegame》《fake_game》《easy_pyc》《For Aiur》

Client API Object Model - Xrm object(3.4)

无法访问 Microsoft.Xrm 命名空间

Django 迁移:如何只允许在 --fake 模式下运行?

同步时间

使用 --fake 后如何在 django 1.8 上重做迁移