Hi All, For one of our process we need to save person's firstname

Hi All,

For one of our process we need to save person's firstname lastname for reporting and record history. These person's details we need get from an LDAP. From the list of persons data user will select a single name and save it in the process variable or CDT field. Here we only need to store person's firstname lastname and this person is not involved in the process hence its just for information.


For above scenario I was thinking to use custom picker component which will be filled up from a source lets call it PersonDataTable. This data source PersonDataTable can be updated by querying LDAP directory after a particular interval using a timer process to keep it in synch with LDAP directory. By doing this we will not query LDAP directory every time so custom picker will be much responsive.

Please let me know if above implementation approach is correct or I should be doing this another way.

OriginalPostID-153082

OriginalPostID-153082

  Discussion posts and replies are publicly visible

  • I think this is a good way. Querying LDAP all the time is slower than database. How many users do you have. If the number is large (>1000) you have to think of how to implement the import. Building a loop in the process is not very speedy.
  • Hi Stefanh,

    There will be more than 1000 records in our case. Also I was thinking how it would be possible to query LDAP and get updated records only rather than scanning a whole LDAP directory structure. I will require to check how to build the timer activity to get updated/new records only from LDAP.
  • You may want to create an employee database table that you update nightly from LDAP. We use Windows Active Directory for normal security/access in our company for most things but we also have access to an HR generated employee table. Unfortunately, this table generally only provides us with current/active employees. This can be problematic if someone leaves the company or is on leave but has references in Appian that require matching their tasks, data records, etc. with their HR info. Once the user drops off our feed you would have orphaned data in Appian.

    Our solution (and one I saw with a non Appian app at a previous employer) was for us to have our own employee table. On a nightly basis we query the HR based table and merge the differences in with our own employee table. New records in HR are inserted, changes in HR are updated in our table. In a not-perfect way, we first set all employee records in our table to terminated, then we insert/update the records with fresh HR data, which effectively makes all active employees active again with current data. When someone leaves the company their data becomes dated in our table but is retain for future use when Appian users need to show names, job titles, etc. for past employees based on their network id. i.e. our employee table will grow over time since we never delete old employees from it, just mark them as inactive and add new employees. Luckily our turnover rate isn't tremendously high...this wouldn't necessarily work well for a million person employer with a high hire/fire/quit rate.
  • Thanks Ryan for the response. Of course the solution you are using is most effective. One problem could be that if a new employee is on boarded he will not be able to work on the system immediately until the overnight job is done with syncing the records in custom employee table in Appian.
  • Agree, and this has been an occasional issue. Though I have found it is rare that a new employee starts and our job hasn't caught up with the data. Usually, an employee starts or we get word through a company wide ticketing system to setup a new employee and it is days or sometimes weeks before all of their information appears in our active directory, HR table feeds, Exchange server accounts, etc. Our nightly job (which could be run more frequently on records updated less than X hours ago) seems to be enough, we just have to speed up the onboarding process through IT, corporate security, etc.