예제 #1
0
        public void Execute(IPluginExecutionContext context)
        {
            DateTime inicioExecucao = DateTime.Now;

            try
            {
                this.Context = context;
                DomainService.Organizacao = new Organizacao(context.OrganizationName);


                DynamicEntity entity = this.GetDynamicEntity(context);

                PluginHelper.LogEmArquivo(context, "INICIO;", inicioExecucao.ToString(), "");

                // Quem alterou
                DomainService.RepositoryUsuario.Colunas = new string[] { "fullname", "new_grupo_callcenter" };
                Usuario usuario = DomainService.RepositoryUsuario.Retrieve(context.InitiatingUserId);


                LogOcorrencia log = new LogOcorrencia(DomainService.Organizacao);
                log.Nome          = this.NomeDaAcao(context.MessageName);
                log.Alteracoes    = this.MensageDeAlteracoes(entity);
                log.Categoria     = this.GetCategoria(context);
                log.DataAlteracao = DateTime.Now;
                this.RegraEspecificaPorCategoria(ref log);


                // Usuário
                log.UsuarioId         = usuario.Id;
                log.Usuario           = usuario.NomeCompleto;
                log.GrupoProprietario = usuario.GrupoCallCenter;

                if (context.MessageName == MessageName.Create ||
                    context.MessageName == MessageName.Update ||
                    context.MessageName == MessageName.Assign)
                {
                    log.OcorrenciaId = PluginHelper.GetEntityId(context);
                }

                log.Salvar();
                PluginHelper.LogEmArquivo(context, "FIM;", inicioExecucao.ToString(), DateTime.Now.ToString());
            }
            catch (InvalidPluginExecutionException ex) { throw ex; }
            catch (Exception ex)
            {
                LogService.GravaLog(ex, TipoDeLog.PluginIncident, "incident.PostUpdateLog");
                PluginHelper.LogEmArquivo(context, "ERRO;", inicioExecucao.ToString(), DateTime.Now.ToString());
            }
        }
예제 #2
0
        public void Execute(IPluginExecutionContext context)
        {
            try
            {
                DynamicEntity preEntity  = context.PreEntityImages["PreIncidentImage"] as DynamicEntity;
                DynamicEntity postEntity = context.PostEntityImages["PostIncidentImage"] as DynamicEntity;

                if (!preEntity.Properties.Contains("ownerid") && !postEntity.Properties.Contains("ownerid"))
                {
                    return;
                }
                if (((Owner)preEntity.Properties["ownerid"]).Value == ((Owner)postEntity.Properties["ownerid"]).Value)
                {
                    return;
                }


                DomainService.Organizacao = new Organizacao(context.OrganizationName);

                DomainService.RepositoryUsuario.Colunas = new string[] { "fullname", "new_grupo_callcenter" };
                Usuario proprietarioAntigo = DomainService.RepositoryUsuario.Retrieve(((Owner)preEntity.Properties["ownerid"]).Value);
                Usuario proprietarioNovo   = DomainService.RepositoryUsuario.Retrieve(((Owner)postEntity.Properties["ownerid"]).Value);


                var log = new LogOcorrencia();
                log.Nome          = "Atribuir Proprietário";
                log.OcorrenciaId  = PluginHelper.GetEntityId(context);
                log.Categoria     = Domain.Model.Enum.CategoriaLogOcorrencia.PorProprietario;
                log.DataAlteracao = DateTime.Now;

                log.Alteracoes = string.Format("Proprietário Anterior: {0} ({1}) \n Proprietário Novo: {2} (3)",
                                               proprietarioAntigo.NomeCompleto,
                                               proprietarioAntigo.Id,
                                               proprietarioNovo.NomeCompleto,
                                               proprietarioNovo.Id);


                log.Usuario           = proprietarioAntigo.NomeCompleto;
                log.UsuarioId         = proprietarioAntigo.Id;
                log.GrupoProprietario = proprietarioAntigo.GrupoCallCenter;
                log.GrupoDestino      = proprietarioNovo.GrupoCallCenter;

                log.Salvar();
            }
            catch (Exception ex) { LogService.GravaLog(ex, TipoDeLog.PluginIncident, "incident.PostUpdateLogOwner"); }
        }
