---
title: ExternalUserServices
summary: API reference for ExternalUserServices.
status: draft
owner: SAIF
last_reviewed: 2026-07-24
library: SAIF.Business
reference_type: package
---

# ExternalUserServices

External-user reporting helpers for last-logon and account-lookup flows. Retrieves external-user last-logon and account activity data for policyholders, agents, and injured-worker user types.

## Purpose
- Retrieves external-user last-logon and account activity data for policyholders, agents, and injured-worker user types.

## Context
- Namespace: `SAIF.Business.Services`
- Assembly/package: `SAIF.Business`

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `GetLastLogonsByCustomer` | `Public Shared Function GetLastLogonsByCustomer(dpi As IDataPortalInfo, customerGroupID As String, extUserTypeCode As String) As List(Of IExternalUserLastLogonInfo)` | Returns last logon info for all customers with a matching customerGroupID/extUserTypeCode. |
| `GetLastLogonByCustomer` | `Public Shared Function GetLastLogonByCustomer(dpi As IDataPortalInfo, customerGroupID As String, extUserTypeCode As String) As IExternalUserLastLogonInfo` | Returns the last logon info for a customer with a matching customerGroupID/extUserTypeCode |
| `HasExternalLogons` | `Public Shared Function HasExternalLogons(dpi As IDataPortalInfo, customerID As String, extUserTypeCode As String) As Boolean` | Returns true if any logons exist for the specified user type code/customer ID |
| `GetUsersByCustomer` | `Public Shared Function GetUsersByCustomer(dpi As IDataPortalInfo, customerID As String, extUserTypeCode As String) As List(Of IExternalUserLastLogonInfo)` | Returns external users and last-logon details for the specified customer ID and external user type code. |
| `GetLastLogonMessageByCustomer` | `Public Shared Function GetLastLogonMessageByCustomer(dpi As IDataPortalInfo, customerGroupID As String, extUserTypeCode As String) As String` | Returns the last logon info for a customer with a matching customerGroupID/extUserTypeCode |

## Behavioral notes
- The service builds Oracle SQL dynamically so it can expand IW requests into multiple external-user type codes.
- Production-mode execution excludes test users by consulting AppGlobal.EnvironmentService.IsProduction.

## Constraints and usage notes
- Callers must provide either a customer-group ID or a customer ID plus an external-user type code.
- The returned URL field depends on legacy clsProperties configuration for Business Online last-login navigation.

## Sources
- `Business\SAIF.Business\Services\ExternalUserServices.vb`
