The SalesLogix mobile client utilizes the SData feed to perform data retrievals, inserts and updates from the mobile device to the SalesLogix database. The SData portal utilizes the underlying SalesLogix entity model as its object representation of the SalesLogix system. Because of this the underlying rules of the NHibernate mappings of the entity model can influence the behavior of the mobile client. One such instance of this shows itself when some tickets in the system do not have contact records defined for them.
This is especially likely in upgraded LAN systems because in the LAN client there is no requirement to enforce that a ticket have a contact. If you insert a ticket in the web client interface the system now forces you to define a contact for the ticket. This change in data requirements may seem trivial but can have a big impact when deploying the mobile client. This is because the underlying entity mappings of the entity model the SData portal relies on assumes an inner join from ticket to contact. If you have tickets in your database without contacts, the entity model mappings fail and therefor the SData portal retrieval of tickets fails too. This results in the mobile client being unable to show any tickets in the mobile client.
The simple solution for this is to ensure all tickets in the database have a contact defined. The following SQL script will add the primary contact of the ticket’s account to the ticket, or if no primary contact is defined, then the first contact created for the account. Be aware this SQL script is not SalesLogix OLE DB provider compatible so it needs to be run directly at the database level using the SQL Management Studio.
update sysdba.TICKET set contactid = t.contactid
case when b.contactid is null then c.contactid else b.contactid end as contactid,
sysdba.account a left join
sysdba.contact b on a.accountid=b.accountid and b.isprimary=’T’ left join
(select MIN(contactid) contactid, accountid from sysdba.contact group by accountid) c on a.accountid=c.accountid) as t
where sysdba.TICKET.ACCOUNTID = t.ACCOUNTID and ltrim(isnull(sysdba.TICKET.CONTACTID,”))=”