首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法自动强制插件执行吗?

有办法自动强制插件执行吗?
EN

Stack Overflow用户
提问于 2020-03-11 15:40:37
回答 2查看 260关注 0票数 1

我要插件自动触发。FakeXrmEasy支持这一点吗?我试过以下插件:

代码语言:javascript
复制
    public class Foo : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // never breaks here
        }
    }


    public static EntityMetadata SetObjectTypeCode(EntityMetadata metadata, int value)
    {
        var property = typeof(EntityMetadata).GetProperty(nameof(metadata.ObjectTypeCode));
        property.SetValue(metadata, value);
        return metadata;
    }


    static void Main(string[] args)
    {
        var context = new XrmFakedContext();
        context.InitializeMetadata(SetObjectTypeCode(new EntityMetadata
        {
            LogicalName = "account",
        }, 1));

        context.RegisterPluginStep<Foo>("Create", primaryEntityTypeCode: 1);
        context.GetOrganizationService().Create(new Entity("account", Guid.NewGuid()));
    }

但是插件从来没有被执行过。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-13 13:15:53

这是因为框架内部使用实体的EntityTypeCode字段获取已注册的插件。

这个字段不是Entity基类的一部分,而是存在于crmsvcutil生成的早期绑定类中。

此外,默认情况下,UsePipelineSimulation实例的XrmFakedContext属性为false,因此不会运行插件,因此必须将其设置为true

票数 2
EN

Stack Overflow用户

发布于 2020-03-16 22:27:01

如果有人感兴趣,最后的片段如下所示:

代码语言:javascript
复制
var context = new XrmFakedContext { UsePipelineSimulation = true };
context.RegisterPluginStep<Foo, Account>("Create", ProcessingStepStage.Postoperation);
var organizationService = context.GetOrganizationService();
organizationService.Create(new Account { LogicalName = "account" });

实体元数据(全部)必须如下所示:

代码语言:javascript
复制
[EntityLogicalNameAttribute("account")]
public class Account : Entity
{
    [AttributeLogicalName("name")]
    public string Name { get; set; }

    public int EntityTypeCode;

    public Account()
    {
        this.EntityTypeCode = 1;
    }
}

包括仅系统元数据:

代码语言:javascript
复制
[EntityLogicalName("plugintype")]
public class PluginType : Entity
{
    [AttributeLogicalName("plugintypeid")]
    public Guid PluginTypeId { get; set; }

    [AttributeLogicalName("name")]
    public string Name { get; set; }

    [AttributeLogicalName("typename")]
    public string TypeName { get; set; }

    [AttributeLogicalName("assemblyname")]
    public string AssemblyName { get; set; }

    [AttributeLogicalName("major")]
    public int Major { get; set; }

    [AttributeLogicalName("minor")]
    public int Minor { get; set; }

    [AttributeLogicalName("version")]
    public string Version { get; set; }
}


[EntityLogicalName("sdkmessage")]
public class SdkMessage : Entity
{
    [AttributeLogicalName("sdkmessageid")]
    public Guid SdkMessageId { get; set; }

    [AttributeLogicalName("name")]
    public string Name { get; set; }
}


[EntityLogicalName("sdkmessagefilter")]
public class SdkMessageFilter : Entity
{
    [AttributeLogicalName("sdkmessagefilterid")]
    public Guid SdkMessageFilterId { get; set; }

    [AttributeLogicalName("primaryobjecttypecode")]
    public int PrimaryObjectTypeCode { get; set; }
}


[EntityLogicalName("sdkmessageprocessingstep")]
public class SdkMessageProcessingStep : Entity
{
    [AttributeLogicalName("configuration")]
    public string Configuration { get; set; }

    [AttributeLogicalName("eventhandler")]
    public EntityReference EventHandler { get; set; }

    [AttributeLogicalName("sdkmessageid")]
    public EntityReference SdkMessageId { get; set; }

    [AttributeLogicalName("sdkmessagefilterid")]
    public EntityReference SdkMessageFilterId { get; set; }

    [AttributeLogicalName("filteringattributes")]
    public string FilteringAttributes { get; set; }

    [AttributeLogicalName("mode")]
    public OptionSetValue Mode { get; set; }

    [AttributeLogicalName("stage")]
    public OptionSetValue Stage { get; set; }

    [AttributeLogicalName("rank")]
    public int Rank { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60639679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档