Handling sequences for synchronization rules

The class SequencesFactory offers 2 main methods, available from all Javascript contexts.

Sequences are handled by updatable entries inside the directory, thus getting a new value will increment the attribute that is used as a counter.

Java object is documented there: SequencesFactory

Reading the current value

To read the current sequence value, just call the getCurrentValue(DN, Attribute) method. If an error is encountered, the call will return the -1 value.

Getting the next value

To get the next value, just call the getNextValue(DN, Attribute) method on the sequence.

If an error is encountered, the call will return the -1 value.

But the next call to the same method will return an incremented value because each time the method is called, the directory value will be updated !

Sample

Let just imagine that you need to handle the uidNumber value inside a directory. First create somewhere inside your directory the following entry :

dn: cn=uidNumberSequence,ou=Sequences,ou=HiddenTree,dc=lsc-project,dc=org
cn: uidNumberSequence
objectClass: device
objectClass: top
serialNumber: 1024

Then inside the task settings, inside the propertiesBasedSyncOptions node add the following XML elements to specify to use the previous entry:

        <dataset>
          <name>uidNumber</name>
          <policy>KEEP</policy>
          <defaultValues>
            <string>SequencesFactory.getInstance(ldap.getJndiServices()).
getNextValue("cn=uidNumberSequence,ou=Sequences,ou=HiddenTree,dc=lsc-project,dc=org",
"serialNumber")</string>
          </defaultValues>
        </dataset>

Take care to the following items :

  • always use a KEEP policy, because otherwise the counter will increment each time an object is synchronized even if the object is not updated !
  • you can either specify that the sequence will be looked up inside the source or the destination directory respectively with on the “srcLdap.getJndiServices()” or “ldap.getJndiServices()”