---
id: object/codeunit/5330
type: object
title: Codeunit 5330 "CRM Integration Management"
summary: Codeunit 5330 "CRM Integration Management" in Base Application (Microsoft.Integration.Dataverse). 127 public procedures, 27 events, 11 event subscribers. Present since at least BC23, still in BC30, changed in BC24-26, BC28-30.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "30"
  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: 54e9b381ecff290f4eb4fe65d61af495749399528a101e8a014f06937f371fa5
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Integration/Dataverse/CRMIntegrationManagement.Codeunit.al
    title: src/Layers/W1/BaseApp/Integration/Dataverse/CRMIntegrationManagement.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/12261
    - change/bcapps/11171
    - change/bcapps/10578
object_type: codeunit
object_id: 5330
name: CRM Integration Management
namespace: Microsoft.Integration.Dataverse
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "26"
  - "28"
  - "29"
  - "30"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 237
  events: 27
  subscribers: 11
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 15
  calls: 32
  called_by: 141
  implements: 0
---

# Codeunit 5330 "CRM Integration Management"

> Codeunit 5330 "CRM Integration Management" in Base Application (Microsoft.Integration.Dataverse). 127 public procedures, 27 events, 11 event subscribers. Present since at least BC23, still in BC30, changed in BC24-26, BC28-30.

Base Application · Microsoft.Integration.Dataverse · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Integration/Dataverse/CRMIntegrationManagement.Codeunit.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| SingleInstance | true |
| Permissions | tabledata "Sales Invoice Header" = rm, tabledata "CDS Connection Setup" = r, tabledata "CRM Connection Setup" = r |

## Events published

