SynchronizeGroups

As described in Groups, it is sometimes necessary for a connector to provide group membership information to a group server.

OmniGroupServer might be configured to store group information from a repository with the following settings:

[MyRepository]
GroupServerJobType=Connector
ConnectorHost=localhost
ConnectorPort=1234
ConnectorTask=MyFetchTask

When OmniGroupServer needs to get the latest group membership information for the “MyRepository” repository, it sends a SynchronizeGroups fetch action to the connector listening at localhost:1234.

Before you implement the SynchronizeGroups action, enable the action by updating the features() function on the connector so that it returns Features::synchronize_groups:

       Features::feature_type MyConnector::features()
       {
           return ... | Features::synchronize_groups;
       }

To implement the SynchronizeGroups fetch action, a connector implementation must override the synchronizeGroups method in ConnectorBase, as illustrated in this sample code:

       void MyConnector::synchronizeGroups(const SynchronizeGroupsTask& task)
       {
           GroupServer gs = task.groupServer();
           gs.addUserMemberOf("Samantha", "Editors");
           gs.addUserMemberOf("George", "Editors");
           gs.addUserMemberOf("Samantha", "Viewers");
           gs.addUserMemberOf("Henry", "Viewers");
           gs.finish();
       }

The SynchronizeGroupsTask passed in to the synchronizeGroups method has a GroupServer member that allows you to send membership information to the Group Server. In this example the user “Samantha” is a member of the “Editors” group and the “Viewers” group, “George” is a member of the “Editors” group only, and “Henry” is a member of the “Viewers” group only. This information completely replaces any information previously present in the group server [MyRepository] repository.

If you want to modify the information that is stored by the group server, use the method setIncrementalMode before making any other commands.

       void MyConnector::synchronizeGroups(const SynchronizeGroupsTask& task)
       {
           GroupServer gs = task.groupServer();
           gs.setIncrementalMode();
           gs.addUserMemberOf("Robert", "Viewers");
           gs.finish();
       }

When the connector has updated the group server with all of the group membership information from the repository, the SynchronizeGroups task is complete.