---
id: object/codeunit/1890
type: object
title: Codeunit 1890 "Reminder Communication"
summary: Codeunit 1890 "Reminder Communication" in Base Application (Microsoft.Sales.Reminder). 19 public procedures, 4 events, 4 event subscribers. Introduced in BC24, still in BC30, changed in BC25, BC27-29.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: "24"
  last_changed: "29"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: 8708fe2761b0c35437a312158ee01d69af8e9a07d31ff74260cd81545a6ec369
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Sales/Reminder/TermsAndLevels/ReminderCommunication.Codeunit.al
    title: src/Layers/W1/BaseApp/Sales/Reminder/TermsAndLevels/ReminderCommunication.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/11209
    - change/bcapps/11158
    - change/bcapps/10504
object_type: codeunit
object_id: 1890
name: Reminder Communication
namespace: Microsoft.Sales.Reminder
app: Base Application
extends: null
first_version: "24"
last_version: "30"
present_in:
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "25"
  - "27"
  - "28"
  - "29"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 42
  events: 4
  subscribers: 4
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 7
  called_by: 5
  implements: 0
---

# Codeunit 1890 "Reminder Communication"

> Codeunit 1890 "Reminder Communication" in Base Application (Microsoft.Sales.Reminder). 19 public procedures, 4 events, 4 event subscribers. Introduced in BC24, still in BC30, changed in BC25, BC27-29.

Base Application · Microsoft.Sales.Reminder · BC24-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Sales/Reminder/TermsAndLevels/ReminderCommunication.Codeunit.al) · facts from BC29

## Events published

- `OnBeforeExitReportIDOnReplaceHTMLText(ReportID: Integer; var RecordVariant: Variant; var ReportIDExit: Boolean)` (integration)
- `OnAfterSubstituteRelatedValues(var BodyTxt: Text; var IssuedReminderHeader: Record "Issued Reminder Header")` (integration)
- `OnTransferReminderTextOnBeforeInsertBeginningReminderAttachmentTextLine(var ReminderText: Record "Reminder Text"; var ReminderAttachmentTextLine: Record "Reminder Attachment Text Line")` (integration)
- `OnTransferReminderTextOnBeforeInsertEndingReminderAttachmentTextLine(var ReminderText: Record "Reminder Text"; var ReminderAttachmentTextLine: Record "Reminder Attachment Text Line")` (integration)

## Event subscriptions

- OnReplaceHTMLText subscribes to Table "Report Selections" OnAfterDoSaveReportAsHTMLInTempBlob
- OnBeforeGetEmailSubject subscribes to Codeunit "Document-Mailing" OnBeforeGetEmailSubject
- GetFilename subscribes to Codeunit "ReportManagement" OnGetFilename
- OnBeforeGetAttachmentFileName subscribes to Codeunit "Document-Mailing" OnBeforeGetAttachmentFileName

## Procedures

- `FindDescriptionForLineFee(var ReminderLevel: Record "Reminder Level"; var CustLedgerEntry: Record "Cust. Ledger Entry"; var ReminderLine: Record "Reminder Line"; var GLAccount: Record "G/L Account"): Text[100]`
- `InsertBeginningText(var ReminderHeader: Record "Reminder Header"; var ReminderLevel: Record "Reminder Level"; var ReminderLine: Record "Reminder Line")`: Inserts the beginning text lines into a reminder based on the reminder level and language.
- `InsertEndingText(var ReminderHeader: Record "Reminder Header"; var ReminderLevel: Record "Reminder Level"; var ReminderLine: Record "Reminder Line")`: Inserts the ending text lines into a reminder based on the reminder level and language.
- `SubstituteInlineFeeDescription(FeeLineDescriptionText: Text[100]; var ReminderLevel: Record "Reminder Level"; var ReminderLine: Record "Reminder Line"): Text[100]`: Substitutes placeholders in the inline fee description with actual values from the reminder.
- `SubstituteBeginningOrEndingDescription(SourceDescriptionText: Text[100]; ReminderTotal: Decimal; MaxLength: Integer; var ReminderHeader: Record "Reminder Header"; var FinanceChargeTerms: Record "Finance Charge Terms"): Text[100]`: Substitutes placeholders in beginning or ending description text with actual reminder values.
- `GetListOfAttachmentLanguagesFromIdWithSeparator(SelectedGuid: Guid; SeparatorText: Text): Text`: Gets a formatted text list of attachment language codes separated by the specified separator.
- `GetListOfEmailLanguagesFromIdWithSeparator(SelectedGuid: Guid; SeparatorText: Text): Text`: Gets a formatted text list of email language codes separated by the specified separator.
- `GetListOfAttachmentLanguagesFromId(SelectedGuid: Guid): List of [Code[10]]`: Gets a list of all language codes that have attachment text defined for the specified ID.
- `GetListOfEmailLanguagesFromId(SelectedGuid: Guid): List of [Code[10]]`: Gets a list of all language codes that have email text defined for the specified ID.
- `SetDefaultContentForNewLanguage(SelectedId: Guid; LanguageCode: Code[10]; SourceType: Enum "Reminder Text Source Type"; SelectedSystemId: Guid)`: Creates default attachment and email text records for a new language.
- `ExtractAttachmentAndEmailLanguages(var ReminderTerms: Record "Reminder Terms"): Text`: Extracts and formats the available attachment and email languages for the reminder terms.
- `ExtractAttachmentAndEmailLanguages(var ReminderLevel: Record "Reminder Level"): Text`: Extracts and formats the available attachment and email languages for the reminder level.
- `ExtractAttachmentAndEmailLanguages(SelectedId: Guid): Text`: Extracts and formats the available attachment and email languages for the specified ID.
- `PopulateEmailText(var IssuedReminderHeader: Record "Issued Reminder Header"; var CompanyInfo: Record "Company Information"; var GreetingTxt: Text; var AmtDueTxt: Text; var BodyTxt: Text; var ClosingTxt: Text; var DescriptionTxt: Text; NNC_TotalInclVAT: Decimal)`: Populates the email text components for an issued reminder based on language and template settings.
- `CheckMissMatchBetweenLanguages(var ReminderTerms: Record "Reminder Terms"): Boolean` (internal)
- `TransferReminderText()` (internal)
- `TransferReminderTermsTranslations()` (internal)
- `TransferReminderTermsLineFeeDescription()` (internal)
- `TransferReminderLevelLineFeeDescription()` (internal)

