Having up to date contact information for employees is essential for any large company. Apple has focused on Microsoft's Active Directory and their own Open Directory as a solution for this, but, in our case, these were not options. We also wanted to have more control over how the information was presented with custom labels and to show relationships between employees like having an attorney's secretary listed on their card. To bridge this gap, I created ABSync - essentially a one way sync client.
The first challenge was to clean up our LDAP server and bring it into compliance with Apple's LDAP schema. Our employee list had been designed to be accessed via a browser on our intranet. This meant a lot of the information was spread out in different databases with different owners, and the data was accessed directly thru cgis. We had a LDAP server as a part of our email server, but it had never been utilized for much more than holding email addresses. Once we loaded the Apple LDAP schema, we were able to begin populating it with data from all those different sources, including phone numbers, addresses, map information, photos, dates, and relationships.
All names and personal info in the above images have been changed to protect the innocent
The second challenge was to bring that information into Address Book. In our environment, we needed a way to let people sync this information when they are working on our internal network. It had to be relatively quick and work in the background and be pretty much bullet proof as losing contact information to an attorney is a serious offense. Sync Services is a framework that lets you build a sync client and handles a lot of the heavy lifting normally associated with syncing data. You register for various types of sync data, including contact information, and when the client connects, the sync server tells the client what kind of sync to perform and handles passing whatever data has changed since the last sync.
ABSync is a command line application that acts as a one way Sync Services client since the source of our data is read only. ABSync talks to our LDAP server to determine what changes have been made on the server and then generates the appropriate sync changes. I had to run the sync as part of a cycle where any changes made to an employees card was first accepted, and then in a follow up sync returned to the state on the LDAP server. It is not exactly what the Sync Services engineers had in mind, but it actually works pretty well.
The result is an Address Book with an "Office List" group that always contains a list of our active employees. If you make any changes to the data we control (i.e. modifies or deletes of the group, group membership, or information on an employee's card) it is automatically reverted. Any additional information you add like notes is not affected.