protected override List <string> DB_SearchContacts(string searchText) { ContactEqualityComparer equality = new ContactEqualityComparer(); List <string> contacts = new List <string>(); //contacts = mailBoxManager.SearchCRMContacts(TenantId, Username, searchText); contacts = contacts.Concat(mailBoxManager.SearchTeamLabContacts(TenantId, searchText)).Distinct(equality).ToList(); //contacts = contacts.Concat(mailBoxManager.SearchMailContacts(TenantId, Username, searchText)).Distinct(equality).ToList(); return(contacts); }
public IEnumerable<string> GetContacts(string term) { if (string.IsNullOrEmpty(term)) throw new ArgumentException(@"term parameter empty.", "term"); var equality = new ContactEqualityComparer(); var contacts = MailBoxManager.SearchMailContacts(TenantId, Username, term).Distinct(equality).ToList(); if (WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(), SecurityContext.CurrentAccount.ID)) contacts = contacts.Concat(MailBoxManager.SearchCrmContacts(TenantId, Username, term)).Distinct(equality).ToList(); if (WebItemSecurity.IsAvailableForUser(WebItemManager.PeopleProductID.ToString(), SecurityContext.CurrentAccount.ID)) contacts = contacts.Concat(MailBoxManager.SearchTeamLabContacts(TenantId, term)).Distinct(equality).ToList(); return contacts; }
public IEnumerable <string> GetContacts(string term) { if (string.IsNullOrEmpty(term)) { throw new ArgumentException("term parameter empty.", "term"); } var equality = new ContactEqualityComparer(); var contacts = MailBoxManager.SearchMailContacts(TenantId, Username, term).Distinct(equality).ToList(); if (WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(), SecurityContext.CurrentAccount.ID)) { contacts = contacts.Concat(MailBoxManager.SearchCRMContacts(TenantId, Username, term)).Distinct(equality).ToList(); } if (WebItemSecurity.IsAvailableForUser(WebItemManager.PeopleProductID.ToString(), SecurityContext.CurrentAccount.ID)) { contacts = contacts.Concat(MailBoxManager.SearchTeamLabContacts(TenantId, term)).Distinct(equality).ToList(); } return(contacts); }
/// <summary> /// Search emails in Accounts, Mail, CRM, Peaople Contact System /// </summary> /// <param name="tenant">Tenant id</param> /// <param name="userName">User id</param> /// <param name="term">Search word</param> /// <param name="maxCountPerSystem">limit result per Contact System</param> /// <param name="timeout">Timeout in milliseconds</param> /// <param name="httpContextScheme"></param> /// <returns></returns> public List <string> SearchEmails(int tenant, string userName, string term, int maxCountPerSystem, string httpContextScheme, int timeout = -1) { var equality = new ContactEqualityComparer(); var contacts = new List <string>(); var userGuid = new Guid(userName); var watch = new Stopwatch(); watch.Start(); var apiHelper = new ApiHelper(httpContextScheme); var taskList = new List <Task <List <string> > >() { Task.Run(() => { CoreContext.TenantManager.SetCurrentTenant(tenant); SecurityContext.AuthenticateMe(userGuid); var engine = new EngineFactory(tenant, userName); var exp = new FullFilterContactsExp(tenant, userName, term, infoType: ContactInfoType.Email, orderAsc: true, limit: maxCountPerSystem); var contactCards = engine.ContactEngine.GetContactCards(exp); return((from contactCard in contactCards from contactItem in contactCard.ContactItems select string.IsNullOrEmpty(contactCard.ContactInfo.ContactName) ? contactItem.Data : MailUtil.CreateFullEmail(contactCard.ContactInfo.ContactName, contactItem.Data)) .ToList()); }), Task.Run(() => { CoreContext.TenantManager.SetCurrentTenant(tenant); SecurityContext.AuthenticateMe(userGuid); var engine = new EngineFactory(tenant, userGuid.ToString()); return(engine.AccountEngine.SearchAccountEmails(term)); }), Task.Run(() => { CoreContext.TenantManager.SetCurrentTenant(tenant); SecurityContext.AuthenticateMe(userGuid); return(WebItemSecurity.IsAvailableForMe(WebItemManager.CRMProductID) ? apiHelper.SearchCrmEmails(term, maxCountPerSystem) : new List <string>()); }), Task.Run(() => { CoreContext.TenantManager.SetCurrentTenant(tenant); SecurityContext.AuthenticateMe(userGuid); return(WebItemSecurity.IsAvailableForMe(WebItemManager.PeopleProductID) ? apiHelper.SearchPeopleEmails(term, 0, maxCountPerSystem) : new List <string>()); }) }; try { var taskArray = taskList.ToArray <Task>(); Task.WaitAll(taskArray, timeout); watch.Stop(); } catch (AggregateException e) { watch.Stop(); var errorText = new StringBuilder("SearchEmails: \nThe following exceptions have been thrown by WaitAll():"); foreach (var t in e.InnerExceptions) { errorText .AppendFormat("\n-------------------------------------------------\n{0}", t); } Log.Error(errorText.ToString()); } contacts = taskList.Aggregate(contacts, (current, task) => !task.IsFaulted && task.IsCompleted && !task.IsCanceled ? current.Concat(task.Result).ToList() : current) .Distinct(equality) .ToList(); Log.DebugFormat("SearchEmails (term = '{0}'): {1} sec / {2} items", term, watch.Elapsed.TotalSeconds, contacts.Count); return(contacts); }
protected override List<string> DB_SearchContacts(string searchText) { ContactEqualityComparer equality = new ContactEqualityComparer(); List<string> contacts = new List<string>(); //contacts = mailBoxManager.SearchCRMContacts(TenantId, Username, searchText); contacts = contacts.Concat(mailBoxManager.SearchTeamLabContacts(TenantId, searchText)).Distinct(equality).ToList(); //contacts = contacts.Concat(mailBoxManager.SearchMailContacts(TenantId, Username, searchText)).Distinct(equality).ToList(); return contacts; }