自动解析E-Mail地址到联系人(part I)
去年在做MSCRM 3.0 项目的时候, 我们面对2个有趣的问题:
第一个问题是:如果有人发一封邮件(senderA@example.com)到MSCRM系统里, 如果系统里没有这个邮件的纪录,那么当你打开邮件的时候,[发送人]一栏就会显示为红色,然后让你手工的把这个邮件地址连接到一个联系人(在我们系统里只连接到联系人)。但是当你连接完毕,下次这个人再用这个地址发邮件的时候,你还要重新连接。每次都这样做会不会很烦?根据微软的KB922116,这个功能就是这样设计的!因为系统不想覆盖你原有的邮件地址。
经过分析,我们决定让系统自动覆盖emailaddress1,也就是说如果我们把这个邮件连接到ContactA,那么ContactA的emailaddress1就会被覆盖成senderA@example.com。而这个地址就会作为ContactA的主要Email地址(我们成为"最近使用邮箱") 。
OK,既然决定了,我们要修改的文件是:\_controls\PartyList\resolve.aspx
idea就是当CRM用户点击[OK]的时候,用JavaScript把这个邮件地址写入到FilteredContact.Emailaddress1 里面,请注意这是unsupported customisation,而且适合于使用在我们的项目里,不一定适合在任何情况下使用。
不要忘记更改connectionString,最后要赋予用户在FilteredContact.Emailaddress1上的UPDATE权限。
/*
* Automatically resolve e-mail sender to selected contact emailaddress1
* Microsoft KB: 922116, http://support.microsoft.com/kb/922116
* \_controls\PartyList\resolve.aspx
**/
function applychanges()
{
//update cotnact emailaddress1
if((document.getElementById("crmExistingLookup").DataValue != null)
&&(document.getElementById("crmExistingLookup").DataValue[0] != null)
&&(document.getElementById("crmExistingLookup").DataValue[0].type == 2))
{
var eml = document.getElementById("txtName").value;
var cid = document.getElementById("crmExistingLookup").DataValue[0].id;
var connection = new ActiveXObject("ADODB.Connection");
var connectionString = "Provider=SQLOLEDB; Server=_db; Database=_mscrm; Integrated Security=SSPI";
connection.Open(connectionString);
var sql = "UPDATE FilteredContact SET emailaddress1='" + eml +"'WHERE contactid = '" + cid + "'" ;
rs = new ActiveXObject("ADODB.Recordset");
rs.Open(sql, connection, 1, 2);
connection.Close();
}
}

浙公网安备 33010602011771号