Synchronization of identities has been described above. Another option is to synchronize the tree structure. We'll show sync over an example of organizational structure synchronization:
The roots of the tree are searched over the set of all accounts obtained from the target system. The reason why roots are not found using the search method on the end system is that their definition is in some cases too complex (the search criteria in the IC module are inadequate). Such a case is, for example, a situation where roots are all the elements (accounts) whose parent attribute are shown to themselves.
Root search is performed using the Groovy script in the synchronization configuration tree root / tree definition . This script runs over all system elements. If Boolean.TRUE returns, then the element is root. If it returns Boolean.FALSE , it is not the root. The entry of this script is account (IcObject), an object of the element received from the IC module.
Example of a script addressing the situation described above :
if(account){ // Get value from parent attribute def parentValue = account.getAttributeByName("id_nadraz_prac_mista").getValue(); // Get value from ID attribute def uidValue = account.getAttributeByName("id").getValue(); // Root is account, where is parent value equals with ID (externalId) value. if(parentValue != null && parentValue.equals(uidValue)){ // We need clear value of parent attribute. In IDM has roots always parent = null. account.getAttributeByName("id_nadraz_prac_mista").setValues(null); return Boolean.TRUE; } } return Boolean.FALSE;