Plus 15 local procedures.

## 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 10 "Type Helper"](../codeunit/10.md) (7 calls: `OnReplaceHTMLText → LFSeparator`, `OnReplaceHTMLText → TryReadAsTextWithSeparator`, `SelectEmailBodyText → LFSeparator`, …)
- [Codeunit 43 "Language"](../codeunit/43.md) (6 calls: `GetCustomerLanguageOrDefaultUserLanguage → GetDefaultApplicationLanguageId`, `GetCustomerLanguageOrDefaultUserLanguage → GetLanguageCode`, `GetCustomerLanguageOrDefaultUserLanguage → GetUserLanguageCode`, …)
- [Codeunit 4100 "Temp Blob"](../codeunit/4100.md) (2 calls: `OnReplaceHTMLText → CreateInStream`, `OnReplaceHTMLText → CreateOutStream`)
- [Codeunit 45 "Auto Format"](../codeunit/45.md) (2 calls: `SubstituteBeginningOrEndingDescription → ResolveAutoFormat`, `SubstituteRelatedValues → ResolveAutoFormat`)
- [Codeunit 3960 "Regex"](../codeunit/3960.md) (1 call: `StripHtmlTags → Replace`)
- [Codeunit 452 "Report Distribution Management"](../codeunit/452.md) (1 call: `OnBeforeGetEmailSubject → GetIssuedReminderDocTypeTxt`)
- [Codeunit 9520 "Mail Management"](../codeunit/9520.md) (1 call: `PopulateEmailText → IsHandlingGetEmailBody`)

## Called by

- [Page 838 "Reminder Terms Setup"](../page/838.md) (2 calls: `OnAfterGetRecord → ExtractAttachmentAndEmailLanguages`, `OnQueryClosePage → CheckMissMatchBetweenLanguages`)
- [Table 295 "Reminder Header"](../table/295.md) (2 calls: `InsertBeginTexts → InsertBeginningText`, `InsertEndTexts → InsertEndingText`)
- [Page 1896 "Reminder Level Setup"](../page/1896.md) (1 call: `OnAfterGetRecord → ExtractAttachmentAndEmailLanguages`)
- [Page 1897 "Reminder Term Communication"](../page/1897.md) (1 call: `SelectLanguageForSubpages → GetListOfAttachmentLanguagesFromIdWithSeparator`)
- [Page 835 "Reminder Level Communication"](../page/835.md) (1 call: `SelectLanguageForSubpages → GetListOfAttachmentLanguagesFromIdWithSeparator`)

## Recent changes

- 2026-09-10 [#11209 [29.x]-"The record in table Reminder Line already exists." error appears if you Create Reminders for a Customer with all the Open Entries On Hold and no Reminder Free applied on the Reminder Terms used.](../../changes/bcapps/11209.md) (releases/29.x, BC29, fix)
- 2026-09-08 [#11158 [Master]-"The record in table Reminder Line already exists." error appears if you Create Reminders for a Customer with all the Open Entries On Hold and no Reminder Free applied on the Reminder Terms used](../../changes/bcapps/11158.md) (main, BC30, fix)
- 2026-08-31 [#10504 [Reminders] Complete the communication texts model uptake](../../changes/bcapps/10504.md) (main, BC30, feature)

## Across versions

- Present in: BC24-30
- Changed (declaration) in: BC25, BC27-29

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: "codeunit", object_name: "Reminder Communication")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
