Business - CRM
Customização Microsoft CRM – Programando Email Anexos À Atividades
Microsoft CRM está agora em cena e está aumentando sua fatia no mercado, graças aos músculos Microsoft Business Solutions e sua estratégia de marketing.
por Boris MakushkinMicrosoft CRM SDK C# Development
Microsoft CRM está agora em cena e está aumentando sua fatia no mercado, graças aos músculos Microsoft Business Solutions e sua estratégia de marketing. Ele está fortemente integrado com outros produtos Microsoft Business Solutions tais como Microsoft Great Plain, Solomon, Navision. Sendo relativamente barato em comparação aos concorrentes, como Siebel, Oracle – Microsoft CRM lhe abre as portas para operações aumatizadas em todo o mundo. Neste pequeno artigo gostaríamos de dar a você, desenvolvedor de software, algumas dicas the customização em Microsoft CRM.
O tópico de hoje é Atividade de tipo de programação de email – geralmente estas customizações são lidadas quando o conector Microsoft Exchange é melhorado. Como criar email attachment – este e o principal topico de discussão. Usaremos C#.Net.
Em Exchange handler/ event sink você cria Atividade de um tipo de email MS CRM e uma das tarefas é transferir o(s) anexo(s) na Atividade. É possível percebê-lo através do direto acesso a Microsoft CRM DB. Veremos o código C##:
- Primeiramente deve-se acessar a carta via ExOLEDB:
CDO.Message iMessage = new CDO.MessageClass();
CDO.IBodyPart iPrt;
iMessage.DataSource.Open(bstrURLItem, null, ADODB.ConnectModeEnum.adModeRead,
ADODB.RecordCreateOptionsEnum.adFailIfNotExists, ADODB.RecordOpenOptionsEnum.adOpenSource, "", "");
- Depois – iremos através da lista de anexos, pegar seus nomes e salvar-los em catálogo temporário:
for(int i = 1; i <= aNum; i++) {
string fName = iMessage.Attachments[i].FileName;
string eName = fName.Substring(fName.Length-3, 3).ToUpper();
log.Debug("Attachment: " + fName);
iPrt = iMessage.Attachments[i];
string attName = Path.GetTempPath() + fName;
iPrt.SaveToFile(attName);
attachments.Add(Guid.NewGuid(), attName);
iPrt = null;
}
- Seguindo circulamos através do cache, contendo informações de anexos e os adicionamos à Atividade criada:
if (attachments != null) {
ICollection keys = attachments.Keys;
int attCounter = 0;
foreach (Guid o in keys) {
string attName = (string)(attachments[o]);
crmConnector.AddAttachmentToActivity(emailId, attName, (new FileInfo(attName)).Length, attCounter);
File.Delete(attName);
attCounter++;
}
}
- Abaixo está o método de adicionar anexos à Atividades:
public Guid AddAttachmentToActivity(Guid emailId, string filename, long filesize, int attachmentNumber) {
try {
log.Debug("Prepare for Mail Activity Attachment Creating");
// BizUser proxy object
Microsoft.Crm.Platform.Proxy.BizUser bizUser = new Microsoft.Crm.Platform.Proxy.BizUser();
ICredentials credentials = new NetworkCredential(sysUserId, sysPassword, sysDomain);
bizUser.Url = crmDir + "BizUser.srf";
bizUser.Credentials = credentials;
Microsoft.Crm.Platform.Proxy.CUserAuth userAuth = bizUser.WhoAmI();
// CRMActivityAttachment proxy object
Microsoft.Crm.Platform.Proxy.CRMActivityAttachment activityAttachment = new Microsoft.Crm.Platform.Proxy.CRMActivityAttachment();
activityAttachment.Credentials = credentials;
activityAttachment.Url = crmDir + "CRMActivityAttachment.srf";
// Set up the XML string for the activity attachment
string strXml = "<activitymimeattachment>";
strXml += "<subject>Activity 1</subject>";
strXml += "<attachmentnumber>" + attachmentNumber + "</attachmentnumber>";
strXml += "<activityid>" + emailId.ToString("B") + "</activityid>";
strXml += "</activitymimeattachment>";
// Create the activity attachment
Guid attachmentId = new Guid(activityAttachment.Create(userAuth, strXml));
log.Debug("Create Attachemnt ID: " + attachmentId.ToString("B"));
UploadFileToDB(attachmentId, filename, filesize);
return attachmentId;
}
catch (System.Web.Services.Protocols.SoapException e) {
log.Debug("ErrorMessage: " + e.Message + " " + e.Detail.OuterXml + " Source: " + e.Source);
}
catch (Exception e) {
log.Debug(e.Message + "\r\n" + e.StackTrace);
}
return new Guid();
}
- O principal problema, é de qualquer forma a adição de anexos ao bano de dados MS CRM. A principal exigência é – anexo deve ser de código BASE64 de largura e seu comprimento deve ser corretamente especificado junto com Nine Type e o nome do arquivo, ele sera reconhecido como um anexo em atividade. Olhemos o código C##:
public void UploadFileToDB(Guid attachmentId, string filename, long filesize) {
string contentType = "application/octet-stream";
try {
Hashtable mimes = LoadMimeDB(Environment.SystemDirectory + "/Albaspectrum/ContentType.txt");
if (mimes != null) {
string tmpContentType = GetMimeType(mimes, filename);
if (tmpContentType != null && !tmpContentType.Equals(""))
contentType = tmpContentType;
}
byte[] memoryData = new byte[filesize];
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
reader.Read(memoryData, 0, (int)filesize);
reader.Close();
fs.Close();
OleDbCommand command = conn.CreateCommand();
command.CommandText = "UPDATE ActivityMimeAttachment SET FileSize = (?), MimeType = (?), FileName = (?), Body = (?) WHERE ActivityMimeAttachmentId = (?)";
command.Prepare();
command.Parameters.Add(new OleDbParameter("FileSize", filesize));
command.Parameters.Add(new OleDbParameter("MimeType", contentType));
command.Parameters.Add(new OleDbParameter("FileName", new FileInfo(filename).Name));
command.Parameters.Add(new OleDbParameter("Body", Convert.ToBase64String(memoryData, 0, (int)filesize)));
command.Parameters.Add(new OleDbParameter("ActivityMimeAttachmentId", attachmentId));
log.Debug("Prepare to upload attachemnt " + attachmentId.ToString("B") + " in ActivityMimeAttachment");
command.ExecuteNonQuery();
memoryData = null;
}
catch (Exception e) {
log.Debug(e.Message + "\r\n" + e.StackTrace);
}
}
- O arquivo ContectType.txt é uma lista de combinação dos arquivos extendidos e seus mime-type no seguinte formato:
asc application/pgp-encrypted Armored Encrypted file (PGP)
asd application/astound Autosave file (Word for Windows)
asm PC ASM File
asn application/astound
etc.
- CRM...a difícil tarefa de olhar para dentroCRM
- Trabalhando com Relacionamentos N:N no Microsoft Dynamics CRM 4.0CRM
- Adicionando um novo usuário no Microsoft CRM 3.0CRM
- SAP Business One Integração com Sistema de Gerenciamento de ServiçosCRM
- Microsoft Dynamics: GP, AX, NAV, SL, CRM – fusão ou coexistência?CRM