public void Execute(IServiceProvider serviceProvider)
        {
            var tracer  = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            var service = factory.CreateOrganizationService(context.UserId);

            try
            {
                var query   = context.InputParameterOrDefault <QueryExpression>("Query");
                var visitor = new RecentItemsQueryVisitor();
                query.Accept(visitor);
                var results = new EntityCollection();
                using (var c = new CrmContext(service))
                {
                    List <Guid> users;
                    if (visitor.ConditionAttribute == RecentItem.UserId)
                    {
                        users = (from u in c.CreateQuery <SystemUser>()
                                 where u.Id == (visitor.ConditionValue != null ? new Guid(visitor.ConditionValue.ToString()) : context.UserId)
                                 where u.IsDisabled == false
                                 select u.Id).ToList();
                    }
                    else
                    {
                        users = (from u in c.CreateQuery <SystemUser>()
                                 where u.IsDisabled == false
                                 select u.Id).ToList();
                    }

                    var recentItems = Helper
                                      .RetrieveRecentItemsForUsers(users, factory, visitor.ConditionAttribute, visitor.ConditionValue, visitor.ConditionType)
                                      .Select(Helper.CreateRecentItem).ToList();
                    results.Entities.AddRange(recentItems);
                }
                context.OutputParameters["BusinessEntityCollection"] = results;
            }
            catch (Exception e)
            {
                throw new InvalidPluginExecutionException(e.Message);
            }
        }