Skip to content

GetUserViewLogLite API

Returns a paginated read/view log history for a specified user filtered by a date range, along with the total matching record count. This is the paginated version of GetUserViewLog1 — suited for large result sets where you want to retrieve records in pages rather than all at once.

Endpoint

/srv.asmx/GetUserViewLogLite

Methods

  • GET /srv.asmx/GetUserViewLogLite?authenticationTicket=...&userName=...&startdate=...&endDate=...&startingRow=...&rowCount=...
  • POST /srv.asmx/GetUserViewLogLite (form data)
  • SOAP Action: http://tempuri.org/GetUserViewLogLite

Parameters

Parameter Type Required Description
authenticationTicket string Yes Authentication ticket obtained from AuthenticateUser.
userName string Yes Login name of the user whose view log history should be retrieved.
startdate DateTime No Start date for filtering results. Format: yyyy-MM-ddTHH:mm:ss or yyyy-MM-dd. If omitted or null, no lower date boundary is applied.
endDate DateTime No End date for filtering results. Format: yyyy-MM-ddTHH:mm:ss or yyyy-MM-dd. If omitted or null, no upper date boundary is applied.
startingRow int Yes Zero-based row offset for pagination. Pass 0 to start from the first matching record.
rowCount int Yes Maximum number of records to return in this page.

Date Parameter Format

The date parameters accept multiple formats:

  • ISO 8601: 2024-06-15T10:30:00 or 2024-06-15T10:30:00Z (UTC)
  • Date only: 2024-06-15 (assumes 00:00:00 local time)
  • Null/Empty: No filtering on that boundary

If UTC dates are provided (ending with Z), they are automatically converted to local server time for querying.


Response

Success Response

Returns a <response> root element with pagination attributes and an optional <viewlogs> child element containing zero or more <viewlog> entries.

<response success="true"
          recordCount="47"
          startingRow="0"
          rowCount="10">
  <viewlogs>
    <viewlog DocumentId="1523"
             UserId="7"
             UserFullname="John Smith"
             DocumentName="Q1-Report.pdf"
             VersionNumber="2.0.0"
             ViewDate="2024-06-15T10:30:00.000Z"
             DomainName="Finance"
             Path="/Finance/Reports" />
    <viewlog DocumentId="1489"
             UserId="7"
             UserFullname="John Smith"
             DocumentName="Budget-2024.xlsx"
             VersionNumber="1.0.0"
             ViewDate="2024-06-14T14:20:00.000Z"
             DomainName="Finance"
             Path="/Finance/Planning" />
  </viewlogs>
</response>

Root Element Attributes

Attribute Type Description
success string "true" on success, "false" on failure.
recordCount int Total number of matching records across all pages (useful for calculating total page count).
startingRow int The startingRow value from the request (echo).
rowCount int Actual number of <viewlog> records returned in this response (may be less than the requested rowCount on the last page).

Viewlog Element Attributes

Attribute Type Description
DocumentId int Unique identifier of the document that was accessed.
UserId int User ID of the user who accessed the document.
UserFullname string Full name of the user who accessed the document.
DocumentName string Name of the document file (including extension).
VersionNumber string Version number in multi-part format (e.g. "2.0.0" for version 2).
ViewDate string UTC timestamp when the document was accessed, in ISO 8601 format (yyyy-MM-ddTHH:mm:ss.fffZ).
DomainName string Name of the domain/library containing the document.
Path string Full folder path where the document resides (not including the document name).

Error Response

<response success="false" error="User not found." />

Required Permissions

The calling user must be authenticated. Any authenticated user can retrieve view logs for any user — there is no permission check restricting this to administrators or the user themselves.


Example

GET Request

GET /srv.asmx/GetUserViewLogLite
  ?authenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301
  &userName=jsmith
  &startdate=2024-06-01
  &endDate=2024-06-30
  &startingRow=0
  &rowCount=10
HTTP/1.1

POST Request

POST /srv.asmx/GetUserViewLogLite HTTP/1.1
Content-Type: application/x-www-form-urlencoded

authenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301
&userName=jsmith
&startdate=2024-06-01T00:00:00
&endDate=2024-06-30T23:59:59
&startingRow=20
&rowCount=10

SOAP Request

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:tns="http://tempuri.org/">
  <soap:Body>
    <tns:GetUserViewLogLite>
      <tns:authenticationTicket>3f2504e0-4f89-11d3-9a0c-0305e82c3301</tns:authenticationTicket>
      <tns:userName>jsmith</tns:userName>
      <tns:startdate>2024-06-01T00:00:00</tns:startdate>
      <tns:endDate>2024-06-30T23:59:59</tns:endDate>
      <tns:startingRow>0</tns:startingRow>
      <tns:rowCount>10</tns:rowCount>
    </tns:GetUserViewLogLite>
  </soap:Body>
</soap:Envelope>

JavaScript

Every call answers XML with HTTP 200, success or not, so success is the thing to branch on and errorCode is the number to report.

async function call(action, params) {
  const response = await fetch(`/srv.asmx/${action}?${new URLSearchParams(params)}`);
  const root = new DOMParser()
    .parseFromString(await response.text(), 'text/xml')
    .documentElement;

  if (root.getAttribute('success') !== 'true') {
    throw new Error(`${root.getAttribute('errorCode')}: ${root.getAttribute('error')}`);
  }
  return root;
}

The same reading, a page at a time. The root carries recordCount, the total, alongside the startingRow and rowCount that were asked for, so a client knows whether to ask again.

The dates are yyyy-MM-dd. They bind as DateTime, so a value that is not a date is refused with HTTP 400 before the operation runs - not with this API's error document. An empty one binds to its default, which leaves the range open at that end, and a range given backwards is accepted and reports nothing.

let startingRow = 0;
const rowCount = 100;

for (;;) {
  const root = await call('GetUserViewLogLite', {
    authenticationTicket: ticket, userName: 'jsmith',
    startdate: '2026-01-01', endDate: '2026-12-31',
    startingRow, rowCount
  });

  for (const row of root.querySelectorAll('viewlog')) {
    console.log(row.getAttribute('DocumentName'));
  }

  startingRow += rowCount;
  if (startingRow >= Number(root.getAttribute('recordCount'))) break;
}

Note the lower-case d in startdate where endDate has a capital one.

Notes

  • Pagination: Use recordCount in the response together with your requested rowCount to calculate the total number of pages. Increment startingRow by rowCount on each subsequent request to walk through all pages.
  • Empty Page: If recordCount is 0, the <viewlogs> element is omitted from the response entirely.
  • Date Filtering: If both startdate and endDate are omitted or null, all available records for the user are considered (subject to pagination).
  • Inclusive Range: The date range is inclusive on both ends.
  • Time Zone Handling: UTC dates (with Z suffix) are converted to local server time before querying. Date-only values are interpreted as midnight local time.
  • Combined Data Sources: Results are drawn from both the active view log (VIEWLOG table) and the historical read log (HISTORY_READ table).
  • Duplicate Removal: Duplicate entries (same user, document, version, and timestamp) are automatically removed.
  • Version Number Format: The VersionNumber attribute uses multi-part format (major.minor.revision).

Use Cases

  1. Paginated Audit UI: Display a scrollable/paginated table of document access history for a user in a control panel.
  2. Large-Scale Compliance Reports: Retrieve millions of log entries in manageable chunks without timeout risk.
  3. Server-Side Paging: Power data grids with server-side pagination for user activity dashboards.

  • GetUserViewLog - Get complete user view log history without date filtering
  • GetUserViewLog1 - Get user view log filtered by date range (non-paginated)
  • GetDocumentViewLog - Get the view log for a specific document (all users who accessed it)

Error Codes

The errorCode values this operation returns, checked against a running server:

errorCode When
4010 the ticket is expired or unknown
4030 the caller may not read this user’s view log
4041 no user by that name - including one the caller cannot see
Error Description
[900] Authentication failed Invalid or missing authentication ticket.
[901] Session expired or Invalid ticket The ticket has expired or does not exist.
User not found The specified userName does not exist in the system.
SystemError:... An unexpected server-side error occurred.