POOM replication on WM5


Posted by: Sue Loh


I just recently learned that EDB, the database engine that is used for most of the POOM (calendar/contacts/etc) data on WM5, does not expose a replication layer to application developers.  The CEDB engine which was previously used for POOM in WM2003 exposed a “bit-based replication” API, including functions like CeGetReplChangeBitsEx.  So any developers who previously built applications and sync solutions based on the old replication API are now missing similar functionality on WM5.


I was working with a customer who was trying to figure out how to get his WM2003 synchronization tool to work on WM5, and we brought his needs to the attention of the POOM team.  I guess they did not previously expect any ISVs to want to plug in to POOM replication.  So hopefully now that they are aware that people are doing this, they can get around to creating a layer for exposing replication functionality.


In the meantime, their suggestion for replicating POOM data on WM5 is to have a process listening for database notifications, storing the change-tracking data itself.  The process would have to be continually running, so as to not miss any changes.  It could essentially build its own “repl change bits” database based on change notifications, from which to do synchronization.  Yet another little project I’d do if I had random time on my hands — or that I can hope the community would build.


Oh one other detail.  I hear that for technical reasons, the “last modified” field in POOM does not get updated on WM5.  So don’t expect that to be a way out.

Comments (6)

  1. gursharan says:

    The requirement is synchronizing live i.e. using some channel like IrDA/Bluetooth( I think this is what PIM did well) or OTA to the exchange server?(reason for incarnation of POOM).

    IF he used the tool which is something like pocketmirror( the legendary PIM synchronizer), then its thinkable, else ……:-?)

  2. Frank says:

    That seems interesting. However, when you receive a notification that a POOM record has changed, how do you know if it was changed by the user or by the synchronization process. In the latter case, you would not want to set a dirty bit. You can tell if the change is a "LOCAL" or "REMOTE" change, but this does not seem to help.

    Thanks,

    Frank

  3. ce_base says:

    Good question, Frank. CEDB was set up so that if you open a database handle and request change notifications, you only get notification of changes that were made using OTHER database handles. In other words, if you make changes using the same handle that you opened to get notifications, you wouldn’t get notifications of those changes.

    However I don’t know if EDB does this.

    Sue

  4. Frank says:

    Something seems missing. If you have a program running all the time to receive POOM notifications, then how do you use that database handle in a DLL that is loaded/unloaded by ActiveSync to make POOM changes during a sync? Can the database handle be shared between two programs?

    Thanks,

    Frank

  5. ce_base says:

    No, handles can’t be shared between programs. If that is how it works then you’d have to have the DLL and the program talk to each other to say which messages came from the sync client. I don’t think there’s any other way around that.

    At this point we’ve really reached the end of the knowledge of anybody on our team. You can also take a look at http://groups.google.com.au/group/microsoft.public.pocketpc.developer/browse_frm/thread/17cc96511aede92b?page=end&hl=en&

    but for any other POOM questions we’re not going to have any more clue than you do.

    Sorry,

    Sue