コード例 #1
0
        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("Ошибка! У этого контакта уже есть основное средство связи этого типа.");
                }
            }
        }
コード例 #2
0
        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("Возникла ошибка, см. журнал для подробностей.");
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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("Основное средство связи с заданным типом уже существует для связанного контакта.");
            }
        }