Umbraco MemberService.登录和获取操作期间保存的事件触发器



我正在连接MemberService。保存事件,以便在通过后台或自定义MVC表单更新成员详细信息时使用ElasticSearch触发一些索引。当添加新成员时,我也想这样做。

问题是这个事件似乎被调用了很多次;例如在调用membershihelper时。登录和会员帮助。GetCurrentMemberProfileModel和其他涉及MemberService的操作。不知道为什么Umbraco核心在每次访问成员时都会保存,但这会导致我的索引过程触发比必要的次数更多。

是否有更好的方法拦截成员上的插入/更新并触发我的索引过程?

亲切的问候本

MemberService.SavingMemberService.Saved事件通常在LastLoginDate等内容更新时触发,这就是使用MembershipHelper.Login时发生的情况。

你能做的是检查某些属性,并检查它们是否脏(意味着它们已被更改),然后再继续进行索引过程。

您可以使用IsNewEntity()扩展方法检查传递给Saved事件的成员对象是否为新的,如下所示:http://our.umbraco.org/documentation/Reference/Events-v6/determining-new-entity

如果成员对象不是新的,你可以迭代属性并检查是否只有LastLoginDate是脏的,在这种情况下,你可能不想触发索引器。

下面是一个例子:

public class RegisterEvents : ApplicationEventHandler
{
    protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        MemberService.Saved += MemberService_Saved;
    }
    void MemberService_Saved(IMemberService sender, Core.Events.SaveEventArgs<IMember> e)
    {
        foreach (var member in e.SavedEntities)
        {
            if (member.IsNewEntity())
            {
                //This is a brand new member object
                //Trigger indexing
            }
            else
            {
                var dirtyMember = (ICanBeDirty) member;
                var dirtyProperties = member.Properties.Where(x => x.IsDirty()).ToList();
                if (dirtyMember.IsDirty() || dirtyProperties.Count() > 1)
                {
                    //More then one property or the member object itself is dirty
                    //so we know that its not only LastLoginDate that is changed
                }
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新