public bool Evaluate(UserConnection userConnection, AdElement element, Entity relatedEntity, Entity handler) { _logger.Info("Добавляем средство связи " + handler.GetTypedColumnValue <string>("NavAdAttributeName")); string adValue = AdAttributesHelper.GetAdValue(element, (NavAdAttributesHandlers)handler); var contact = (Contact)relatedEntity; Guid communicationTypeId = GetCommunicationType(userConnection, handler.GetTypedColumnValue <string>("NavAdAttributeName")); ContactCommunication[] contactCommunications = GetContactCommunications(userConnection, contact, communicationTypeId); if (adValue != null) { char[] separator = Core.Configuration.SysSettings.GetValue(userConnection.AppConnection.SystemUserConnection, "ContactCommunicationSeparator").ToString().ToArray(); var communicationValues = adValue.Split(separator).Select(s => s.Trim()).ToList(); // обрабатываем уже существующие в bpm средства связи foreach (var cm in contactCommunications) { if (!communicationValues.Contains(cm.Number)) { cm.Delete(); } else { communicationValues.Remove(cm.Number); } } // создаем отсутствующие записи foreach (var cv in communicationValues) { var contactCommunication = new ContactCommunication(userConnection); contactCommunication.UseAdminRights = false; contactCommunication.SetDefColumnValues(); contactCommunication.ContactId = contact.Id; contactCommunication.CommunicationTypeId = communicationTypeId; contactCommunication.NavSynchronizedWithLDAP = true; contactCommunication.Number = cv; contactCommunication.Save(false); } } else { foreach (var cm in contactCommunications) { cm.Delete(); } } return(true); }
private ContactCommunication[] GetContactCommunications(UserConnection userConnection, Contact contact, Guid communicationTypeId) { var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "ContactCommunication"); esq.AddAllSchemaColumns(); esq.UseAdminRights = false; esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Contact", contact.Id)); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "CommunicationType", communicationTypeId)); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "NavSynchronizedWithLDAP", true)); var collection = esq.GetEntityCollection(userConnection); ContactCommunication[] contactCommunications = new ContactCommunication[0]; if (collection.Count > 0) { contactCommunications = collection.Select(e => { e.UseAdminRights = false; return((ContactCommunication)e); }).ToArray(); } return(contactCommunications); }
public ContactCommunication(Terrasoft.Configuration.ContactCommunication source) : base(source) { this.CopyEntityLookupProperties(source); }
public ContactCommunication(ContactCommunication source) : base(source) { }