Often, there is a need for applications that integrate with CRM Platforms to know when objects get modified/created/deleted in the CRM systems. A simple use case is let’s say there is a minor territory re-alignment and the accounts get redistributed. How would the reps in the field know about the new accounts that got added to the their respective territories? From a User Experience standpoint, this should happen without the rep having to take any explicit action on the device, which is pretty challenging.  Of course, we can do a full refresh periodically but that would be dumb and inefficient. 

There are multiple integration patterns that support such use cases in CRMOD. The concept of Modification Tracking is a good mechanism to address such requirements.

In this blog, I thought I’d highlight how we are using Modification Tracking for on the order capture apps we are developing.

1. We had to get the administrator of the POD to enable this feature using the admin settings.

2. Then, we had written a Java wrapper on top of the Modification Tracking WSDL to be able to consume it within our applications.

3. Our Quartz scheduler constantly pools CRMOD for any new records based on a set frequency and if there are new records after the last sync, we get them from the Modification Tracking web service and update a database in our middle tier. The pieces of information we get from the services are

  • What Object got changed.
  • What Time was it created/updated.
  • What Operation got executed on the object.

We get the records from the service and upload a database in the middle tier.

The iOS code on the ipad constantly pools the middle tier with a timestamp and checks for any changes and our server returns a  JSON response like this:

{

 account : {

                          insert : [

                                           {

                                            accountId : “”,

                                            …… All the account related fields

                                         }

                                   ],

                           update : [

                                            {

                                               accountId : “”,

                                              …… All the account related fields

                                           }

                                          ],

                            deleted : [

                            {

                              rowId : “” // Just RowId

                          }

                                        ]

              },

Repeat for Other Objects

Now the client (iPad) has all the information w.r.t to the changes and can create/update/delete local database as needed.

This is just Version 1.  We will continue to enhance the logic in the next version.