none
【请教】CRM 与 MAPPoint 整合 RRS feed

  • 问题

  • 不知道各位有没有做过CRM与MAPPOINT的整合,我在网上找到很多网页,没有太具体的说明。
    我想请教:假设我在 “客户” 里面加一个新的标签 --“地理位置” 然后里面是mappoint,当我输入 客户地址的时候 地图上就会显示 目的地,这样如何实现呢?
    能给个提示吗? 谢谢!
    2009年5月15日 12:37

答案

  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <script type="text/jscript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script>
    
            <script type="text/jscript" language=javascript>
                
                // Create the map
                function GetMap()
                {  
                    // Address1: Street 1
                    var address = "";
                    var addressLine1 = parent.document.forms[0].all.address1_line1.DataValue;
    
                    // Postal Code
                    var postalCode = "";
                    var lookupItem = new Array;
                    lookupItem = parent.document.forms[0].all.address1_postalcode.DataValue;       
                    if (lookupItem && lookupItem[0] != null)
                    {
                        postalCode = lookupItem[0].name ;
                    }
                    
                    // City
                    var city = parent.document.forms[0].all.address1_city.DataValue;
    
                    // Province/State
                    var stateOrProvince = "";
                    var provinceLookup = parent.document.forms[0].all.new_provinceid.DataValue;
                    if (provinceLookup[0] != null) {
                        stateOrProvince = provinceLookup[0].name;
                    }
                    
                    // Country
                    var country = parent.document.forms[0].all.new_countryid.DataValue;
    
                    // Compose customer address
                    if (addressLine1 != null)
                    {
                        address = address + addressLine1.replace(",", "") + ", ";
                    }
    
                    if (postalCode != null)
                    {
                        address = address + postalCode + " ";
                    }
    
                    if (city != null)
                    {
                        address = address + city + " ";
                    } 
    
                    if (stateOrProvince != null)
                    {
                        address = address + stateOrProvince + " ";
                    }
    
                    if (country != null)
                    {
                        address = address + country;
                    }
    
                    var Infotot="";
                    var companyname = parent.document.forms[0].all.name.DataValue;
                    if (companyname != null)
                    {
                        Infotot = companyname;
                    }
    
                    var myp = document.getElementById('pinfotot');
                    if (myp != null)
                    {
                        myp.innerHTML= '<b>' + Infotot + '</b>' + ' ' + address;
                        
                        map = new VEMap('myMap');
                        map.LoadMap(new VELatLong(44.407174685222856, 8.93439531326294), 10 ,'r' ,false);
                        map.Find(null,address,null,null,0,1,true,true,true,true,FindCallBack);
                    }
                }
    
                // Find the address
                function FindCallBack(shapeLayer, results, positions, moreResults, e)
                {
                    if(positions != null && positions.length > 0)
                    {
                        latlong = new VELatLong(positions[0].LatLong.Latitude,positions[0].LatLong.Longitude);
                        customerPushPin = new VEShape(VEShapeType.Pushpin,latlong);
                        
                        var companyname = parent.document.forms[0].all.name.DataValue;
                        if (companyname != null)
                        {
                            customerPushPin.SetTitle(companyname);
                        }
               
                        map.AddShape(customerPushPin);
                        map.SetCenterAndZoom(latlong,12);
                    }
                }
    
            </script>
        </head>
    
        <body onload="GetMap();">
            <p style="padding:0px; margin:0px;	font-size: 11px; font-family:      tahoma;" id="pinfotot"></p>
            <div id='myMap' style="position:relative; width:700px; height:400px; ">Loading map...</div>
        </body>
    </html>
    自己在ISV下面建个名字叫map.html的文件,将那些数据拷贝进去就差不多了。
    • 已标记为答案 DEVSP 2009年5月20日 8:52
    2009年5月18日 2:24