예제 #3
0
        private void RegraEspecificaPorCategoria(ref LogOcorrencia log)
        {
            switch (log.Categoria)
            {
            case CategoriaLogOcorrencia.PorProprietario:
                SecurityPrincipal proprietarioNovo = ((SecurityPrincipal)this.Context.InputParameters.Properties["Assignee"]);
                DomainService.RepositoryUsuario.Colunas = new string[] { "new_grupo_callcenter" };
                Usuario usuario = DomainService.RepositoryUsuario.Retrieve(proprietarioNovo.PrincipalId);
                log.GrupoDestino = usuario.GrupoCallCenter;
                break;

            case CategoriaLogOcorrencia.PorStatus:
                Status status = (Status)this.PostImage.Properties["statuscode"];
                log.Status = status.name;
                break;
            }
        }
예제 #4
0
        private void CriarLog(Guid usuarioId, DynamicEntity entity, Guid incidentId, string organizacao)
        {
            var _organizacao = new Organizacao(organizacao);

            Ocorrencia incident = new Ocorrencia(_organizacao);

            Usuario usuario = DomainService.RepositoryUsuario.Retrieve(usuarioId);

            incident = DomainService.RepositoryOcorrencia.Retrieve(incidentId);

            var LogOcorrencia = new LogOcorrencia(_organizacao);

            LogOcorrencia.UsuarioId         = usuario.Id;
            LogOcorrencia.Usuario           = string.Format("{0} {1}", usuario.Nome, usuario.Sobrenome);
            LogOcorrencia.Categoria         = CategoriaLogOcorrencia.Diversos;
            LogOcorrencia.Alteracoes        = string.Empty;
            LogOcorrencia.GrupoProprietario = usuario.GrupoCallCenter;
            LogOcorrencia.Nome          = "Ocorrência criada.";
            LogOcorrencia.OcorrenciaId  = incidentId;
            LogOcorrencia.Status        = string.Empty;
            LogOcorrencia.DataAlteracao = DateTime.Now;
            LogOcorrencia.Salvar();
        }