- `OnIsCDSIntegrationEnabled(var isEnabled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnIsCDSIntegrationEnabled
- `OnInitCDSConnection(var ConnectionName: Text; var handled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnInitCDSConnection
- `OnGetCDSIntegrationUserId(var IntegrationUserId: Guid; var handled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnGetCDSIntegrationUserId
- `OnGetCDSServerAddress(var CDSServerAddress: Text; var handled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnGetCDSServerAddress
- `OnTestCDSConnection(var handled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnTestCDSConnection
- `OnCloseCDSConnection(ConnectionName: Text; var handled: Boolean)` (integration)
  - subscribers: [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) HandleOnCloseCDSConnection
- `OnAfterCRMIntegrationEnabled()` (integration)
- `OnBeforeOpenRecordCardPage(RecordID: RecordID; var IsHandled: Boolean)` (integration)
  - subscribers: [Codeunit 6610 "FS Int. Table Subscriber"](../codeunit/6610.md) OnBeforeOpenRecordCardPage
- `OnBeforeGetIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; TableID: Integer)` (integration)
- `OnBeforeGetIntegrationTableMappingFromCRMRecord(var IntegrationTableMapping: Record "Integration Table Mapping"; RecRef: RecordRef)` (integration)
- `OnBeforeHandleCustomIntegrationTableMapping(var IsHandled: Boolean; IntegrationTableMappingName: Code[20]; var IntegrationTableMapping: Record "Integration Table Mapping"; EnqueueJobQueEntries: Boolean)` (integration)
  - subscribers: [Codeunit 6277 "Sust. Setup Defaults"](../codeunit/6277.md) OnBeforeHandleCustomIntegrationTableMapping, [Codeunit 6611 "FS Setup Defaults"](../codeunit/6611.md) OnBeforeHandleCustomIntegrationTableMapping
- `OnBeforeSynchronyzeNowQuestion(var AllowedDirection: Integer; var IsHandled: Boolean)` (integration)
- `OnIsCRMIntegrationRecord(TableID: Integer; var isIntegrationRecord: Boolean)` (integration)
  - subscribers: [Codeunit 5341 "CRM Int. Table. Subscriber"](../codeunit/5341.md) HandleOnIsCRMIntegrationRecord, [Codeunit 6610 "FS Int. Table Subscriber"](../codeunit/6610.md) HandleOnIsCRMIntegrationRecord
- `OnEnabledDatabaseTriggersSetup(TableID: Integer; var Enabled: Boolean)` (integration)
- `OnGetTableIdFromCRMOption(RecRef: RecordRef; var TableId: Integer)` (integration)
- `OnIsCRMTable(TableID: Integer; var IsCRMTable: Boolean; var Handled: Boolean)` (integration)
- `OnIsIntegrationRecordChild(TableID: Integer; var Handled: Boolean; var ReturnValue: Boolean)` (integration)
  - subscribers: [Codeunit 5341 "CRM Int. Table. Subscriber"](../codeunit/5341.md) HandleOnIsIntegrationRecordChild
- `OnBeforeOpenCoupledNavRecordPage(CRMID: Guid; CRMEntityTypeName: Text; var Result: Boolean; var IsHandled: Boolean)` (integration)
  - subscribers: [Codeunit 6610 "FS Int. Table Subscriber"](../codeunit/6610.md) OnBeforeOpenCoupledNavRecordPage
- `OnBeforeFindCoupledToCRMField(TableNo: Integer; var IsHandled: Boolean; var CoupledFieldNo: Integer)` (integration)
  - subscribers: [Codeunit 6610 "FS Int. Table Subscriber"](../codeunit/6610.md) HandleOnBeforeFindCoupledToCRMField
- `OnAfterGetCRMEntityUrlFromCRMID(CRMEntityUrlTemplateTxt: Text; NewestUIAppIdParameterTxt: Text; TableId: Integer; CRMId: Guid; var CRMEntityUrl: Text; CRMTableId: Integer)` (integration)
- `OnGetIntegrationTableMappingFromCRMIDOnBeforeFindTableID(var IntegrationTableMapping: Record "Integration Table Mapping"; var TableID: Integer; CRMID: Guid; var IsHandled: Boolean)` (integration)
- `OnBeforeGetIntegrationTableMappingWithRecordId(var IntegrationTableMapping: Record "Integration Table Mapping"; BCRecordId: RecordId; var TableID: Integer)` (integration)
- `OnAfterGetIntegrationTableMappingFromCRMRecordBeforeFindRecord(var IntegrationTableMapping: Record "Integration Table Mapping"; RecRef: RecordRef)` (integration)
- `OnAfterAddExtraFieldMappings(IntegrationTableMappingName: Code[20])` (integration)
  - subscribers: [Codeunit 5369 "Manual Int Mapping Events"](../codeunit/5369.md) AddExtraFieldMappings
- `OnBeforeRescheduleJobQueueEntries(TableNo: Integer; var RescheduleOffSetInMs: Integer)` (integration)
- `OnRemoveCouplingOnBeforeGetIntegrationTableMappingForUncoupling(var IntegrationTableMapping: Record "Integration Table Mapping"; LocalRecordRef: RecordRef)` (integration)
- `OnMatchBasedCouplingOnBeforeGetIntegrationTableMappingForMatchBasedCoupling(var IntegrationTableMapping: Record "Integration Table Mapping"; LocalRecordRef: RecordRef)` (integration)

## Event subscriptions

- HandleOnUpdateConflictDetected subscribes to Codeunit "Integration Rec. Synch. Invoke" OnUpdateConflictDetected
- HandleOnDeletionConflictDetected subscribes to Codeunit "Integration Rec. Synch. Invoke" OnDeletionConflictDetected
- HandleCRMRegisterServiceConnection subscribes to Table "Service Connection" OnRegisterServiceConnection
- HandleOnGetIntegrationSolutions subscribes to Codeunit "CDS Integration Mgt." OnGetIntegrationSolutions
- HandleOnGetIntegrationRequiredRoles subscribes to Codeunit "CDS Integration Mgt." OnGetIntegrationRequiredRoles
- OnInitializingNotificationWithDefaultState subscribes to Page "My Notifications" OnInitializingNotificationWithDefaultState
- IsDataIntegrationEnabled subscribes to Table "Integration Synch. Job Errors" OnIsDataIntegrationEnabled
- DisableConnectionOnAfterLongSynchError subscribes to Table "Integration Synch. Job Errors" OnAfterLogSynchError
- ForceSynchronizeDataIntegration subscribes to Table "Integration Synch. Job Errors" OnForceSynchronizeDataIntegration
- ForceSynchronizeRecords subscribes to Table "Integration Synch. Job Errors" OnForceSynchronizeRecords
- HandleOnOptionDeletionConflictDetected subscribes to Codeunit "Int. Option Synch. Invoke" OnDeletionConflictDetected

## Procedures

- `IsCRMIntegrationEnabled(): Boolean`
- `IsCDSIntegrationEnabled(): Boolean`
- `IsIntegrationEnabled(): Boolean`
- `IsCRMSolutionInstalled(): Boolean`
- `CheckSolutionVersionOutdated(): Boolean`
- `SetCRMNAVConnectionUrl(WebClientUrl: Text[250])`
- `RemoveCRMNAVConnectionUrl(WebClientUrl: Text[250]): Boolean` (internal)
- `UpdateMultipleNow(RecVariant: Variant)`
- `UpdateMultipleNow(RecVariant: Variant; IsOption: Boolean)`
- `UpdateOneNow(RecordID: RecordID)`
- `UpdateSkippedNow(var CRMIntegrationRecord: Record "CRM Integration Record")`
- `UpdateSkippedNow(var CRMIntegrationRecord: Record "CRM Integration Record"; var CRMOptionMapping: Record "CRM Option Mapping")`
- `UpdateSkippedNow(var CRMIntegrationRecord: Record "CRM Integration Record"; SkipNotification: Boolean)`
- `UpdateSkippedNow(var CRMIntegrationRecord: Record "CRM Integration Record"; var CRMOptionMapping: Record "CRM Option Mapping"; SkipNotification: Boolean)`
- `UpdateAllSkippedNow()`
- `CheckOrEnableCRMConnection()`
- `CreateNewRecordsInCRM(RecVariant: Variant)`
- `CreateNewOptionsInCRM(RecVariant: Variant)`
- `CreateNewOptionsInCRM(var LocalIdListDictionary: Dictionary of [Code[20], List of [Guid]])`
- `CreateNewRecordsInCRM(var LocalIdListDictionary: Dictionary of [Code[20], List of [Guid]])`
- `CreateNewRecordsFromSelectedCRMOptions(RecVariant: Variant)`
- `EnqueueOptionSyncJobFromIntegrationTable(IntegrationTableMapping: Record "Integration Table Mapping"; CRMOptionIds: List of [Integer]; Direction: Integer; SynchronizeOnlyCoupledRecords: Boolean): Boolean`
- `EnqueueOptionSyncJobToIntegrationTable(IntegrationTableMapping: Record "Integration Table Mapping"; LocalIdList: List of [Guid]; Direction: Integer; SynchronizeOnlyCoupledRecords: Boolean): Boolean`
- `CreateNewRecordsFromCRM(RecVariant: Variant)`
- `CreateNewRecordsFromCRM(var CRMIdListDictionary: Dictionary of [Code[20], List of [Guid]])`
- `CreateNewRecords(var LocalIdListDictionary: Dictionary of [Code[20], List of [Guid]]; var CRMIdListDictionary: Dictionary of [Code[20], List of [Guid]])`
- `CreateNewRecordsFromSelectedCRMRecords(RecVariant: Variant)`
- `MarkLocalDeletedAsSkipped()` (internal)
- `RepairBrokenCouplings()`
- `RepairBrokenCouplings(UseLocalRecordsOnly: Boolean)`
- `RemoveCoupling(TableID: Integer; CRMTableID: Integer)`
- `MatchBasedCoupling(TableID: Integer): Boolean`
- `MatchBasedCoupling(TableID: Integer; SkipSettingCriteria: Boolean; IsFullSync: Boolean; InForeground: Boolean): Boolean`
- `RemoveCoupling(var LocalRecordRef: RecordRef)`
- `MatchBasedCoupling(var LocalRecordRef: RecordRef)`
- `RemoveCoupling(LocalTableID: Integer; var LocalIdList: List of [Guid])`
- `RemoveCoupling(LocalTableID: Integer; var LocalIdList: List of [Guid]; Schedule: Boolean)`
- `RemoveCoupling(LocalTableID: Integer; IntegrationTableID: Integer; var IntegrationIdList: List of [Guid])`
- `RemoveCoupling(var LocalRecordRef: RecordRef; Schedule: Boolean)` (internal)
- `RemoveOptionMapping(var RecRef: RecordRef)`
- `CreateOptionMapping(RecordID: RecordID; CRMOptionId: Integer; CRMOptionValue: Text[250])`
- `GetMappedCRMOptionId(RecordID: RecordID; var CRMOptionId: Integer): Boolean`
- `RemoveCoupling(LocalTableID: Integer; IntegrationTableID: Integer; var IntegrationIdList: List of [Guid]; Schedule: Boolean)` (internal)
- `RemoveCoupling(RecordID: RecordID)`
- `RemoveCoupling(RecordID: RecordID; Schedule: Boolean): Boolean` (internal)
- `RemoveCoupling(TableID: Integer; CRMTableID: Integer; CRMID: Guid)`
- `RemoveCoupling(TableID: Integer; CRMTableID: Integer; CRMID: Guid; Schedule: Boolean): Boolean` (internal)
- `GetIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; RecId: RecordId)`
- `GetIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; TableID: Integer)`
- `IsCRMTable(TableID: Integer): Boolean`
- `EnqueueFullSyncJob(Name: Code[20]): Guid`
- `EnqueueSyncJob(IntegrationTableMapping: Record "Integration Table Mapping"; RecordID: RecordID; CRMID: Guid; Direction: Integer): Boolean`
- `EnqueueSyncJob(IntegrationTableMapping: Record "Integration Table Mapping"; SystemIds: List of [Guid]; CRMIDs: List of [Guid]; Direction: Integer; SynchronizeOnlyCoupledRecords: Boolean): Boolean`
- `AddIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping")`
- `AddIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; SynchOnlyCoupledRecords: Boolean)`
- `CloneIntegrationFieldMapping(SourceMappingName: Code[20]; DestinationMappingName: Code[20])`
- `CreateOrUpdateCRMAccountStatistics(Customer: Record Customer)`
- `ShowCRMEntityFromRecordID(RecordID: RecordID)`
- `GetCRMEntityUrlFromRecordID(TargetRecordID: RecordID): Text`
- `GetCRMEntityUrlFromCRMID(TableId: Integer; CRMId: Guid): Text`
- `GetCRMEntityUrlFromCRMID(TableId: Integer; CRMTableId: Integer; CRMId: Guid): Text`
- `OpenCoupledNavRecordPage(CRMID: Guid; CRMEntityTypeName: Text): Boolean`
- `GetCRMEntityTypeName(TableId: Integer): Text`
- `GetCRMEntityTypeName(TableId: Integer; CRMTableId: Integer): Text`
- `DefineCoupling(RecordID: RecordID): Boolean`
- `DefineOptionMapping(RecordID: RecordID): Boolean`
- `ManageCreateNewRecordFromCRM(TableID: Integer)`
- `CreateNewContactFromCRM()`
- `CreateNewCustomerFromCRM()`
- `CreateNewVendorFromCRM()`
- `ShowCustomerCRMOpportunities(Customer: Record Customer)`
- `ShowCustomerCRMQuotes(Customer: Record Customer)`
- `ShowCustomerCRMCases(Customer: Record Customer)`
- `ResetIntTableMappingDefaultConfiguration(var IntegrationTableMapping: Record "Integration Table Mapping")`
- `AddExtraFieldMappings(IntegrationTableMapping: Record "Integration Table Mapping")` (internal)
- `GetNoOfCRMOpportunities(Customer: Record Customer): Integer`
- `GetNoOfCRMQuotes(Customer: Record Customer): Integer`
- `GetNoOfCRMCases(Customer: Record Customer): Integer`
- `ClearState()`
- `GetLastErrorMessage(): Text`
- `ImportCRMSolution(ServerAddress: Text; IntegrationUserEmail: Text; AdminUserEmail: Text; AdminUserPassword: SecretText; AccessToken: SecretText; AdminADDomain: Text; ProxyVersion: Integer; ForceRedeploy: Boolean; var SolutionImportFailed: Boolean)`
- `IsSolutionOutdated(TempConnectionString: SecretText; SolutionUniqueName: Text[65]): Boolean`
- `CheckConnectRequiredFields(ServerAddress: Text; IntegrationUserEmail: Text)`
- `CheckModifyCRMConnectionURL(var ServerAddress: Text[250])`
- `CheckCRMConnectionURL(ServerAddress: Text[250])`
- `GetOrganizationFromUrl(ServerAddress: Text[250]): Text`
- `ConstructConnectionStringForSolutionImport(ServerAddress: Text): Text`
- `ProcessConnectionFailures()`
- `DisableNotification(HostNotification: Notification)`
- `GetCommonNotificationID(): Guid`
- `GetSkippedNotificationID(): Guid`
- `SendResultNotification(RecVariant: Variant): Boolean`
- `OpenIntegrationSynchronizationJobsFromNotification(HostNotification: Notification)`
- `ShowLog(RecId: RecordID)`
- `ShowOptionLog(RecId: RecordId)`
- `ShowSkippedRecords(SkippedSyncNotification: Notification)`
- `CoupleCRMEntity(RecordID: RecordID; CRMID: Guid; var Synchronize: Boolean; var Direction: Option): Boolean`
- `TestCRMConnection(var CRMHelper: DotNet CrmHelper)`
- `InitializeProxyVersionList(var TempStack: Record TempStack temporary)`
- `GetLastProxyVersionItem(): Integer`
- `ClearConnectionDisableReason(var CRMConnectionSetup: Record "CRM Connection Setup")`
- `GetCRMDisabledErrorReasonNotificationId(): Guid`
- `IsWorkingConnection(): Boolean`
- `SendConnectionDisabledNotification(DisableReason: Text[250])`
- `IsItemAvailabilityEnabled(): Boolean`
- `InitializeCRMSynchStatus()`
- `InitializeCRMSynchStatus(var CRMSynchStatus: Record "CRM Synch Status")` (internal)
- `HasUncoupledSelectedUsers(var SelectedCRMSystemuser: Record "CRM Systemuser"): Boolean`
- `RegisterAssistedSetup()`
- `IsCRMIntegrationRecord(TableID: Integer): Boolean`
- `GetDatabaseTableTriggerSetup(TableID: Integer; var Insert: Boolean; var Modify: Boolean; var Delete: Boolean; var Rename: Boolean)`
- `OnDatabaseInsert(RecRef: RecordRef)`
- `OnDatabaseModify(RecRef: RecordRef)`
- `OnDatabaseRename(RecRef: RecordRef; XRecRef: RecordRef)`
- `ReactivateJobForTable(TableNo: Integer)` (internal)
- `UserCanRescheduleJob(): Boolean`
- `FindCoupledToCRMField(var RecRef: RecordRef; var CoupledToCRMFldRef: FieldRef): Boolean` (internal)
- `EnableUnitGroupMapping(): Guid`
- `DisableUnitGroupMapping()`
- `AdjustUnitGroupCRMConnectionSetup()`
- `UpdateItemUnitGroup()`
- `UpdateResourceUnitGroup()`
- `IsUnitGroupMappingEnabled(): Boolean`
- `MultipleCompanyLearnMore(var Notification: Notification)`
- `IsIntegrationRecordChild(TableID: Integer): Boolean`
- `GetFieldServiceIntegrationAppSourceLink(): Text`
- `IsFieldServiceIntegrationAppInstalled(): Boolean`

