---
id: change/bcapps/10255
type: change
title: "#10255 Add expense activity history foundation"
summary: Expense activity history foundation adds tracking of lifecycle events for expense reports with an append-only activity log table, read-only APIs scoped by report and user role, factbox UI components, and comprehensive test coverage.
tier: official
language: en
tags:
  - feature
  - main
  - bc30
  - page expense activity log api
  - page expense reports api
  - page expense users api
  - page posted expense reports api
  - codeunit expense activity log mgt.
  - enum expense activity actor role
system: development
review:
  state: reviewed
  by: opus
  at: "2026-10-08T02:08:31.700Z"
  flags: []
generated:
  at: "2026-10-08T01:26:53.141Z"
  pipeline: 0.2.0
  prompts:
    extract-change: 1
  input_hash: 689224e7e1e88b5093e3d9698555d1935013795a
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/pull/10255
    title: "microsoft/BCApps#10255: Add expense activity history foundation"
    date: "2026-08-17"
    commit: 689224e7e1e88b5093e3d9698555d1935013795a
    t: null
    quote: add a single append-only expense activity table whose source reference moves from the active report to the posted report
links:
  learn: []
  objects:
    - object/page/7122
    - object/page/6928
    - object/page/6918
    - object/page/6957
    - object/codeunit/6926
    - object/enum/6924
    - object/enum/6922
    - object/enum/6923
    - object/page/7123
    - object/table/7100
    - object/codeunit/6901
    - object/page/6980
    - object/codeunit/6906
    - object/enum/6984
    - object/codeunit/6987
    - object/page/6910
    - object/page/6998
    - object/table/6906
    - object/table/6915
    - object/permissionset/6953
    - object/permissionset/6952
    - object/permissionset/6904
    - object/permissionset/6907
    - object/codeunit/6950
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes: []
number: 10255
repo: microsoft/BCApps
source_id: bcapps-prs
url: https://github.com/microsoft/BCApps/pull/10255
kind: pr
base_branch: main
major: "30"
merged_at: "2026-08-17T14:32:32Z"
author: t-prda
author_type: User
community_contribution: false
labels:
  - "AL: Apps (W1)"
  - "Team: Integrations"
change_class: code
change_kind: feature
behavior_change: true
breaking: false
files:
  count: 33
  additions: 2546
  deletions: 37
  al: 24
apps:
  - ExpenseAgent
objects_touched:
  - key: page/7122
    page: page/7122
    type: page
    id: 7122
    name: Expense Activity Log API
    app: ExpenseAgent
    status: added
  - key: page/6928
    page: page/6928
    type: page
    id: 6928
    name: Expense Reports API
    app: ExpenseAgent
    status: modified
  - key: page/6918
    page: page/6918
    type: page
    id: 6918
    name: Expense Users API
    app: ExpenseAgent
    status: modified
  - key: page/6957
    page: page/6957
    type: page
    id: 6957
    name: Posted Expense Reports API
    app: ExpenseAgent
    status: modified
  - key: codeunit/6926
    page: codeunit/6926
    type: codeunit
    id: 6926
    name: Expense Activity Log Mgt.
    app: ExpenseAgent
    status: added
  - key: enum/6924
    page: enum/6924
    type: enum
    id: 6924
    name: Expense Activity Actor Role
    app: ExpenseAgent
    status: added
  - key: enum/6922
    page: enum/6922
    type: enum
    id: 6922
    name: Expense Activity Event Type
    app: ExpenseAgent
    status: added
  - key: enum/6923
    page: enum/6923
    type: enum
    id: 6923
    name: Expense Activity Initiator
    app: ExpenseAgent
    status: added
  - key: page/7123
    page: page/7123
    type: page
    id: 7123
    name: Expense Activity Log FactBox
    app: ExpenseAgent
    status: added
  - key: table/7100
    page: table/7100
    type: table
    id: 7100
    name: Expense Activity Log Entry
    app: ExpenseAgent
    status: added
  - key: codeunit/6901
    page: codeunit/6901
    type: codeunit
    id: 6901
    name: Expense Report Approval Mgmt
    app: ExpenseAgent
    status: modified
  - key: page/6980
    page: page/6980
    type: page
    id: 6980
    name: Manager Expense Report
    app: ExpenseAgent
    status: modified
  - key: codeunit/6906
    page: codeunit/6906
    type: codeunit
    id: 6906
    name: Expense Capabilities Provider
    app: ExpenseAgent
    status: modified
  - key: enum/6984
    page: enum/6984
    type: enum
    id: 6984
    name: Expense Capability
    app: ExpenseAgent
    status: modified
  - key: codeunit/6987
    page: codeunit/6987
    type: codeunit
    id: 6987
    name: Expense Report-Post
    app: ExpenseAgent
    status: modified
  - key: page/6910
    page: page/6910
    type: page
    id: 6910
    name: Expense Report
    app: ExpenseAgent
    status: modified
  - key: page/6998
    page: page/6998
    type: page
    id: 6998
    name: Posted Expense Report
    app: ExpenseAgent
    status: modified
  - key: table/6906
    page: table/6906
    type: table
    id: 6906
    name: Expense Report Header
    app: ExpenseAgent
    status: modified
  - key: table/6915
    page: table/6915
    type: table
    id: 6915
    name: Posted Expense Report Header
    app: ExpenseAgent
    status: modified
  - key: permissionset/6953
    page: permissionset/6953
    type: permissionset
    id: 6953
    name: Expense Agent - Data
    app: ExpenseAgent
    status: modified
  - key: permissionset/6952
    page: permissionset/6952
    type: permissionset
    id: 6952
    name: Expense Agent - Objects
    app: ExpenseAgent
    status: modified
  - key: permissionset/6904
    page: permissionset/6904
    type: permissionset
    id: 6904
    name: Expense Management - Objects
    app: ExpenseAgent
    status: modified
  - key: permissionset/6907
    page: permissionset/6907
    type: permissionset
    id: 6907
    name: Expense Mgmt. Read
    app: ExpenseAgent
    status: modified
  - key: codeunit/6950
    page: codeunit/6950
    type: codeunit
    id: 6950
    name: Expense Agent Privacy Subs.
    app: ExpenseAgent
    status: modified
