---
id: object/codeunit/7249
type: object
title: Codeunit 7249 "MDM Cross-Env Data Source"
summary: Codeunit 7249 "MDM Cross-Env Data Source" in MasterDataManagement (Microsoft.Integration.MDM). 9 public procedures, 1 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - masterdatamanagement
versions:
  introduced: "29"
  last_changed: null
  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: 2ff4bc011ab3b9ac9b7f5c79773c97262652691061d8dbef7781e2ebdacc4cce
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/MasterDataManagement/app/src/codeunits/MDMCrossEnvDataSource.Codeunit.al
    title: src/Apps/W1/MasterDataManagement/app/src/codeunits/MDMCrossEnvDataSource.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/11626
    - change/bcapps/10753
object_type: codeunit
object_id: 7249
name: MDM Cross-Env Data Source
namespace: Microsoft.Integration.MDM
app: MasterDataManagement
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in: []
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 35
  events: 1
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 6
  called_by: 3
  implements: 1
---

# Codeunit 7249 "MDM Cross-Env Data Source"

> Codeunit 7249 "MDM Cross-Env Data Source" in MasterDataManagement (Microsoft.Integration.MDM). 9 public procedures, 1 events. Introduced in BC29, still in BC30.

MasterDataManagement · Microsoft.Integration.MDM · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/MasterDataManagement/app/src/codeunits/MDMCrossEnvDataSource.Codeunit.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| Access | Internal |

## Events published

- `OnGetCrossEnvPageSize(var PageSize: Integer)` (internal)

## Procedures

- `GetModifiedSet(IntegrationTableMapping: Record "Integration Table Mapping"; TableFilter: Text; var SourceRecordRef: RecordRef): Boolean`
- `GetByFilter(IntegrationTableMapping: Record "Integration Table Mapping"; TableFilter: Text; var SourceRecordRef: RecordRef): Boolean`
- `GetModifiedBatch(IntegrationTableMapping: Record "Integration Table Mapping"; TableFilter: Text; StartCursor: Text; MaxPages: Integer; var SourceRecordRef: RecordRef; var EndCursor: Text; var HasMore: Boolean): Boolean` (internal): Fetches at most MaxPages pages of changed source records starting from StartCursor (a cursor selector). MaxPages = 0 means unbounded. On return EndCursor holds the resume point and HasMore tells the caller whether more pages remain past the cap, so the next job run can continue from where this one s...
- `SourceHasRecords(IntegrationTableMapping: Record "Integration Table Mapping"; TableFilter: Text): Boolean` (internal): Cheap existence probe for the full-synch review: the source reports an empty lastModifiedAt for an empty table, so this avoids counting the whole table over the wire.
- `GetBySystemId(IntegrationTableId: Integer; SystemId: Guid; var SourceRecordRef: RecordRef): Boolean`
- `GetById(IntegrationTableMapping: Record "Integration Table Mapping"; ID: Variant; var SourceRecordRef: RecordRef): Boolean`
- `GetByUidFilter(IntegrationTableMapping: Record "Integration Table Mapping"; UidFilter: Text; var SourceRecordRef: RecordRef): Boolean`
- `GetSourceRecordsByFilter(TableId: Integer; RowFilter: Text; var SourceRecordRef: RecordRef): Boolean` (internal)
- `TryBulkGetSourceRecordsByFilter(TableId: Integer; RowFilter: Text; var SourceRecordRef: RecordRef; var NotIndexed: Boolean): Boolean` (internal)

Plus 25 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 7248 "MDM Source Response"](../codeunit/7248.md) (23 calls: `FetchBySystemIds → InsertRecords`, `GetModifiedBatch → GetNextCursor`, `GetModifiedBatch → HasMore`, …)
- [Codeunit 7246 "MDM Source Capabilities"](../codeunit/7246.md) (6 calls: `FetchBySystemIds → EnsureSupported`, `GetModifiedBatch → EnsureSupported`, `GetSourceRecordsByFilter → EnsureSupported`, …)
- [Codeunit 7233 "Master Data Management"](../codeunit/7233.md) (3 calls: `LogConsentRequired → GetTelemetryCategory`, `LogParseFailure → GetTelemetryCategory`, `LogProbeFailure → GetTelemetryCategory`)
- [Codeunit 7232 "MDM Inline Media"](../codeunit/7232.md) (1 call: `GetModifiedBatch → Reset`)
- [Codeunit 7239 "MDM Source Watermark"](../codeunit/7239.md) (1 call: `GetModifiedBatch → Reset`)
- [Codeunit 7244 "MDM Source Connection"](../codeunit/7244.md) (1 call: `GetTransport → GetTransport`)

## Called by

- [Codeunit 7234 "MDM Contact Relation Cache"](../codeunit/7234.md) (3 calls: `LoadLinkType → TryBulkGetSourceRecordsByFilter`, `ReadSingleContactNo → GetSourceRecordsByFilter`, `ReadSingleRelationNo → GetSourceRecordsByFilter`)
- [Codeunit 7231 "Integration Master Data Synch."](../codeunit/7231.md) (1 call: `FindModifiedCrossEnvironmentRecords → GetModifiedBatch`)
- [Codeunit 7233 "Master Data Management"](../codeunit/7233.md) (1 call: `GetIntegrationRecRefCount → SourceHasRecords`)

## Implements

- [Interface "IMDM Data Source"](../interface/imdm-data-source.md)

## Recent changes

- 2026-09-22 [#11626 [Master Data Management] Fixing synchronization of contacts, media, date, datetime, source watermarking, permission issue and minor UX issues](../../changes/bcapps/11626.md) (main, BC30, fix)
- 2026-09-10 [#10753 Cross-environment Master Data synchronization (same tenant)](../../changes/bcapps/10753.md) (main, BC30, feature, added)

## Across versions

- Present in: BC29-30
- Changed (declaration) in: none

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: "MDM Cross-Env Data Source")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