全部回复

  • 貌似我做过,你那个什么,要那些东西?
    你做一个页面放在isv下面,然后在客户的form里面加入iframe的链接就可以了,我把那个文件的内容发给你
    2009年5月18日 2:21
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <script type="text/jscript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script>
    
            <script type="text/jscript" language=javascript>
                
                // Create the map
                function GetMap()
                {  
                    // Address1: Street 1
                    var address = "";
                    var addressLine1 = parent.document.forms[0].all.address1_line1.DataValue;
    
                    // Postal Code
                    var postalCode = "";
                    var lookupItem = new Array;
                    lookupItem = parent.document.forms[0].all.address1_postalcode.DataValue;       
                    if (lookupItem && lookupItem[0] != null)
                    {
                        postalCode = lookupItem[0].name ;
                    }
                    
                    // City
                    var city = parent.document.forms[0].all.address1_city.DataValue;
    
                    // Province/State
                    var stateOrProvince = "";
                    var provinceLookup = parent.document.forms[0].all.new_provinceid.DataValue;
                    if (provinceLookup[0] != null) {
                        stateOrProvince = provinceLookup[0].name;
                    }
                    
                    // Country
                    var country = parent.document.forms[0].all.new_countryid.DataValue;
    
                    // Compose customer address
                    if (addressLine1 != null)
                    {
                        address = address + addressLine1.replace(",", "") + ", ";
                    }
    
                    if (postalCode != null)
                    {
                        address = address + postalCode + " ";
                    }
    
                    if (city != null)
                    {
                        address = address + city + " ";
                    } 
    
                    if (stateOrProvince != null)
                    {
                        address = address + stateOrProvince + " ";
                    }
    
                    if (country != null)
                    {
                        address = address + country;
                    }
    
                    var Infotot="";
                    var companyname = parent.document.forms[0].all.name.DataValue;
                    if (companyname != null)
                    {
                        Infotot = companyname;
                    }
    
                    var myp = document.getElementById('pinfotot');
                    if (myp != null)
                    {
                        myp.innerHTML= '<b>' + Infotot + '</b>' + ' ' + address;
                        
                        map = new VEMap('myMap');
                        map.LoadMap(new VELatLong(44.407174685222856, 8.93439531326294), 10 ,'r' ,false);
                        map.Find(null,address,null,null,0,1,true,true,true,true,FindCallBack);
                    }
                }
    
                // Find the address
                function FindCallBack(shapeLayer, results, positions, moreResults, e)
                {
                    if(positions != null && positions.length > 0)
                    {
                        latlong = new VELatLong(positions[0].LatLong.Latitude,positions[0].LatLong.Longitude);
                        customerPushPin = new VEShape(VEShapeType.Pushpin,latlong);
                        
                        var companyname = parent.document.forms[0].all.name.DataValue;
                        if (companyname != null)
                        {
                            customerPushPin.SetTitle(companyname);
                        }
               
                        map.AddShape(customerPushPin);
                        map.SetCenterAndZoom(latlong,12);
                    }
                }
    
            </script>
        </head>
    
        <body onload="GetMap();">
            <p style="padding:0px; margin:0px;	font-size: 11px; font-family:      tahoma;" id="pinfotot"></p>
            <div id='myMap' style="position:relative; width:700px; height:400px; ">Loading map...</div>
        </body>
    </html>
    自己在ISV下面建个名字叫map.html的文件,将那些数据拷贝进去就差不多了。
    • 已标记为答案 DEVSP 2009年5月20日 8:52
    2009年5月18日 2:24
  • 谢谢刘兄,我赶紧测试一下!
    2009年5月18日 7:14
  • 刘兄,我只要在HTML输入这段代码就可以了吗? 要不要安装mappoint相关的什么的?
    2009年5月18日 13:52
  • 刘兄,为什么我把你给我的代码放在了ISV下面,起名为map.html,然后我就用浏览器打开测试:http://localhost/bvsi/isv/map.html总是打不开,我在2008和2003下面都测试了,相同的报错404 IIS

    HTTP Error 404.0 - Not Found

    The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

    我想知道为什么呢? 我右击文件打开的时候是可以显示的---loading map …… 请问为什么呢? 要设置什么东西吗?

    2009年5月18日 14:57
  •  <script type="text/jscript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script>
    有这句话,不用安装什么东西,呵呵

    兄弟,不要直接打开,你要在客户的form里面嵌入这个页面。我给你的代码,你看看,是需要读取变量的
    例如
    var addressLine1 = parent.document.forms[0].all.address1_line1.DataValue;
    lookupItem = parent.document.forms[0].all.address1_postalcode.DataValue;



    等等
    所以,直接打开肯定不行的。   loading map....那是迷糊人的,说明数据不完整,页面无法定位。
    2009年5月19日 0:57
  • 刘兄,我测试还是失败了,我在ISV下建立的html不知道怎么调用这个页面? 能给点意见不?谢过了
    2009年5月19日 14:31
  • 厄,你在创建一个tab,在tab里面加一个iframe,将iframe的连接写为:/ISV/map.html    就可以了。
    另,在你测试的时候,你需要将我给你的代码修改一些,有些字段是我自定义的,默认没有,你可以将传入的地址定位到其他有的字段上,但要注意一定要有国家,省,市,地址 这些字段,凑上,呵呵
    2009年5月20日 2:06
  • 刘兄,我按照你说的方法改了iframe的链接,现在页面里面显示的是loading map…… 并没有把客户的地址变量传过去,我想用你给的这种方法链接googlemap,因为我不确定Mappoint上的法国地图怎么调用.
    2009年5月20日 8:22
  • 地址传入后,自动定点,才不管你在什么国家,呵呵,识别中文,呵呵,我们这个地图可是全球适用的,日本那屁大点地方都能显示的很仔细。
    2009年5月21日 7:36
  • 刘兄,我试验成功了,不过也发现了不少问题,比如我查找我的家乡的时候就比较不容易,我家乡名字都不对,XUZHOU(SUCHOW)而且输入进CITY里面死活找不到,我单纯查找CHINA它定点在美国的农村,我靠,很让人郁闷!
    2009年5月25日 9:16