Summary:

The Windows 8 Sales Tracker may be unable to synchronise with a copy of Sage CRM integrated with Sage 300 ERP.

Symptoms:

The synchronisation process may fail at 29% on the initial synch. The Sales Tracker will display the following error message in the interface:

Sage CRM Sales Tracker - An error has occurred. Please contact your System Administrator.

After attempting to log in using the application, a large number of HTTP 400 statuses will be seen in the localhost_access_log in \CRM\tomcat\logs.

The presence of the issue can be returned by sending a HTTP request using Fiddler. The request for a hostname called CRM-SERVER and a CRM instance of CRM72 is as follows:

GET http://CRM-SERVER/sdata/crm72j/sagecrm/-/channel?startindex=1&count=1 HTTP/1.1
Authorization: Basic YWRtaW46cGFzcw==
Host: CRM-SERVER

The Authorization header contains a Base64-encoded username and password; in the above it's admin:pass.

The response should be something like this:

HTTP/1.1 200 OK
Content-Type: application/xml;charset=UTF-8
Server: Microsoft-IIS/7.5
X-Rewritten-By: ManagedFusion (rewriter; reverse-proxy; +http://managedfusion.com/)
X-ManagedFusion-Rewriter-Version: 3.5
Set-Cookie: JSESSIONID=CEB71E38FB44243A144E388294BF9213; Path=/crm72j/; HttpOnly
X-Powered-By: ASP.NET
Date: Wed, 18 Jun 2014 09:04:14 GMT
Content-Length: 2469

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><feed xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:http="http://schemas.sage.com/sdata/http/2008/1" xmlns:sdata="http://schemas.sage.com/sdata/2008/1" xmlns:sle="http://www.microsoft.com/schemas/rss/core/2005" xmlns="http://www.w3.org/2005/Atom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><title>Sage CRM | channel</title><id>http://sage013963/sdata/crm72j/sagecrm/-/channel</id><updated>2014-06-18T10:04:14.636+01:00</updated><authors><name>Sage CRM</name></authors><link rel="self" type="application/atom+xml; type=feed" title="Refresh Page" href="http://sage013963/sdata/crm72j/sagecrm/-/channel?startindex=1&amp;count=1"/><link rel="first" type="application/atom+xml; type=feed" title="First Page" href="http://sage013963/sdata/crm72j/sagecrm/-/channel?startindex=1&amp;count=1"/><link rel="last" type="application/atom+xml; type=feed" title="Last Page" href="http://sage013963/sdata/crm72j/sagecrm/-/channel?startindex=5&amp;count=1"/><link rel="previous" type="application/atom+xml; type=feed" title="Previous Page" href="http://sage013963/sdata/crm72j/sagecrm/-/channel?startindex=0&amp;count=1"/><link rel="next" type="application/atom+xml; type=feed" title="Next Page" href="http://sage013963/sdata/crm72j/sagecrm/-/channel?startindex=2&amp;count=1"/><opensearch:totalResults>5</opensearch:totalResults><opensearch:startIndex>1</opensearch:startIndex><opensearch:itemsPerPage>1</opensearch:itemsPerPage><entry><id>http://sage013963/sdata/crm72j/sagecrm/-/channel('1')</id><title>channel 1</title><updated>2014-06-18T10:04:14.636+01:00</updated><link rel="self" type="application/atom+xml; type=entry" title="Refresh" href="http://sage013963/sdata/crm72j/sagecrm/-/channel('1')"/><link rel="http://schemas.sage.com/sdata/link-relations/schema" type="application/xml" title="Schema" href="http://sage013963/sdata/crm72j/sagecrm/-/channel/$schema"/><category scheme="http://schemas.sage.com/sdata/categories" term="resource" label="Resource"/><sdata:payload><channel xmlns="http://www.w3.org/2005/Atom" sdata:key="1">
<chan_createddate xsi:null="true"/>
<chan_owner xsi:null="true"/>
<chan_updatedby xsi:null="true"/>
<chan_createdby xsi:null="true"/>
<chan_updateddate>2013-07-23T11:15:00+0100</chan_updateddate>
<chan_description>Direct Sales</chan_description>
<chan_rule xsi:null="true"/>
<chan_channelid>1</chan_channelid>
</channel>
</sdata:payload></entry></feed>

If the request fails, you will get a HTTP 400 (Bad Request) and a stack trace returned from the CRMJ webapp:

HTTP/1.1 400 Bad Request
Content-Type: application/xml;charset=UTF-8
Server: Microsoft-IIS/7.5
X-Rewritten-By: ManagedFusion (rewriter; reverse-proxy; +http://managedfusion.com/)
X-ManagedFusion-Rewriter-Version: 3.5
Set-Cookie: JSESSIONID=5B6E97C1EF9CA94F862E4979401FADE2; Path=/crmj/; HttpOnly
X-Powered-By: ASP.NET
Date: Wed, 18 Jun 2014 09:12:00 GMT
Content-Length: 12391

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><sdata:diagnosis xmlns:sdata="http://schemas.sage.com/sdata/2008/1"><sdata:applicationCode> </sdata:applicationCode><sdata:payloadPath> </sdata:payloadPath><sdata:severity>Fatal</sdata:severity><sdata:stackTrace>java.lang.NullPointerException&#xD;
 at com.sage.crm.sdata.classes.SDataUrlBuilder.&lt;init&gt;(SDataUrlBuilder.java:50)&#xD;
 at com.sage.crm.sdata.endpoint.SDataEndpoint.handleMessage(SDataEndpoint.java:99)&#xD;
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xD;
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)&#xD;
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)&#xD;
 at java.lang.reflect.Method.invoke(Unknown Source)&#xD;
 at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:69)&#xD;
 at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:84)&#xD;
 at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57)&#xD;
 at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)&#xD;
 at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:102)&#xD;
 at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:126)&#xD;
 at org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:225)&#xD;
 at org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:125)&#xD;
 at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:73)&#xD;
 at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:64)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:97)&#xD;
 at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:114)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:101)&#xD;
 at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61)&#xD;
 at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157)&#xD;
 at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:128)&#xD;
 at org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288)&#xD;
 at org.springframework.integration.core.MessagingTemplate.send(MessagingTemplate.java:149)&#xD;
 at org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:128)&#xD;
 at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:114)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:101)&#xD;
 at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61)&#xD;
 at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157)&#xD;
 at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:128)&#xD;
 at org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288)&#xD;
 at org.springframework.integration.core.MessagingTemplate.send(MessagingTemplate.java:149)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.sendMessage(AbstractReplyProducingMessageHandler.java:175)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.sendReplyMessage(AbstractReplyProducingMessageHandler.java:159)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.produceReply(AbstractReplyProducingMessageHandler.java:124)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleResult(AbstractReplyProducingMessageHandler.java:118)&#xD;
 at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:100)&#xD;
 at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:114)&#xD;
 at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:101)&#xD;
 at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61)&#xD;
 at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157)&#xD;
 at org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288)&#xD;
 at org.springframework.integration.core.MessagingTemplate.doSendAndReceive(MessagingTemplate.java:318)&#xD;
 at org.springframework.integration.core.MessagingTemplate.sendAndReceive(MessagingTemplate.java:239)&#xD;
 at org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:233)&#xD;
 at org.springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessage(MessagingGatewaySupport.java:207)&#xD;
 at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.doHandleRequest(HttpRequestHandlingEndpointSupport.java:378)&#xD;
 at org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:95)&#xD;
 at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)&#xD;
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)&#xD;
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)&#xD;
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)&#xD;
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)&#xD;
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)&#xD;
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)&#xD;
 at com.sage.crm.web.filters.ClearCurrentThreadLocalsFilter.doFilter(ClearCurrentThreadLocalsFilter.java:45)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)&#xD;
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)&#xD;
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at com.sage.crm.core.security.SIDAuthenticationFilter.doFilter(SIDAuthenticationFilter.java:90)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)&#xD;
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)&#xD;
 at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)&#xD;
 at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)&#xD;
 at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)&#xD;
 at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)&#xD;
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)&#xD;
 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)&#xD;
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)&#xD;
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)&#xD;
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)&#xD;
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)&#xD;
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)&#xD;
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)&#xD;
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)&#xD;
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)&#xD;
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)&#xD;
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)&#xD;
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)&#xD;
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)&#xD;
 at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1812)&#xD;
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)&#xD;
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)&#xD;
 at java.lang.Thread.run(Unknown Source)&#xD;
</sdata:stackTrace><sdata:sdataCode> </sdata:sdataCode></sdata:diagnosis>

Status:

No workaround is available for integrated systems. The issue has been fixed in the Sage CRM 7.2e patch.