예제 #5
0
        private void ValidarAlteracoes(Guid incidentid, DynamicEntity preEntity, DynamicEntity postEntity, Organizacao organizacao, Usuario usuario)
        {
            var msgValidacao = new string[] { "Alterações: DE --> PARA", "" };

            foreach (Property p in preEntity.Properties)
            {
                var    preItem = preEntity.Properties[p.Name];
                object posItem = null;
                if (!postEntity.Properties.Contains(p.Name))
                {
                    EventLog.WriteEntry("CRM Application PostUpdateLog", "Campo não existe em PostIncidentImage: " + p.Name);
                }
                else
                {
                    posItem = postEntity.Properties[p.Name];

                    switch (preItem.GetType().ToString())
                    {
                    case "System.String":
                    {
                        if (preItem.ToString() != posItem.ToString())
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + preItem.ToString() + " --> " + posItem.ToString();
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.Customer":
                    {
                        var _preitem = preItem as Customer;
                        var _positem = posItem as Customer;

                        if (_preitem.Value != _positem.Value)
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + _preitem.name + " --> " + _positem.name;
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.Picklist":
                    {
                        var _preitem = preItem as Picklist;
                        var _positem = posItem as Picklist;

                        if (_preitem.Value != _positem.Value)
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + _preitem.name + " --> " + _positem.name;
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.CrmDateTime":
                    {
                        if (p.Name != "modifiedon")
                        {
                            var _preitem = preItem as CrmDateTime;
                            var _positem = posItem as CrmDateTime;

                            if (_preitem.Value != _positem.Value)
                            {
                                msgValidacao[1] += "\n " + p.Name + ": " + Convert.ToDateTime(_preitem.Value).ToString() + " --> " + Convert.ToDateTime(_positem.Value).ToString();
                            }
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.Lookup":
                    {
                        var _preitem = preItem as Lookup;
                        var _positem = posItem as Lookup;

                        if (_preitem.Value != _positem.Value)
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + _preitem.name + " --> " + _positem.name;
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.CrmBoolean":
                    {
                        var _preitem = preItem as CrmBoolean;
                        var _positem = posItem as CrmBoolean;

                        if (_preitem.Value != _positem.Value)
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + _preitem.name + " --> " + _positem.name;
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.CrmNumber":
                    {
                        var _preitem = preItem as CrmNumber;
                        var _positem = posItem as CrmNumber;

                        if (_preitem.Value != _positem.Value)
                        {
                            msgValidacao[1] += "\n " + p.Name + ": " + _preitem.Value + " --> " + _positem.Value;
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.Owner":
                    {
                        if (p.Name == "ownerid")
                        {
                            var _preitem = preItem as Owner;
                            var _positem = posItem as Owner;
                            if (_preitem.Value != _positem.Value)
                            {
                                var usuarioDestino = new Usuario(organizacao);
                                usuarioDestino = usuarioDestino.PesquisaPor(_positem.Value);

                                var log = new LogOcorrencia(organizacao);
                                log.Usuario = string.Format("{0} {1}", usuario.Nome, usuario.Sobrenome);

                                log.UsuarioId     = usuario.Id;
                                log.Nome          = "Ocorrencia alterada";
                                log.OcorrenciaId  = incidentid;
                                log.Alteracoes    = "Proprietário Anterior: " + _preitem.name + " \n Proprietário Novo: " + _positem.name;
                                log.Categoria     = Domain.Model.Enum.CategoriaLogOcorrencia.PorProprietario;
                                log.DataAlteracao = DateTime.Now;

                                log.GrupoDestino      = usuarioDestino.GrupoCallCenter;
                                log.GrupoProprietario = usuario.GrupoCallCenter;

                                log.Salvar();
                            }
                        }
                    }
                    break;

                    case "Microsoft.Crm.Sdk.Status":
                    {
                        if (p.Name == "statuscode")
                        {
                            var _preitem = preItem as Status;
                            var _positem = posItem as Status;
                            if (_preitem.Value != _positem.Value)
                            {
                                var log = new LogOcorrencia(organizacao);
                                log.Usuario       = string.Format("{0} {1}", usuario.Nome, usuario.Sobrenome);
                                log.UsuarioId     = usuario.Id;
                                log.Nome          = "Ocorrencia alterada";
                                log.OcorrenciaId  = incidentid;
                                log.Status        = _positem.name;
                                log.Alteracoes    = "Status Anterior: " + _preitem.name + " \n Status Novo: " + _positem.name;
                                log.Categoria     = Domain.Model.Enum.CategoriaLogOcorrencia.PorStatus;
                                log.DataAlteracao = DateTime.Now;

                                log.Salvar();
                            }
                        }
                    }
                    break;
                    }
                }
            }

            if (msgValidacao[1] != string.Empty)
            {
                var log = new LogOcorrencia(organizacao);
                log.Usuario       = string.Format("{0} {1}", usuario.Nome, usuario.Sobrenome);
                log.Nome          = "Ocorrencia alterada";
                log.UsuarioId     = usuario.Id;
                log.OcorrenciaId  = incidentid;
                log.Alteracoes    = msgValidacao[0] + "\n" + msgValidacao[1];
                log.Categoria     = Domain.Model.Enum.CategoriaLogOcorrencia.Diversos;
                log.DataAlteracao = DateTime.Now;
                log.Salvar();
            }
        }