none
Mover arquivos de anexos para uma pasta especifica em outro diretório RRS feed

  • Pergunta

  • Srs bom dia,

    Existe alguma configuração possivel no CRM ou no Banco de dados do CRM para que quando chegue um email em uma ocorrencia por exemplo, ele extraia o anexo e insira em uma pasta com o nome por exemplo da ocorrencia?

    No banco, ficaria por exemplo só o link do arquivo para referencia do mesmo.

    Isso é possivel?

    Obrigado.

    Flávio

    terça-feira, 29 de maio de 2012 13:02

Respostas

  • Flávio para voce testar cria um Console Application. Adicione as referencias das DLLs do CRM que está no SDK e faça uma função para voce conectar ao CRM. Depois voce pode usar a estrutura parecida com o que fiz:

    private void GetFiles()
            {
                serviceLog.WriteEntry("Executando leitura dos anexos dos e-mails.");
                try
                {
                    OrganizationServiceProxy service = Connection.CurrentConnection.GetOrganizationService();
                    QueryExpression queryexpression = new QueryExpression("activitymimeattachment");
                    queryexpression.ColumnSet = new ColumnSet(true);
                    FilterExpression filter = new FilterExpression();
                    ConditionExpression condition = null;
    
                    condition = new ConditionExpression();
                    condition.AttributeName = "mimetype";
                    condition.Operator = ConditionOperator.Equal;
                    condition.Values.Add("application/octet-stream");
                    filter.Conditions.Add(condition);
    
                    condition = new ConditionExpression();
                    condition.AttributeName = "objecttypecode";
                    condition.Operator = ConditionOperator.Equal;
                    condition.Values.Add("email");
                    filter.Conditions.Add(condition);
    
                    queryexpression.Criteria.AddFilter(filter);
    
                    LinkEntity linkEntity = new LinkEntity("activitymimeattachment", "email", "objectid", "activityid", JoinOperator.Inner);
                    linkEntity.LinkCriteria = new FilterExpression();
                    linkEntity.LinkCriteria.FilterOperator = LogicalOperator.And;
                    condition = new ConditionExpression();
                    condition.AttributeName = "statuscode";
                    condition.Operator = ConditionOperator.NotEqual;
                    condition.Values.Add(2);
                    linkEntity.LinkCriteria.Conditions.Add(condition);
    
                    queryexpression.LinkEntities.Add(linkEntity);
    
                    queryexpression.PageInfo = new PagingInfo();
                    queryexpression.PageInfo.Count = 30;  
                    queryexpression.PageInfo.PageNumber = 1;
    
                    EntityCollection ec = service.RetrieveMultiple(queryexpression);
                    
                    foreach (Entity activitymimeattachment in ec.Entities)
                    {
                        Entity activitypointer = service.Retrieve("activitypointer", activitymimeattachment.GetAttributeValue<EntityReference>("activityid").Id, new ColumnSet(true));
                        Entity email = service.Retrieve("email", activitypointer.GetAttributeValue<Guid>("activityid"), new ColumnSet(true));
                        
                        
                            string fullpath = "D:\\Temp\" + activitymimeattachment.GetAttributeValue<string>("filename");
                            using (FileStream fileStream = new FileStream(fullpath, FileMode.OpenOrCreate))
                            {
                                byte[] filebytes = Convert.FromBase64String(activitymimeattachment.GetAttributeValue<string>("body"));
                                fileStream.Write(filebytes, 0, filebytes.Length);
                                serviceLog.WriteEntry("Download do arquivo do e-mail realizado com sucesso. Salvo em " + fullpath.Trim());                            
                            }                        
                        
                    }                
                }
                catch (Exception ex)
                {
                    serviceLog.WriteEntry("Erro ao efetuar download do arquivo do e-mail." + ex.Message, EventLogEntryType.Error);
                }
            }


    Atenciosamente,
    Rodrigo Hentz - MCP.MCPS.MCNPS.MCTS.MBSS.MBSP.MCITP
    Profile
    Blog

    terça-feira, 29 de maio de 2012 16:41
    Moderador

