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)