The Sync LDAP User Directory Manager allows one to import user objects from LDAP server on demand into Joget Workflow's built-in user directory manager to reduce its dependency on the LDAP server for improved performance. In this article,  we will learn on how to automatically synchronize LDAP based on a schedule, eliminating the need to perform such action manually.

This guide requires the scheduler plugin in Joget Marketplace to perform functions based on a schedule. One of the features of the scheduler plugin is that it allows bean shell script to be executed at defined durations, in a form of CRON expressions.

First, download and import the plugin appended below, into your Joget installation.

Scheduler v6 plugin

After importing the plugin, add the scheduler userview element into your userview. Then, define the schedule frequency using CRON expression. Then select the bean shell option in "Plugin" and click on the "Configure Plugin" button, copy and paste the following bean shell code below. The code below is intended and must be used for Sync LDAP User Directory Manager (can be used along with Security Enhanced Directory Manager).

Save the record.

import org.joget.directory.model.service.DirectoryManagerProxyImpl;
import org.joget.directory.model.service.DirectoryManager;
import org.joget.apps.app.service.AppUtil;
import org.joget.plugin.ldap.SyncLdapUserDirectoryManagerImpl;
import org.joget.plugin.directory.SecureDirectoryManagerImpl;

DirectoryManagerProxyImpl proxy = (DirectoryManagerProxyImpl) AppUtil.getApplicationContext().getBean("directoryManager");
DirectoryManager dm = proxy.getDirectoryManagerImpl();
if (dm != null) {
    if (dm instanceof SecureDirectoryManagerImpl) {
        dm = ((SecureDirectoryManagerImpl) dm).getEdm(1);
    }
    if (dm instanceof SyncLdapUserDirectoryManagerImpl) {
        int total = ((SyncLdapUserDirectoryManagerImpl) dm).syncUsers();
        System.out.println("Total users : " + total);
    }
}