Table 6923 "Expense User"
ExpenseAgent · Microsoft.ExpenseAgent
Across versions
- BC23-28not present
- BC29present
- BC30changed
Neighbourhood 30 connected objects and pages
ExpenseAgent · Microsoft.ExpenseAgent · BC29-30 · source at ea08af5e · facts from BC29
Learn documents this table through its pages: Page 6949 “Expense User” (1 Learn page), Page 6951 “Expense Users” (1).
Properties
| Property | Value |
|---|---|
| Caption | Expense User |
| Access | Internal |
| DataClassification | CustomerContent |
| LookupPageId | Expense Users |
| DrillDownPageId | Expense User |
Fields
Explanation: the field’s ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.
| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 1 | No. | Code[20] | Specifies the number for this expense user. via Page 6949 “Expense User” | |
| 2 | Employee No. | Code[20] | Specifies the value of the Employee No. field. via Page 6949 “Expense User” | TableRelation Employee.“No.” |
| 3 | Name | Text[100] | Specifies the expense user name. via Page 6949 “Expense User” | DataClassification EndUserIdentifiableInformation |
| 4 | Text[80] | Specifies the expense user’s email address. via Page 6949 “Expense User” | DataClassification EndUserIdentifiableInformation | |
| 5 | Job Title | Text[30] | Specifies the expense user’s job title. via Page 6949 “Expense User” | DataClassification EndUserIdentifiableInformation |
| 9 | Expense Team Code | Code[20] | Specifies the expense team code the expense user belongs to. via Page 6949 “Expense User” | TableRelation Table 6931 “Expense Team” (“Expense Team”.“Code”) |
| 10 | Team Manager | Boolean | Specifies the team manager for this expense user. via Page 6949 “Expense User” | |
| 15 | Entra Id | Guid | Specifies the Entra Id of the agent. | DataClassification SystemMetadata |
| 20 | Can Approve | Boolean | Specifies whether the employee can approve expense. | |
| 30 | Is a System User | Boolean | Is a user in Business Central caption | FlowField: exist(User where(“Authentication Email” = field(“E-mail”))); not editable |
| 40 | Resource No. | Code[20] | Specifies the resource linked to the employee. | FlowField: lookup(Employee.“Resource No.” where(“No.” = field(“Employee No.”))) |
| 21 | User Id For Approvals | Code[50] | Specifies the user ID used for approvals. | TableRelation Table 91 “User Setup” (“User Setup”.“User ID”) |
| 22 | Employee Status | Enum “Employee Status” | Specifies the employment status of the related employee. | FlowField: lookup(Employee.Status where(“No.” = field(“Employee No.”))); enum Enum 5200 “Employee Status”; not editable |
| 23 | Approver No. | Code[20] | Specifies the number of the expense user who can approve for this user. | FlowField: lookup(“Expense Approval Setup”.“Approver No.” where(“Expense User No.” = field(“No.”))); not editable |
| 24 | Approver Name | Text[100] | Specifies the name of the expense user who can approve for this user. | FlowField: lookup(“Expense User”.Name where(“No.” = field(“Approver No.”))); not editable |
| 53 | No. Series | Code[20] | — | TableRelation No. Series; not editable |
| 54 | Welcome Email Sent | Boolean | — | obsolete Pending 29.0; #if not CLEANSCHEMA29; not editable |
| 55 | Welcome Email Sent At | DateTime | — | not editable |
| 56 | Welcome Email Status | Option | Specifies whether a welcome email has been queued, sent, or failed for the expense user. via Page 6949 “Expense User” | OptionCaption: ‘None,Queued,In Outbox,Sent,Failed’, Comment = ‘None = not sent, Queued = waiting for the agent to send, In Outbox = handed to the service and waiting to be delivered, Sent = successfully sent, Failed = send failed’; not editable |
| 57 | Welcome Correlation Id | Guid | Specifies the identifier used to correlate the welcome email with its delivery from the outbox. | not editable |
| 60 | Approval Limit (LCY) | Integer | Specifies the maximum expense report amount this user can approve. Leave empty when Unlimited Approval is selected. | |
| 61 | Unlimited Approval | Boolean | Specifies that this user can approve expense reports without a maximum amount. |
Keys
- PK: No. (clustered)
- WelcomeCorrelationKey: Welcome Correlation Id
Procedures
SetSkipOverwriteFromEmployee(NewSkipOverwriteFromEmployee: Boolean)(internal): Suppresses the overwrite confirmation when validating Employee No. and keeps existing Name and E-mail values on the Expense User instead of copying from the Employee. Resets each time the record is read or initialized.ConfirmApproverReassignment(): Boolean(internal): Reassigns or removes approver references before the user’s approval role is removed (via delete or by clearing “Can Approve”). Errors if the user is the default approver, otherwise confirms with the user and reassigns to the default approver, or removes the approver when no default is configured. Mu…GetExpenseUserNoBySystemId(ExpenseUserSystemId: Guid): Code[20](internal)GetSystemIdByExpenseUserNo(ExpenseUserNo: Code[20]): Guid(internal)GetExpenseUserNoByCurrentUser(): Code[20](internal)AssistEdit(): Boolean(internal)UpdateApprovalUserId()(internal)CreateEmployeeFromExpenseUser()(internal)CreateEmployeesFromExpenseUsers(var ExpenseUser: Record "Expense User")(internal)CreateEmployeeFromExpenseUserWithTemplate(EmployeeTempl: Record "Employee Templ."; TemplateSelected: Boolean)(internal)CreateEmployee(EmployeeTempl: Record "Employee Templ."; TemplateSelected: Boolean): Code[20](internal)SendWelcomeEmail(var ExpenseUser: Record "Expense User")(internal)SetWelcomeEmailHandoffResult(Success: Boolean; CorrelationId: Guid)(internal): Records the outcome of a welcome-email hop-1 handoff (BC -> Expense Agent service) on the current expense user. On success the email is not yet delivered, so the status becomes In Outbox and the correlation id is stored so the dispatcher can map the eventual outbox delivery back to this user. The di…SetWelcomeEmailDelivered(Delivered: Boolean)(internal): Records the final welcome-email delivery result on the current expense user, based on the outbox row’s delivery status (hop-2). Sets the sent timestamp when delivered.ApplyWelcomeDeliveryResult(CorrelationId: Guid; Delivered: Boolean)(internal): Applies an outbox delivery result (hop-2) to any expense user that is waiting In Outbox for the given correlation id. Called by the dispatcher when an outbox welcome email reaches a terminal delivery state.
Plus 13 local procedures.
Triggers
OnDelete, OnInsert
Relations
- drill-down page Page 6949 “Expense User”
- lookup page Page 6951 “Expense Users”
- Employee Status: CalcFormula Table 5200 “Employee”
- Approver Name: CalcFormula Table 6923 “Expense User”
- Expense Team Code: TableRelation Table 6931 “Expense Team”
- Approver No.: CalcFormula Table 6932 “Expense Approval Setup”
- User Id For Approvals: TableRelation Table 91 “User Setup”
Referenced by
32 fields in 17 objects relate to this table (TableRelation or CalcFormula).
- Table 6906 “Expense Report Header”: Approved/Rejected Exp.UserName, Final Approver Name, Interim Approver Name, Approved/Rejected Exp.User No., Approver Expense User No., Expense User No., Final Approver No., Interim Approver No., Pending Approval By, Submitter Expense User No.
- Table 6932 “Expense Approval Setup”: Approver Name, Expense User Name, Approver No., Expense User No.
- Table 6915 “Posted Expense Report Header”: Approver Expense User No., Expense User No.
- Table 6930 “Expense Agent Setup”: Default Approver Name, Default Approver No.
- Table extension 6908 “Expense Spend Request”: Requested For Name, Requested For
- Table 6900 “Expense”: Expense User No.
- Table 6907 “Expense Report Line”: Expense User No.
- Table 6912 “Expense Ledger Entry”: Expense User No.
- Table 6916 “Posted Expense Report Line”: Expense User No.
- Table 6923 “Expense User”: Approver Name
- Table 6931 “Expense Team”: Number Of Team Members
- Table 6938 “Traveler”: Expense User No.
- Table 6951 “EA KPI Entry”: Expense User Name
- Table 6968 “Expense Agent Consumption”: Expense User No.
- Table 6969 “Expense Agent Env. Consumption”: Expense User No.
- Table 7100 “Expense Activity Log Entry”: Actor Record System ID
- Table extension 6976 “Gen. Journal Line”: Expense User No.
Pages and codeunits on this table
- Page 6918 “Expense Users API” (source table)
- Page 6949 “Expense User” (source table)
- Page 6951 “Expense Users” (source table)
- Page 6968 “Expense User Cons. API” (source table)
- Page 6969 “Approver View API” (source table)
Calls
From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an Object::"Name" argument. Interface dispatch and calls through events are not counted, so the list is not complete.
- Codeunit 1387 “Employee Templ. Mgt.” (8 calls:
CreateEmployee → ApplyEmployeeTemplate,CreateEmployee → InitEmployeeNo,CreateEmployeeFromTemplate → IsEnabled, …) - Codeunit 6905 “Import Expense User” (2 calls:
CreateEmployeeFromExpenseUser → GetEmployeeNoFromEmail,CreateEmployeeFromExpenseUserWithTemplate → GetEmployeeNoFromEmail) - Page 456 “No. Series” (2 calls:
AssistEdit → (object),OnInsert → (object)) - Codeunit 27 “Confirm Management” (1 call:
ConfirmOverwriteExpenseUserInformation → GetResponseOrDefault)
Recent changes
- 2026-09-28 #11639 [Master] - Slice 640938: [Expense Agent][VENDOR] Adding approval limits (November ’26) (main, BC30, feature)
- 2026-09-23 #11712 [Master] - Bug 624708: [Expense Management] Users sync - There should be a configuration wizard to ask if the Employees should be created behind if no match is found (main, BC30, fix)
- 2026-09-17 #11333 Align travel request APIs with employee travelers and expense report lifecycle (main, BC30, feature)
- 2026-08-27 #10675 Temporarily suppress AS0072 (ObsoleteTag 29.0) on 10 Base App elements for v30 prep (main, BC30, fix)
- 2026-08-04 #9859 [Master] - Move Expense Agent (Preview) app into BCApps (main, BC30, feature, added)
Deprecations
- field Welcome Email Sent: Pending 29.0 (#if not CLEANSCHEMA29), “Replaced by Welcome Email Status, which also tracks queued and failed sends.”
Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).
Ask your agent
Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "table", object_name: "Expense User"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.