自动解析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, 
12);
        
        connection.Close();
    }
 
}
posted @ 2008-03-16 20:33  MicrosoftCRM  阅读(500)  评论(0)    收藏  举报