You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fake Xrm Easy如何在orgService.Create时模拟Dynamics CRM 2015插件行为

解决方案

你可以通过两种方式在Fake Xrm Easy中模拟该插件自动生成new_master_id的行为:


方式1:使用消息拦截回调(最简实现)

直接在Create消息执行后插入自定义逻辑,模拟插件填充字段的效果,修改后的测试代码如下:

var fakedContext = new XrmFakedContext();
fakedContext.ProxyTypesAssembly = typeof(Lead).Assembly;
var entities = new Entity[]
{
  // 预置数据为空
};

fakedContext.Initialize(entities);

// 注册Create消息的后处理回调,模拟插件逻辑
fakedContext.OnCreateMessageExecuting += (entity) =>
{
    if (entity.LogicalName == Lead.EntityLogicalName)
    {
        // 模拟插件生成Guid赋值给new_master_id
        entity["new_master_id"] = Guid.NewGuid().ToString();
    }
};

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;

这种方式不需要额外定义插件类,适合快速测试单一场景。


方式2:注册模拟插件类(贴近真实场景)

如果你的测试需要和真实插件注册逻辑对齐,可以先定义一个模拟插件类,再注册到Fake上下文中:

  1. 先定义模拟插件:
public class GenerateMasterIdPlugin : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Lead lead)
        {
            lead.new_master_id = Guid.NewGuid().ToString();
        }
    }
}
  1. 修改测试代码注册插件:
var fakedContext = new XrmFakedContext();
fakedContext.ProxyTypesAssembly = typeof(Lead).Assembly;
var entities = new Entity[]
{
  // 预置数据为空
};

fakedContext.Initialize(entities);

// 注册模拟插件:对应Create消息、PostOperation阶段、Lead实体
fakedContext.RegisterPlugin<GenerateMasterIdPlugin>(messageName: "Create", 
    entityLogicalName: Lead.EntityLogicalName, stage: 40);

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;

这种方式更贴近真实CRM的插件运行逻辑,适合需要模拟完整插件生命周期的测试场景。


内容的提问来源于stack exchange,提问作者Andrey Bushman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:15:02