Plus 72 local procedures.

## Triggers

OnRun

## 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 5334 "CRM Setup Defaults"](../codeunit/5334.md) (24 calls: `EnqueueFullSyncJob → CreateJobQueueEntry`, `EnqueueOptionSyncJob → CreateJobQueueEntry`, `EnqueueOptionSyncJobFromIntegrationTable → CreateJobQueueEntry`, …)
- [Codeunit 5344 "CRM Product Name"](../codeunit/5344.md) (14 calls: `CheckOrEnableCRMConnection → CDSServiceName`, `CheckOrEnableCRMConnection → SHORT`, `ConstructConnectionStringForSolutionImport → SHORT`, …)
- [Codeunit 7204 "CDS Setup Defaults"](../codeunit/7204.md) (11 calls: `EnqueueCouplingJob → CreateCoupleJobQueueEntry`, `EnqueueUncoupleJob → CreateUncoupleJobQueueEntry`, `ResetIntTableMappingDefaultConfiguration → ResetContactContactMapping`, …)
- [Codeunit 7201 "CDS Integration Impl."](../codeunit/7201.md) (10 calls: `CheckOrEnableCRMConnection → RegisterAssistedSetup`, `ImportCRMSolution → ActivateConnection`, `ImportCRMSolution → AssignTeamRole`, …)
- [Codeunit 1291 "DotNet Exception Handler"](../codeunit/1291.md) (5 calls: `ProcessConnectionFailures → CastToType`, `ProcessConnectionFailures → Collect`, `ProcessConnectionFailures → GetMessage`, …)
- [Codeunit 5336 "Integration Record Synch."](../codeunit/5336.md) (5 calls: `EnqueueOptionSyncJob → GetTableViewForRecordID`, `EnqueueOptionSyncJobToIntegrationTable → GetTableViewForSystemIds`, `EnqueueSyncJob → GetTableViewForRecordIDAndFlowFilters`, …)
- [Codeunit 1990 "Guided Experience"](../codeunit/1990.md) (3 calls: `CheckOrEnableCRMConnection → Run`, `RegisterAssistedSetup → Exists`, `RegisterAssistedSetup → InsertAssistedSetup`)
- [Codeunit 5331 "CRM Coupling Management"](../codeunit/5331.md) (2 calls: `DefineCoupling → DefineCoupling`, `DefineOptionMapping → DefineOptionMapping`)
- [Codeunit 5345 "Integration Rec. Synch. Invoke"](../codeunit/5345.md) (2 calls: `GetSelectedSingleSyncDirection → WasModifiedAfterLastSynch`, `WasRecordModifiedAfterLastSynch → WasModifiedAfterLastSynch`)
- [Codeunit 5350 "CRM Statistics Job"](../codeunit/5350.md) (2 calls: `CreateOrUpdateCRMAccountStatistics → CreateOrUpdateCRMAccountStatistics`, `CreateOrUpdateCRMAccountStatistics → UpdateStatusOfPaidInvoices`)
- [Codeunit 7200 "CDS Integration Mgt."](../codeunit/7200.md) (2 calls: `CheckSolutionVersionOutdated → GetSolutionVersion`, `ResetIntTableMappingDefaultConfiguration → IsTeamOwnershipModelSelected`)
- [Page 5341 "CRM Account List"](../page/5341.md) (2 calls: `CreateNewCustomerFromCRM → (object)`, `CreateNewVendorFromCRM → (object)`)
- [Codeunit 2504 "Extension Management"](../codeunit/2504.md) (1 call: `IsFieldServiceIntegrationAppInstalled → IsInstalledByAppId`)
- [Codeunit 453 "Job Queue - Enqueue"](../codeunit/453.md) (1 call: `EnableUnitGroupMapping → (object)`)
- [Codeunit 5335 "Integration Table Synch."](../codeunit/5335.md) (1 call: `GetSelectedSingleSyncDirection → CheckTransferFields`)
- [Codeunit 5360 "CDS Int. Table Couple"](../codeunit/5360.md) (1 call: `PerformCoupling → PerformScheduledCoupling`)
- [Codeunit 700 "Page Management"](../codeunit/700.md) (1 call: `OpenRecordCardPage → PageRun`)
- [Codeunit 8703 "Feature Telemetry"](../codeunit/8703.md) (1 call: `CheckOrEnableCRMConnection → LogUptake`)
- [Codeunit 9900 "Data Upgrade Mgt."](../codeunit/9900.md) (1 call: `ReactivateJobForTable → IsUpgradeInProgress`)
- [Page 209 "Units of Measure"](../page/209.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 21 "Customer Card"](../page/21.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 26 "Vendor Card"](../page/26.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 30 "Item Card"](../page/30.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 495 "Currency Card"](../page/495.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 5050 "Contact Card"](../page/5050.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 5116 "Salesperson/Purchaser Card"](../page/5116.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 5342 "CRM Contact List"](../page/5342.md) (1 call: `CreateNewContactFromCRM → (object)`)
- [Page 5343 "CRM Opportunity List"](../page/5343.md) (1 call: `ShowCustomerCRMOpportunities → (object)`)
- [Page 5349 "CRM Case List"](../page/5349.md) (1 call: `ShowCustomerCRMCases → (object)`)
- [Page 5351 "CRM Sales Quote List"](../page/5351.md) (1 call: `ShowCustomerCRMQuotes → (object)`)
- [Page 7 "Customer Price Groups"](../page/7.md) (1 call: `OpenRecordCardPage → (object)`)
- [Page 76 "Resource Card"](../page/76.md) (1 call: `OpenRecordCardPage → (object)`)

