Usuário com melhor resposta
Mover arquivos de anexos para uma pasta especifica em outro diretório

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
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- Sugerido como Resposta Christophe Trevisani Chavey sexta-feira, 8 de junho de 2012 01:52
- Marcado como Resposta Tiago Michelini CardosoMVP, Moderator segunda-feira, 18 de junho de 2012 12:07
Todas as 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- Sugerido como Resposta Christophe Trevisani Chavey sexta-feira, 8 de junho de 2012 01:52
- Marcado como Resposta Tiago Michelini CardosoMVP, Moderator segunda-feira, 18 de junho de 2012 12:07
-
-
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/