Todas as Respostas

  • Flávio bom dia. Dá para fazer isso sim. No meu caso eu fiz um Windows Service que conecta no CRM através dos Web Services e baixa arquivos de notas fiscais que chegam em uma fila. Acho que poderia seguir a mesma idéia.

    Atenciosamente,
    Rodrigo Hentz - MCP.MCPS.MCNPS.MCTS.MBSS.MBSP.MCITP
    Profile
    Blog

    terça-feira, 29 de maio de 2012 13:55
    Moderador
  • Rodrigo boa tarde,

    E você tem ideia de como faço isso? os arquivos seriam extraidos dos emails? pois nao quero duplicar os arquivos e sim extrair do email e inserir em um diretório.

    Obrigado,

    flávio

    terça-feira, 29 de maio de 2012 16:18
  • Flávio para voce testar cria um Console Application. Adicione as referencias das DLLs do CRM que está no SDK e faça uma função para voce conectar ao CRM. Depois voce pode usar a estrutura parecida com o que fiz:

    private void GetFiles()
            {
                serviceLog.WriteEntry("Executando leitura dos anexos dos e-mails.");
                try
                {
                    OrganizationServiceProxy service = Connection.CurrentConnection.GetOrganizationService();
                    QueryExpression queryexpression = new QueryExpression("activitymimeattachment");
                    queryexpression.ColumnSet = new ColumnSet(true);
                    FilterExpression filter = new FilterExpression();
                    ConditionExpression condition = null;
    
                    condition = new ConditionExpression();
                    condition.AttributeName = "mimetype";
                    condition.Operator = ConditionOperator.Equal;
                    condition.Values.Add("application/octet-stream");
                    filter.Conditions.Add(condition);
    
                    condition = new ConditionExpression();
                    condition.AttributeName = "objecttypecode";
                    condition.Operator = ConditionOperator.Equal;
                    condition.Values.Add("email");
                    filter.Conditions.Add(condition);
    
                    queryexpression.Criteria.AddFilter(filter);
    
                    LinkEntity linkEntity = new LinkEntity("activitymimeattachment", "email", "objectid", "activityid", JoinOperator.Inner);
                    linkEntity.LinkCriteria = new FilterExpression();
                    linkEntity.LinkCriteria.FilterOperator = LogicalOperator.And;
                    condition = new ConditionExpression();
                    condition.AttributeName = "statuscode";
                    condition.Operator = ConditionOperator.NotEqual;
                    condition.Values.Add(2);
                    linkEntity.LinkCriteria.Conditions.Add(condition);
    
                    queryexpression.LinkEntities.Add(linkEntity);
    
                    queryexpression.PageInfo = new PagingInfo();
                    queryexpression.PageInfo.Count = 30;  
                    queryexpression.PageInfo.PageNumber = 1;
    
                    EntityCollection ec = service.RetrieveMultiple(queryexpression);
                    
                    foreach (Entity activitymimeattachment in ec.Entities)
                    {
                        Entity activitypointer = service.Retrieve("activitypointer", activitymimeattachment.GetAttributeValue<EntityReference>("activityid").Id, new ColumnSet(true));
                        Entity email = service.Retrieve("email", activitypointer.GetAttributeValue<Guid>("activityid"), new ColumnSet(true));
                        
                        
                            string fullpath = "D:\\Temp\" + activitymimeattachment.GetAttributeValue<string>("filename");
                            using (FileStream fileStream = new FileStream(fullpath, FileMode.OpenOrCreate))
                            {
                                byte[] filebytes = Convert.FromBase64String(activitymimeattachment.GetAttributeValue<string>("body"));
                                fileStream.Write(filebytes, 0, filebytes.Length);
                                serviceLog.WriteEntry("Download do arquivo do e-mail realizado com sucesso. Salvo em " + fullpath.Trim());                            
                            }                        
                        
                    }                
                }
                catch (Exception ex)
                {
                    serviceLog.WriteEntry("Erro ao efetuar download do arquivo do e-mail." + ex.Message, EventLogEntryType.Error);
                }
            }


    Atenciosamente,
    Rodrigo Hentz - MCP.MCPS.MCNPS.MCTS.MBSS.MBSP.MCITP
    Profile
    Blog

    terça-feira, 29 de maio de 2012 16:41
    Moderador
  • Rodrigo boa noite,

    Estamos testando e assim que tivermos uma posição se funcionou, posto a resposta ok?

    Mais de qualquer forma muito obrigado.

    Flávio Barros

    segunda-feira, 4 de junho de 2012 21:38
  • Flavio,

    Estamos marcando uma resposta em sua thread, devido a sua falta de interação, caso necessite de maiores informações, desmarque e continue a postar sobre sua dúvida.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    segunda-feira, 18 de junho de 2012 12:07
    Moderador