Page 6991 "Expense Agent Setup Wizard"
ExpenseAgent · Microsoft.ExpenseAgent
Across versions
- BC23-28not present
- BC29-30present
Neighbourhood 15 connected objects and pages
ExpenseAgent · Microsoft.ExpenseAgent · captioned “Configure Expense Agent” · BC29-30 · source at ea08af5e · facts from BC29
Properties
| Property | Value |
|---|---|
| Caption | Configure Expense Agent |
| Extensible | false |
| SourceTable | Expense Agent Setup |
| PageType | ConfigurationDialog |
| ApplicationArea | Basic, Suite |
Fields on this page
Layout controls in source order, grouped by the container they sit in. Shows: the table field a control is bound to (or its expression as written); ToolTip: the control’s own, else the bound field’s (marked).
| Group | Control | Shows | ToolTip |
|---|---|---|---|
| Content | AgentSetupPart | part Page 4310 “Agent Setup Part” | — |
| Enable access via web | EnableWebAppAccess | true |
Specifies whether registered users can submit and review expenses through the Expense app. |
| ExpenseDashboardLink | ExpenseDashboardLinkTxt |
Opens the Expense app in a new browser tab so registered users can submit and review their expenses. | |
| Enable sending email with receipts | Enable Email with Receipts | Enable Email with Receipts | Specifies whether the agent reads its mailbox and processes incoming emails containing expense receipts. Receipts are only processed when a mailbox is configured. |
| ReceiveMailGroup | Account | Email Address | Specifies the email account that the agent uses for receipts and notifications. You need permission to the mailbox to activate the agent. |
| Users | Submit expenses | Rec.GetRegisteredUsersText() |
Specifies who can submit expenses. Click assist-edit to change who has access. |
| DefaultApprover | Default Approver Name | Specifies the name of the expense user who by default is set as approver. from the table field | |
| Number series | ApplyNoSeries | ApplyNoSeries |
Specifies whether to create the default number series for expenses, expense users, expense reports, and posted expense reports when you save the setup. Once applied, this option is disabled. |
| NoSeriesLink | NoSeriesLinkTxt |
Specifies a link that previews the default number series that will be created. | |
| NoSeriesAppliedLink | NoSeriesAppliedLinkTxt |
Specifies a link that opens the existing expense-related number series. | |
| Payment methods | ApplyPaymentMethods | ApplyPaymentMethods |
Specifies whether to create the default expense payment methods like Card, Cash and Bank when you save the setup. Once applied, this option is disabled. |
| PaymentMethodsLink | PaymentMethodsLinkTxt |
Specifies a link that previews the default expense payment methods that will be created. | |
| PaymentMethodsAppliedLink | PaymentMethodsAppliedLinkTxt |
Specifies a link that opens the existing expense payment methods list. | |
| Expense posting groups | ApplyPostingGroups | ApplyPostingGroups |
Specifies whether to create the default expense posting groups (including the employee posting group) and starter values for mileage and per diem when you save the setup. Once applied, this option is disabled. |
| PostingGroupsLink | PostingGroupsLinkTxt |
Specifies a link that previews the default expense posting groups that will be created. | |
| PostingGroupsAppliedLink | PostingGroupsAppliedLinkTxt |
Specifies a link that opens the existing expense posting groups list. | |
| Include expense categories | Include default expense categories and subcategories | IncludeExpCategories |
Specifies whether to create the default expense categories and subcategories when you save the setup. Categories require expense posting groups. Once applied, this option is disabled. |
| CategoriesLink | CategoriesLinkTxt |
Specifies a link that previews the default expense categories and subcategories that will be created along with existing ones. | |
| CategoriesAppliedLink | CategoriesAppliedLinkTxt |
Specifies a link that opens the existing expense categories list. | |
| Expense locations | ApplyExpLocations | ApplyExpLocations |
Specifies whether to create the default expense locations when you save the setup. Once applied, this option is disabled. |
| LocationsLink | LocationsLinkTxt |
Specifies a link that previews the default expense locations that will be created. | |
| LocationsAppliedLink | LocationsAppliedLinkTxt |
Specifies a link that opens the existing expense locations list. | |
| Include management rules | Include default management rules | IncludeManagementRules |
Specifies whether to create the default management rules when you save the setup. Management rules require expense locations. Once applied, this option is disabled. |
| RulesLink | RulesLinkTxt |
Specifies a link that previews the default management rules and their conditions that will be created along with existing ones. | |
| RulesAppliedLink | RulesAppliedLinkTxt |
Specifies a link that opens the existing expense management rules list. | |
| Enforce management rules | Use Rules | Use Rules | Specifies whether configured expense management rules are applied when expenses are processed. |
| DetectOutdatedExpenseSection | Allowed max. age (days) | Do Not Allow Exp. Older Than | Specifies a date formula; expenses older than the resulting date are not allowed. |
| When age exceeded | If Exp. Is Older Than Allowed | Specifies how the system handles expenses older than the allowed date: warn, require justification, or block submission. | |
| Display anti-corruption attestation | Enable Anti-Corp. Statement | Enable Anti-Corp. Statement | Specifies whether users must confirm an anti-corruption attestation before submitting expenses. |
| Expense reporting | Require receipt number | Receipt No. Mandatory | Specifies whether a receipt number is mandatory for expenses. |
| Require merchant name | Merchant Name Mandatory | Specifies whether a merchant name is mandatory for expenses. | |
| Evaluate compliance with AI | Evaluate Policies | Evaluate Policies | Specifies whether the agent evaluates expenses against the configured policies. Rules are evaluated by code, while policies are evaluated by AI, so enabling this consumes additional AI credits. |
| ExpensePoliciesLink | ExpensePoliciesLinkTxt |
Specifies a link that opens the expense policies. | |
| Enable pre-submission evaluation | Submitter-run Evaluation | Submitter-run Evaluation | Specifies whether submitters can run an AI evaluation to check expense reports for compliance before submitting them. |
| Communication | Enable Communication | Enable Communication | Specifies whether the agent sends outgoing emails to users: welcome emails, reimbursement notifications, approval updates, and unsubmitted-report reminders. Turn this off to stop all outgoing emails. |
| Send mail | Account | Noreply Email Address | Specifies the email account used for all outgoing Expense Agent messages: welcome emails to new expense users, pending-approval requests sent to approvers, approved/rejected notifications sent to submitters, reimbursement notifications, and the optional open report reminders. This account is require… |
| Notify users about unsubmitted reports | Enable Open Report Notif. | Enable Open Report Notif. | Specifies whether the system sends periodic notifications for open expense reports. Notifications are only sent when an email account is configured. |
| Frequency | Open Report Notif. Freq. | Specifies how often the system should send notifications for open expense reports. | |
| Day of week | Notif. Day of Week | Specifies the day of the week for weekly open report notifications. from the table field | |
| Day of month | Notif. Day In A Month | Specifies the day of the month for monthly open report notifications. from the table field | |
| Custom formula | Custom Notif. Formula | Specifies a date formula for the next reminder date, based on the last reminder run, such as 1D (one day), 1W (one week), or 1M (one month). A result on or before the last run date is moved to the following day. | |
| Notify users about approval updates | Enable Approval Notif. | Enable Approval Notif. | Specifies whether the system sends email notifications when expense reports are submitted, approved, or rejected. |
| Mileage expenses | Rate per unit | Standard Rate of Mileage | Specifies the reimbursement amount per unit of distance used to calculate mileage expenses. |
| Default unit of distance | Default Mileage UOM | Specifies the default unit of measure used when recording mileage, such as miles or kilometers. | |
| Only Shortest Route | Only Shortest Route | Specifies whether only the shortest route is shown for mileage expenses. When enabled, alternative routes are not displayed on the map and only the shortest route is used for distance calculation. from the table field | |
| MileageRateSetupLink | MileageRateSetupLinkTxt |
Specifies where to configure mileage rates by vehicle type. | |
| Project tracking | Enable Project Fields | Enable Project Fields | Specifies whether project and project task fields are visible in the expense web app for submitters. from the table field |
| Project Visibility | Project Visibility | Specifies which projects are visible to submitters: only projects assigned to the user, or all active projects. from the table field | |
| Per diem expenses | Per diem calculation | Full Per-Diem Calculation | Specifies the rule used to calculate full per diem, for example by calendar day or by hours. |
| Minimum hours | Minimum Hours for Per Diem | Specifies the minimum number of hours required to qualify for per diem. | |
| Partial day | Rule | PartialDayRuleSummary |
Specifies how per diem for partial days is determined. Use the assist edit to change the rule. |
| Meal reductions (%) | MealReductionsSummary |
Specifies the percentages deducted from the per diem when breakfast, lunch, or dinner is provided. Use the assist edit to change the values. | |
| Canary (allowlisted tenants) | Canary | UseCanaryEndpoint |
Specifies whether Expense Agent service calls from this environment are routed to the canary endpoint. |
Actions
| Group | Action | ToolTip | Runs |
|---|---|---|---|
| SystemActions | Update | Apply the changes to the agent setup. | |
| Cancel | Discards the changes and closes the setup page. |
Procedures
46 local procedures, no public ones.
Triggers
OnOpenPage, OnAfterGetCurrRecord, OnQueryClosePage
Relations
- source table Table 6930 “Expense Agent Setup”
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 457 “Environment Information” (4 calls:
GetExpenseDashboardUrl → IsOnPrem,GetExpenseDashboardUrl → IsSaaSInfrastructure,RegisterErpConfiguration → IsSaaSInfrastructure, …) - Codeunit 6922 “Expense Agent Entra App Mgt.” (3 calls:
ActivateAgent → EnableAadApplicationForCurrentCompany,DeactivateAgent → DisableAadApplicationForCurrentCompany,DeactivateAgent → VerifyCanDisableAadApplicationForCurrentCompany) - Codeunit 6941 “EA Http Client” (3 calls:
OnOpenPage → IsTenantOnCanaryAllowlist,RegisterErpConfiguration → RegisterErpConfiguration,UnregisterErpConfiguration → UnregisterErpConfiguration) - Codeunit 4324 “Agent Setup” (2 calls:
OnAfterGetCurrRecord → GetChangesMade,PersistAgentState → SaveChanges) - Codeunit 6935 “EA Agent Scheduler” (2 calls:
CancelAllTasks → RemoveAgentTasks,ScheduleAllTasks → ScheduleAgent) - Codeunit 6951 “Exp. Privacy Notice Reg.” (2 calls:
ValidatePrivacyNoticeApproval → ConfirmPrivacyNoticeApproval,ValidatePrivacyNoticeApproval → IsPrivacyNoticeApproved) - Codeunit 7771 “Azure OpenAI” (2 calls:
OnOpenPage → IsEnabled,ValidateCapabilityIsEnabled → IsEnabled) - Codeunit 8894 “Email Account” (2 calls:
ValidateNoreplyMailboxExists → GetAllAccounts,ValidateSelectedMailboxExists → GetAllAccounts) - Codeunit 9005 “Url Helper” (2 calls:
GetExpenseDashboardUrl → IsPPE,GetExpenseDashboardUrl → IsTIE) - Codeunit 4317 “Agent System Permissions” (1 call:
OnOpenPage → CurrentUserHasCanManageAllAgentsPermission) - Codeunit 4321 “Agent” (1 call:
FindCompanyAgentUserSecurityID → GetUserSettings) - Codeunit 6970 “Create Expense Agent Setup” (1 call:
OnAfterGetCurrRecord → GetDefaultMileageUOM) - Codeunit 6972 “Create Expense No. Series” (1 call:
IsNoSeriesDataEmpty → GetExpenseNoSeriesFilter) - Codeunit 8703 “Feature Telemetry” (1 call:
OnOpenPage → LogUptake)
Recent changes
- 2026-09-29 #11993 Enable HTTP requests before Expense Agent setup (main, BC30, fix)
- 2026-09-29 #11813 Bug 633676: Expense Agent - Setup wizard - Cannot clear default approver once saved from assist edit (main, BC30, fix)
- 2026-09-24 #11832 [Master] - Bug 651133: [Expense Agent][BugBash] Mileage setup (main, BC30, fix)
- 2026-09-22 #11682 [Expense Agent] Remove migration TODO and analyzer suppressions (main, BC30, refactor)
- 2026-09-18 #11290 [Bug 640454] Scope Expense Agent Entra permissions by company (main, BC30, fix)
- 2026-09-17 #11541 Clarify Expense Agent and expense management setup (main, BC30, feature)
- 2026-09-15 #11425 Bug 650137: [29.x] Expense Locations and Per-diem rules in configuration - Backport (releases/29.x, BC29, feature)
- 2026-09-10 #10155 Slice 641293: [Expense Agent] Expense Locations and Per-diem rules in configurationAdded more locations (main, BC30, feature)
- 2026-09-08 #11027 [Master]-Bug 648538: Add mileage setup to Expense Agent wizard (main, BC30, feature)
- 2026-09-04 #10956 [ExpenseAgent] Refactor agent setup for policies (main, BC30, feature)
- 2026-08-26 #10631 Integration/main to releases 29.x 31a860b5 (releases/29.x, BC29, feature)
- 2026-08-21 #10031 Add AI-assisted policy evaluation backend to Expense Agent (main, BC30, feature)
- 2026-08-04 #9859 [Master] - Move Expense Agent (Preview) app into BCApps (main, BC30, feature, added)
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: "page", object_name: "Expense Agent Setup Wizard"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.