public void Execute(nav_communication communication) { traceService.Trace("Заход в Execute"); if (communication.nav_main == true) { traceService.Trace("Заход в communication.nav_main == true"); // Define Condition Values var QEnav_communication_nav_main = true; var QEnav_communication_0_nav_contactid = communication.nav_contactid.Id.ToString(); var QEnav_communication_1_nav_type = (int)communication.nav_type; var QEnav_communication = new QueryExpression("nav_communication"); QEnav_communication.TopCount = 50; QEnav_communication.ColumnSet.AddColumns("nav_name"); QEnav_communication.Criteria.AddCondition("nav_main", ConditionOperator.Equal, QEnav_communication_nav_main); var QEnav_communication_Criteria_0 = new FilterExpression(); QEnav_communication.Criteria.AddFilter(QEnav_communication_Criteria_0); QEnav_communication_Criteria_0.AddCondition("nav_contactid", ConditionOperator.Equal, QEnav_communication_0_nav_contactid); var QEnav_communication_Criteria_1 = new FilterExpression(); QEnav_communication.Criteria.AddFilter(QEnav_communication_Criteria_1); QEnav_communication_Criteria_1.AddCondition("nav_type", ConditionOperator.Equal, QEnav_communication_1_nav_type); traceService.Trace("попытка service.RetrieveMultiple(QEnav_communication)"); var result = service.RetrieveMultiple(QEnav_communication); traceService.Trace("выход из service.RetrieveMultiple(QEnav_communication)"); if (result.Entities.Count != 0) { traceService.Trace("result.Entities.Count != 0"); throw new InvalidPluginExecutionException("Ошибка! У этого контакта уже есть основное средство связи этого типа."); } } }
public override void Execute(IServiceProvider serviceProvider) { base.Execute(serviceProvider); try { nav_communication createdCommunication = GetTargetAs <Entity>().ToEntity <nav_communication>(); IOrganizationService currentUserService = CreateService(); NavCommunicationHandler communicationHandler = new NavCommunicationHandler(currentUserService, TraceService); // 5.6 communicationHandler.CheckMultipleMainCommunications(createdCommunication); } catch (EntityHandlerException e) { TraceService.Trace(e.ToString()); throw new InvalidPluginExecutionException(e.Message); } catch (Exception e) { TraceService.Trace(e.ToString()); throw new InvalidPluginExecutionException("Возникла ошибка, см. журнал для подробностей."); } }
private static nav_communication CreateCommunication(nav_communication_nav_type type, string commValue) { nav_communication communication = new nav_communication(); if (type == nav_communication_nav_type.Email) { communication.nav_email = commValue; communication.nav_main = false; } else { communication.nav_phone = commValue; communication.nav_main = true; } return(communication); }
public void CheckMultipleMainCommunications(nav_communication communication) { BaseRepository <nav_communication> communicationRepo = new BaseRepository <nav_communication>(Service, nav_communication.EntityLogicalName); // Checking if all required communication data is present. If not, obtaining it from CRM. if (communication.lys_main == null || communication.lys_type == null || communication.lys_contactid == null) { communication = communicationRepo.Get(communication.Id, new ColumnSet(nav_communication.Fields.lys_main, nav_communication.Fields.lys_type, nav_communication.Fields.lys_contactid)); } TracingService.Trace($"relatedContactId={communication.lys_contactid}, communicationId={communication.Id}, lys_main={communication.lys_main}, lys_type={communication.lys_type}"); // No need to check non-set objects. if (communication.lys_main == null || communication.lys_main == false || communication.lys_type == null || communication.lys_contactid == null) { return; } // Getting all other communications related to our contact with their lys_main=true and the same lys_type. QueryExpression query = new QueryExpression(); query.Criteria.AddCondition(nav_communication.Fields.lys_contactid, ConditionOperator.Equal, communication.lys_contactid.Id); query.Criteria.AddCondition(nav_communication.Fields.lys_type, ConditionOperator.Equal, communication.lys_type.Value); query.Criteria.AddCondition(nav_communication.Fields.lys_main, ConditionOperator.Equal, true); query.Criteria.AddCondition(nav_communication.Fields.nav_communicationId, ConditionOperator.NotEqual, communication.Id); query.ColumnSet = new ColumnSet(false); query.ColumnSet = new ColumnSet(false); EntityCollection ec = communicationRepo.GetMultiple(query); TracingService.Trace($"Retrieved nav_communications. ec={ec}, ec.Entities={ec.Entities}, ec.Entities.Count={ec.Entities.Count}"); if (ec.Entities.Count > 0) { // Another main communication with the same type is already present. throw new EntityHandlerException("Основное средство связи с заданным типом уже существует для связанного контакта."); } }