## Called by

- [Codeunit 5341 "CRM Int. Table. Subscriber"](../codeunit/5341.md) (21 calls: `ChangeSalesOrderStateCode → IsCRMIntegrationEnabled`, `FindCRMUoMIdForSalesPrice → IsUnitGroupMappingEnabled`, `HandleContactQueryPostFilterIgnoreRecord → IsCDSIntegrationEnabled`, …)
- [Table 5330 "CRM Connection Setup"](../table/5330.md) (13 calls: `DeployCRMSolution → CheckCRMConnectionURL`, `DeployCRMSolution → ImportCRMSolution`, `DeployCRMSolution → IsCRMSolutionInstalled`, …)
- [Codeunit 6615 "FS Integration Mgt."](../codeunit/6615.md) (9 calls: `ImportFieldServiceIntegrationSolution → IsSolutionOutdated`, `ImportFieldServiceIntegrationSolution → ProcessConnectionFailures`, `ImportFSSolution → CheckConnectRequiredFields`, …)
- [Codeunit 5343 "CRM Sales Order to Sales Order"](../codeunit/5343.md) (8 calls: `CRMIsCoupledToValidRecord → IsCRMIntegrationEnabled`, `GetCoupledCRMSalesorder → RemoveCoupling`, `GetCoupledSalesHeader → RemoveCoupling`, …)
- [Codeunit 5334 "CRM Setup Defaults"](../codeunit/5334.md) (7 calls: `GetTableIDCRMEntityNameMapping → IsUnitGroupMappingEnabled`, `ResetConfiguration → IsCRMSolutionInstalled`, `ResetConfiguration → IsUnitGroupMappingEnabled`, …)
- [Codeunit 7205 "CDS Int. Table. Subscriber"](../codeunit/7205.md) (6 calls: `HandleOnAfterInsertOption → IsCRMIntegrationEnabled`, `HandleOnAfterModifyOption → IsCRMIntegrationEnabled`, `OnTransferFieldData → IsUnitGroupMappingEnabled`, …)
- [Codeunit 5340 "CRM Integration Table Synch."](../codeunit/5340.md) (5 calls: `CloseConnection → OnCloseCDSConnection`, `CreateCRMIntegrationRecordClone → RepairBrokenCouplings`, `GetIntegrationUserId → OnGetCDSIntegrationUserId`, …)
- [Codeunit 7201 "CDS Integration Impl."](../codeunit/7201.md) (5 calls: `GetCRMEntityUrlFromCRMID → GetCRMEntityTypeName`, `ShowIntegrationUser → GetCRMEntityUrlFromCRMID`, `ShowOwningTeam → GetCRMEntityUrlFromCRMID`, …)
- [Table 5335 "Integration Table Mapping"](../table/5335.md) (5 calls: `DisableMultiCompanySynchronization → (object)`, `EnableMultiCompanySynchronization → (object)`, `EnableMultiCompanySynchronization → CheckSolutionVersionOutdated`, …)
- [Codeunit 49 "GlobalTriggerManagement"](../codeunit/49.md) (4 calls: `GetDatabaseTableTriggerSetup → GetDatabaseTableTriggerSetup`, `OnDatabaseInsert → OnDatabaseInsert`, `OnDatabaseModify → OnDatabaseModify`, …)
- [Page 1817 "CRM Connection Setup Wizard"](../page/1817.md) (4 calls: `FinalizeSetup → ImportCRMSolution`, `FinalizeSetup → InitializeCRMSynchStatus`, `InitializeDefaultProxyVersion → GetLastProxyVersionItem`, …)
- [Page 6612 "FS Connection Setup"](../page/6612.md) (4 calls: `InitializeDefaultProxyVersion → GetLastProxyVersionItem`, `OnInit → RegisterAssistedSetup`, `OnOpenPage → SendConnectionDisabledNotification`, …)
- [Table 5373 "CRM Full Synch. Review Line"](../table/5373.md) (4 calls: `GenerateCRMSynchReviewLines → (object)`, `GenerateCRMSynchReviewLines → IsCRMIntegrationEnabled`, `Start → EnqueueFullSyncJob`, …)
- [Codeunit 5331 "CRM Coupling Management"](../codeunit/5331.md) (3 calls: `DefineOptionMapping → CreateOptionMapping`, `RemoveCoupling → RemoveCoupling`, `RemoveSingleCoupling → RemoveCoupling`)
- [Codeunit 5346 "CRM Sales Document Posting Mgt"](../codeunit/5346.md) (3 calls: `CheckShippedOrders → (object)`, `PostCRMSalesDocumentOnAfterPostSalesDoc → (object)`, `SetSalesOrderIdsOnSalesHeaderDeletion → IsCRMIntegrationEnabled`)
- [Codeunit 5360 "CDS Int. Table Couple"](../codeunit/5360.md) (3 calls: `CoupleRecords → CreateNewRecordsInCRM`, `CoupleRecords → FindCoupledToCRMField`, `SynchronizeCoupledRecords → EnqueueSyncJob`)
- [Codeunit 5365 "CDS Int. Option Couple"](../codeunit/5365.md) (3 calls: `CoupleRecords → CreateNewOptionsInCRM`, `SynchronizeCoupledRecords → EnqueueOptionSyncJobFromIntegrationTable`, `SynchronizeCoupledRecords → EnqueueOptionSyncJobToIntegrationTable`)
- [Codeunit 6610 "FS Int. Table Subscriber"](../codeunit/6610.md) (3 calls: `HandleOnAfterApplyUsage → (object)`, `HandleOnAfterPostJnlLines → (object)`, `OnEnsureConnectionSetupIsDisabled → CheckCRMConnectionURL`)
- [Page 21 "Customer Card"](../page/21.md) (3 calls: `OnAfterGetCurrRecordFunc → SendResultNotification`, `OnOpenPageFunc → IsCDSIntegrationEnabled`, `OnOpenPageFunc → IsCRMIntegrationEnabled`)
- [Page 495 "Currency Card"](../page/495.md) (3 calls: `OnAfterGetCurrRecord → SendResultNotification`, `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5050 "Contact Card"](../page/5050.md) (3 calls: `OnAfterGetCurrRecord → SendResultNotification`, `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5116 "Salesperson/Purchaser Card"](../page/5116.md) (3 calls: `OnAfterGetCurrRecord → SendResultNotification`, `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5329 "CRM Redirect"](../page/5329.md) (3 calls: `OnFindRecord → OpenCoupledNavRecordPage`, `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5330 "CRM Connection Setup"](../page/5330.md) (3 calls: `InitializeDefaultProxyVersion → GetLastProxyVersionItem`, `OnInit → RegisterAssistedSetup`, `OnOpenPage → SendConnectionDisabledNotification`)
- [Page 5360 "CRM Statistics FactBox"](../page/5360.md) (3 calls: `GetNoOfCRMCases → GetNoOfCRMCases`, `GetNoOfCRMOpportunities → GetNoOfCRMOpportunities`, `GetNoOfCRMQuotes → GetNoOfCRMQuotes`)
- [Page 6613 "FS Connection Setup Wizard"](../page/6613.md) (3 calls: `FinalizeSetup → CheckCRMConnectionURL`, `InitializeDefaultProxyVersion → GetLastProxyVersionItem`, `OnOpenPage → CheckCRMConnectionURL`)
- [Page 7209 "CDS Couple Salespersons"](../page/7209.md) (3 calls: `OnInit → (object)`, `ScheduleSalespersonsCoupling → CoupleCRMEntity`, `ScheduleUncoupledUsersSynch → CreateNewRecordsFromSelectedCRMRecords`)
- [Table 5374 "CRM Synch. Conflict Buffer"](../table/5374.md) (3 calls: `RestoreDeletedRecords → CreateNewRecords`, `UncoupleIntegrationRecords → RemoveCoupling`, `UncoupleLocalRecords → RemoveCoupling`)
- [Codeunit 5350 "CRM Statistics Job"](../codeunit/5350.md) (2 calls: `InitializeCustomerStatisticsSynchronizationTime → InitializeCRMSynchStatus`, `UpdateStatusOfPaidInvoices → InitializeCRMSynchStatus`)
- [Codeunit 5352 "CRM Order Status Update Job"](../codeunit/5352.md) (2 calls: `FindCoupledCRMAccount → IsCRMIntegrationEnabled`, `FindCoupledCRMSalesOrder → IsCRMIntegrationEnabled`)
- [Codeunit 5356 "CRM Item Availability Job"](../codeunit/5356.md) (2 calls: `CheckItemLedgerEntries → EnqueueSyncJob`, `CheckItemLedgerEntries → IsCRMIntegrationEnabled`)
- [Codeunit 5367 "CRM Update Unit Group Mapping"](../codeunit/5367.md) (2 calls: `OnRun → UpdateItemUnitGroup`, `OnRun → UpdateResourceUnitGroup`)
- [Codeunit 6277 "Sust. Setup Defaults"](../codeunit/6277.md) (2 calls: `ResetConfiguration → IsCDSIntegrationEnabled`, `ResetConfiguration → IsCRMIntegrationEnabled`)
- [Page 132 "Posted Sales Invoice"](../page/132.md) (2 calls: `OnAfterGetCurrRecord → SendResultNotification`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 14 "Salespersons/Purchasers"](../page/14.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 209 "Units of Measure"](../page/209.md) (2 calls: `OnOpenPage → IsCRMIntegrationEnabled`, `OnOpenPage → IsUnitGroupMappingEnabled`)
- [Page 210 "Resource Units of Measure"](../page/210.md) (2 calls: `OnOpenPage → IsCRMIntegrationEnabled`, `OnOpenPage → IsUnitGroupMappingEnabled`)
- [Page 22 "Customer List"](../page/22.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 26 "Vendor Card"](../page/26.md) (2 calls: `OnOpenPageFunc → IsCDSIntegrationEnabled`, `OnOpenPageFunc → IsCRMIntegrationEnabled`)
- [Page 27 "Vendor List"](../page/27.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 30 "Item Card"](../page/30.md) (2 calls: `OnAfterGetCurrRecordFunc → SendResultNotification`, `OnOpenPageFunc → IsCRMIntegrationEnabled`)
- [Page 5 "Currencies"](../page/5.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5052 "Contact List"](../page/5052.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5333 "CRM Skipped Records"](../page/5333.md) (2 calls: `LoadData → IsCDSIntegrationEnabled`, `LoadData → IsCRMIntegrationEnabled`)
- [Page 5335 "Integration Table Mapping List"](../page/5335.md) (2 calls: `SetCDSIntegrationEnabledState → IsCDSIntegrationEnabled`, `SetCRMIntegrationEnabledState → IsCRMIntegrationEnabled`)
- [Page 5339 "Integration Synch. Error List"](../page/5339.md) (2 calls: `OnOpenPage → IsCDSIntegrationEnabled`, `OnOpenPage → IsCRMIntegrationEnabled`)
- [Page 5340 "CRM Systemuser List"](../page/5340.md) (2 calls: `LinkUsersToSalespersons → CoupleCRMEntity`, `OnInit → (object)`)
- [Page 5362 "CRM UnitGroup List"](../page/5362.md) (2 calls: `OnAfterGetRecord → IsUnitGroupMappingEnabled`, `OnInit → (object)`)
- [Page 5400 "Item Unit Group List"](../page/5400.md) (2 calls: `OnOpenPage → IsCRMIntegrationEnabled`, `OnOpenPage → IsUnitGroupMappingEnabled`)
- [Page 5403 "Resource Unit Group List"](../page/5403.md) (2 calls: `OnOpenPage → IsCRMIntegrationEnabled`, `OnOpenPage → IsUnitGroupMappingEnabled`)
- and 91 more: data/code/graph/29/calls.json

## Recent changes

- 2026-10-06 [#12261 Stop repeated rescheduling of Dataverse synch jobs on bulk changes](../../changes/bcapps/12261.md) (main, BC30, fix)
- 2026-09-22 [#11171 [Security][Hardening] Validate integration URLs stored in setup tables](../../changes/bcapps/11171.md) (main, BC30, fix)
- 2026-08-28 [#10578 [Extensibility Request] issue 30429: add events to disambiguate CRM integration table mappings](../../changes/bcapps/10578.md) (main, BC30, feature)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-26, BC28-30

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: "CRM Integration Management")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
