SetHookSeesAllUsers

Description

Specifies whether the current hook sees all users or only the users that the current user is allowed to see.

Allows schema developers to control hook visibility for users on a hook by hook basis. The Set function specifies the visibility for the duration of the currently executing hook only.

Setting the method to True (1) specifies that the current hook sees all users when it executes a query. False (0) means the current hook only sees users the current user is allowed to see (based on the actual user privilege of the user for the session) when it executes a query. For Feature Levels 5 and 6, the default value for these properties is True (1). For Feature Level 7 the default values are False (0).

For example, if the default behavior is for a hook to not see all users then the following line:
  • has no impact
    $session->SetHookSeesAllUsers(0);
  • ensures that the hook sees all users
    $session->SetHookSeesAllUsers(1);

The HOOKS_SEE_ALL_USERS and HOOKS_SEE_ALL_RECORDS master database properties allow schema developers to configure the default visibility for all hooks in their database. For Feature Levels 5 and 6, the default value for these properties is True (1). For Feature Level 7 the default values are False (0). See the CLI reference pages for information on CLI commands.

The following example makes the assigned to user field populate its choice list with a hook that lists only users the in the current user's groups:
sub AssignedTo_ChoiceList {
  my($fieldname) = @_;
  my @choices;
  my $session = $entity->GetSession();
  $session->SetHookSeesAllUsers(0);
  my $queryDefObj = $session->BuildQuery("users");
  $queryDefObj->BuildField("login_name");
  my $resultSetObj = $session->BuildResultSet($queryDefObj);
  $resultSetObj->Execute();

  while ($resultSetObj->MoveNext() == $CQPerlExt::CQ_SUCCESS) {
    push(@choices,$resultSetObj->GetColumnValue(1));
  }
 return @choices;
}
Note: This method became available in version 7.1.

Syntax

VBScript


user_restr = session.SetHookSeesAllUsers set_vis 

Perl


session->SetHookSeesAllUsers(set_vis); 
Identifier
Description
session
The Session object that represents the current database-access session.
set_vis
A Boolean that specifies whether the current hook sees all users or only the users that the current user is allowed to see. True specifies that the current hook sees all users when it executes a user query. False specifies that the current hook can only see users the current user is allowed to see when it executes a user query.
Return value
None

Examples

VBScript

sub project_ChoiceList(fieldname, choices)
  ' fieldname As String
  ' choices As Object
  ' record type name is Defect
  ' field name is project

set session = GetSession
dim curHooksSeesAllUsers

' Store current session "Context"
curHookSeesAllUsers = session.GetHookSeesAllUsers()

' set session context to "User Context"
session.SetHookSeesAllUsers(0)

set querydef = session.BuildQuery("project") 
querydef.BuildField("name") 
set resultset = session.BuildResultSet(querydef)
resultset.Execute 

status =resultset.MoveNext
Do While status = AD_SUCCESS 
   choices.AddItem resultSetObj.GetColumnValue(1) 
Loop 

' revert to original session "Context"
session.SetHookSeesAllUsers( curHookSeesAllUsers )

End Sub

Perl

sub project_ChoiceList 
{
    my($fieldname) = @_;
    my @choices;
    # $fieldname as string scalar
    # @choices as string array
    # record type name is Defect
    # field name is Project

    # start building a query of the users 
    my $session = $entity->GetSession();
    my ($curHooksSeesAllUsers);

# store current "Context"
    $curHooksSeesAllUsers=$session->GetHookSeesAllUsers();

# set to "User Context"
    $session->SetHookSeesAllUsers(0);

    my ($queryDefObj, $resultSetObj);

    $queryDefObj = $session->BuildQuery("Project");

    # have the query return the desired
    # field of the user object(s)
    $queryDefObj->BuildField("Name");
    $resultSetObj = $session->BuildResultSet($queryDefObj);

    # run it
    $resultSetObj->Execute();

    # add each value in the returned column to the choicelist
    while
     ($resultSetObj->MoveNext() == $CQPerlExt::CQ_SUCCESS) {
         push(@choices,$resultSetObj->GetColumnValue(1));
    }

# revert to original session "Context"
    $session->SetHookSeesAllUsers($curHooksSeesAllUsers);

    return @choices;
}