This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Delegate Employee Responsibilities of Other Users

In our environment we want to grant to members of a certain business role the ability to delegate any employee responsibility belonging to any user.  For example, if Jane is part of the "Help Desk" business role she should be able to  navigate to a delegation overview showing all employee responsibilities and delegate any one of them to whomever she wishes.  So far I have been able to modify the "VI_Delegation" module and "VI_Delegation_Base" component to give an overview showing all of the employee responsibilities, but am not able to delegate ones that do not belong the current user logged in.  This overview also takes more than a few minutes to load even though the load is only about 13,000 employees.  Is there a best approach option in accomplishing this or is this just not feasible?

  • Hi,

    Note that the manager can also delegate responsibilities of his direct reports. I suggest you take a look at how that form makes use of the VI_Delegation_Base component, it should not be too hard to adopt it for your use case.

    HTH

    Hanno

  • Thanks for the response Hanno.

    Yes, I've modified the "VI_Delegation_Base" component to be able to show the needed responsibilities, which in our case is ALL managed employees that are of type "Contractor".  To do this, I've modified the WhereClause condition of the DelegableItem table to do this.

    The query is:

    SqlAnd("Criteria = 'HeadPerson'", "uid_org in ( select uid_person from person where ccc_employeetype = 'Contractor' and IsInActive = 0 )")

    This query produces about 13,000 results.  The problem is that when the delegation page is loads it is taking about 5 minutes or more just to load these 13,000 results.  Is there anything we can do to lessen this load time?

  • Hi,

    The form is designed for a situation where you first select an employee. Here the user would have to go through 13,000 delegable items to find the right ones -- correct?

    Also, make sure that your subquery (person selection filtered by CCC_EmployeeType and IsInActive) does not slow down the entire query.

    And finally, there have been some performance hotfixes that could be applied (28964, 29414), depending on your version. Contact support for more details.

    Hanno

  • Thanks Hanno.  I will look into that.

  • Just a quick update.  I was able to retrieve and install hotfix 28964, but unfortunately it did not do much to speed up the load.  I believe it was made in response to this issue:

    https://support.oneidentity.com/identity-manager/kb/235011/slow-performance-in-the-web-portal-with-delegations-when-more-than-700-possible-delegations-exist

    where delegation number went above 700.  It may have worked well if the number of delegations went slightly above that, but I'm thinking for our case, where the number is above 13,000, it does not wok well at all.

    As for the query, I added some more logic to it to lessen the result load (logic to return only the user's employee responsibilities) and that took almost no time at all to load.  From this I concluded that it isn't how my query is structured that slows down the load, its the number of results returned that solely affects the load time.  In other words, me having the sub-query "select uid_person from person where ccc_employeetype = 'Contractor' and IsInActive = 0" is not what slows down the load.  The new query I used below:

    SqlAnd("Criteria = 'HeadPerson'", "uid_org in ( select uid_person from person where ccc_employeetype = 'Contractor' and IsInActive = 0 )", SqlCompareUid("UID_Person", getUIDPerson()))

    where I added the last part "SqlCompareUid("UID_Person", getUIDPerson())" to return less results, loaded almost instantaneously.

    I am beginning to think that maybe the product just cannot handle a large load of delegable items, which makes sense, because in a typical case a user would not usually have thousands of items to delegate. 

  • In case anyone wants to know, I was able to drastically reduce the load time of the delegation items.  I did not change my query.  All I did was simply change the data source of the "DelegableItem" grid band from "Collection" to "Database (automatic load)".  For some reason this loads much faster.

    Although the load of the items for the overview is much faster, there was yet another load time issue.  After selecting a delegate there is a collection "DelegateItemToPerson" that loads which which contains the items the user can delegate.  These items come from the "DelegableItem" collection.  It updates the "CanOrder" status for each of these items to true.

    I modified the collection to load all the items in the DelegableItem collection minus ones that were already delegated the selected delegate.  Like the DelegableItem collection load, it results to about 13,000 items that need updating (updating the "CanOrder" status to true).   The updating of these results caused much delay, in fact, the update would time out and would not finish.  So to fix this, I reversed the logic.  I filled up the collection with items that the user should not be able to delegate (a much smaller collection), changed the "CanOrder" property to "CanNotOrder" and set that to true instead, and set the "ReadOnlyModifier" to reference this property instead.

    Doing this solved the lag time of updating what items are delegable after choosing a delegate.

    Even with both these issues solved, however, I was still unable to delegate another user's responsibility.  I received the following error when trying to do so:

    It tells you that the object cannot be delegated.  I'm assuming because the user I am logged in as making the delegation is not the owner of the object.

    It looks like delegating someone else's responsibilities is just not possible.

  • In case anyone wants to know, I was able to drastically reduce the load time of the delegation items.  I did not change my query.  All I did was simply change the data source of the "DelegableItem" grid band from "Collection" to "Database (automatic load)".  For some reason this loads much faster.

    Although the load of the items for the overview is much faster, there was yet another load time issue.  After selecting a delegate there is a collection "DelegateItemToPerson" that loads which which contains the items the user can delegate.  These items come from the "DelegableItem" collection.  It updates the "CanOrder" status for each of these items to true.

    I modified the collection to load all the items in the DelegableItem collection minus ones that were already delegated the selected delegate.  Like the DelegableItem collection load, it results to about 13,000 items that need updating (updating the "CanOrder" status to true).   The updating of these results caused much delay, in fact, the update would time out and would not finish.  So to fix this, I reversed the logic.  I filled up the collection with items that the user should not be able to delegate (a much smaller collection), changed the "CanOrder" property to "CanNotOrder" and set that to true instead, and set the "ReadOnlyModifier" to reference this property.

    Doing this solved the lag time of updating what items are delegable after choosing a delegate.

    Even with both these issues solved, however, I was still unable to delegate another user's responsibility.  I received the following error when trying to do so:

    It tells you that the object cannot be delegated.  I'm assuming because the user I am logged in as making the delegation is not the owner of the object.

    It looks like delegating someone else's responsibilities is just not possible.

  • In case anyone wants to know, I was able to drastically reduce the load time of the delegation items.  I did not change my query.  All I did was simply change the data source of the "DelegableItem" grid band from "Collection" to "Database (automatic load)".  For some reason this loads much faster.

    Although the load of the items for the overview is much faster, there was yet another load time issue.  After selecting a delegate there is a collection "DelegateItemToPerson" that loads which which contains the items the user can delegate.  These items come from the "DelegableItem" collection.  It updates the "CanOrder" status for each of these items to true.

    I modified the collection to load all the items in the DelegableItem collection minus ones that were already delegated the selected delegate.  Like the DelegableItem collection load, it results to about 13,000 items that need updating (updating the "CanOrder" status to true).   The updating of these results caused much delay, in fact, the update would time out and would not finish.  So to fix this, I reversed the logic.  I filled up the collection with items that the user should not be able to delegate (a much smaller collection), changed the "CanOrder" property to "CanNotOrder" and set that to true instead, and set the "ReadOnlyModifier" to reference this property instead.

    Doing this solved the lag time of updating what items are delegable after choosing a delegate.

    Even with both these issues solved, however, I was still unable to delegate another user's responsibility.  I received the following error when trying to do so:

    It tells you that the object cannot be delegated.  I'm assuming because the user I am logged in as making the delegation is not the owner of the object.

    It looks like delegating someone else's responsibilities is just not possible.

  • It is possible. The manager can delegate.

    Make sure the field Delegation.UID_PersonSender contains the UID of the person having the permission, not the logged in user.

    Great you were able to reduce the load times.

  • Yes, the manager can delegate.  However, we want someone who is part of a business role, not the manager, to be able to delegate the responsibility.  In our scenario, we want help desk users to be able to go in and delegate any employee responsibility, whether that help desk user is the manager or not.