Fake Xrm Easy: как имитировать поведение плагина на orgService.Create()?

Microsoft Dynamics CRM 2015.

Тестирую действие контроллера Asp.Net Core. Когда я создаю новый Lead Запишите какой-то плагин, генерирующий новый Guid для lead.new_master_id поле (его тип 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 ответ

В версии 1.x FakeXrmEasy вам нужно включить PipelineSimulation и зарегистрировать шаги плагина, которые вы хотите запускать при создании вручную, зарегистрировав их шаги.

      fakedContext.UsePipelineSimulation = true;

После включения вам нужно будет включить необходимые шаги, вызвав RegisterPluginStep. В вашем примере вам нужно как минимум зарегистрировать что-то вроде:

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

Где LeadPlugin будет именем вашего плагина, который генерирует свойство new_master_id.

Имейте в виду, что версия 1.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();
}

}

Дополнительную информацию о руководстве по быстрому запуску можно найти здесь .

Отказ от ответственности: я автор FakeXrmEasy :)

Другие вопросы по тегам