objects_unjoined: []
obsoletions: []
backports: []
fixes_issues: []
work_items:
  - 639704
  - 644172
systems:
  - development
quote: add a single append-only expense activity table whose source reference moves from the active report to the posted report
joined_against:
  major: "30"
  commit: ecbc028c25dbe83b61313bc566e6c1d41184bb1c
---

# #10255 Add expense activity history foundation

> Expense activity history foundation adds tracking of lifecycle events for expense reports with an append-only activity log table, read-only APIs scoped by report and user role, factbox UI components, and comprehensive test coverage.

[Pull request](https://github.com/microsoft/BCApps/pull/10255) · merged into `main` (BC30) on 2026-08-17 by t-prda · 33 files (+2546 -37), 24 AL · feature · tier official · reviewed (checked by Opus)

## What changed

- New append-only activity log table records expense report lifecycle events (Created, Submitted, Approved, Rejected, Posted, etc.)
- Activity log captures actor, role, comments, financial snapshots, categories, and receipt counts for each event
- Read-only APIs expose activity history filtered by report scope or limited to Expense User role with actor role requirements
- Factbox components display activity history in active/posted reports and manager views
- ActivityLog capability registered with comprehensive unit, API, and posting tests
- Behaviour changes for users or extensions.

## AL objects touched

- [Page 7122 "Expense Activity Log API"](../../objects/page/7122.md), ExpenseAgent: added
- [Page 6928 "Expense Reports API"](../../objects/page/6928.md), ExpenseAgent: modified
- [Page 6918 "Expense Users API"](../../objects/page/6918.md), ExpenseAgent: modified
- [Page 6957 "Posted Expense Reports API"](../../objects/page/6957.md), ExpenseAgent: modified
- [Codeunit 6926 "Expense Activity Log Mgt."](../../objects/codeunit/6926.md), ExpenseAgent: added
- [Enum 6924 "Expense Activity Actor Role"](../../objects/enum/6924.md), ExpenseAgent: added
- [Enum 6922 "Expense Activity Event Type"](../../objects/enum/6922.md), ExpenseAgent: added
- [Enum 6923 "Expense Activity Initiator"](../../objects/enum/6923.md), ExpenseAgent: added
- [Page 7123 "Expense Activity Log FactBox"](../../objects/page/7123.md), ExpenseAgent: added
- [Table 7100 "Expense Activity Log Entry"](../../objects/table/7100.md), ExpenseAgent: added
- [Codeunit 6901 "Expense Report Approval Mgmt"](../../objects/codeunit/6901.md), ExpenseAgent: modified
- [Page 6980 "Manager Expense Report"](../../objects/page/6980.md), ExpenseAgent: modified
- [Codeunit 6906 "Expense Capabilities Provider"](../../objects/codeunit/6906.md), ExpenseAgent: modified
- [Enum 6984 "Expense Capability"](../../objects/enum/6984.md), ExpenseAgent: modified
- [Codeunit 6987 "Expense Report-Post"](../../objects/codeunit/6987.md), ExpenseAgent: modified
- [Page 6910 "Expense Report"](../../objects/page/6910.md), ExpenseAgent: modified
- [Page 6998 "Posted Expense Report"](../../objects/page/6998.md), ExpenseAgent: modified
- [Table 6906 "Expense Report Header"](../../objects/table/6906.md), ExpenseAgent: modified
- [Table 6915 "Posted Expense Report Header"](../../objects/table/6915.md), ExpenseAgent: modified
- [Permission set 6953 "Expense Agent - Data"](../../objects/permissionset/6953.md), ExpenseAgent: modified
- [Permission set 6952 "Expense Agent - Objects"](../../objects/permissionset/6952.md), ExpenseAgent: modified
- [Permission set 6904 "Expense Management - Objects"](../../objects/permissionset/6904.md), ExpenseAgent: modified
- [Permission set 6907 "Expense Mgmt. Read"](../../objects/permissionset/6907.md), ExpenseAgent: modified
- [Codeunit 6950 "Expense Agent Privacy Subs."](../../objects/codeunit/6950.md), ExpenseAgent: modified

## Context

- Work items: AB#639704, AB#644172
- Labels: AL: Apps (W1), Team: Integrations
- Systems: development
- From the description: "add a single append-only expense activity table whose source reference moves from the active report to the posted report"

Source: metadata of a merged pull request in microsoft/BCApps (bcapps): title, labels, changed paths and counts, with a summary in our words. No source text and no description beyond one short quote (D10, D61).
