---
id: object/codeunit/2503
type: object
title: Codeunit 2503 "Extension Operation Impl"
summary: Codeunit 2503 "Extension Operation Impl" in System Application (System.Apps). 30 public procedures. Present since at least BC23, still in BC30, changed in BC28, BC30.
tier: official
language: en
tags:
  - codeunit
  - system 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: 0cd0da08dd421445bd5fe884f93a7c0300fdbe2f119cdeb4053eb2105890f0e7
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/System%20Application/App/Extension%20Management/src/ExtensionOperationImpl.Codeunit.al
    title: src/System Application/App/Extension Management/src/ExtensionOperationImpl.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/11065
    - change/bcapps/9569
object_type: codeunit
object_id: 2503
name: Extension Operation Impl
namespace: System.Apps
app: System Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "28"
  - "30"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 33
  events: 0
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 4
  called_by: 5
  implements: 0
---

# Codeunit 2503 "Extension Operation Impl"

> Codeunit 2503 "Extension Operation Impl" in System Application (System.Apps). 30 public procedures. Present since at least BC23, still in BC30, changed in BC28, BC30.

System Application · System.Apps · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/System%20Application/App/Extension%20Management/src/ExtensionOperationImpl.Codeunit.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| Access | Internal |
| SingleInstance | false |
| Permissions | tabledata Media = r, tabledata "NAV App Setting" = rm, tabledata "NAV App Tenant Operation" = r, tabledata "Published Application" = r |

## Procedures

- `DeployExtension(AppId: Guid; lcid: Integer; IsUIEnabled: Boolean; PreviewKey: Text)`
- `UploadExtension(PackageInStream: InStream; lcid: Integer)`
- `DeployAndUploadExtension(PackageInStream: InStream; lcid: Integer; DeployTo: Enum "Extension Deploy To"; SyncMode: Enum "Extension Sync Mode")`
- `UnpublishExtension(PackageID: Guid): Boolean`
- `UnpublishUninstalledPerTenantExtension(PackageID: Guid)`
- `GetExtensionSource(PackageId: Guid; var ExtensionSourceTempBlob: Codeunit "Temp Blob"; var CleanFileName: Text): Boolean`
- `DownloadExtensionSource(PackageId: Guid): Boolean`
- `DownloadDeploymentStatusDetails(OperationId: Guid)`
- `RefreshStatus(OperationID: Guid)`
- `ConfigureExtensionHttpClientRequestsAllowance(PackageId: Text; AreHttpClientRqstsAllowed: Boolean): Boolean`
- `GetAllExtensionDeploymentStatusEntries(var TempExtensionDeploymentStatus: Record "Extension Deployment Status" temporary)`
- `GetDeploymentDetailedStatusMessageAsStream(OperationId: Guid; OutStream: OutStream)`
- `GetDeploymentDetailedStatusMessage(OperationId: Guid): Text`
- `GetDeployOperationInfo(OperationId: Guid; var Version: Text; var Schedule: Text; var Publisher: Text; var AppName: Text; Description: Text)`
- `GetDeployOperationInfo(OperationId: Guid; var Version: Text; var Publisher: Text; var AppName: Text; var AppId: Guid)`
- `GetDeployOperationAppId(OperationId: Guid): Guid`
- `GetDeployOperationAppName(OperationId: Guid): Text`
- `GetDeployOperationAppPublisher(OperationId: Guid): Text`
- `GetDeployOperationAppVersion(OperationId: Guid): Text`
- `GetDeployOperationSchedule(OperationId: Guid): Text`
- `GetDeployOperationJobId(OperationId: Guid): Text`
- `GetLatestVersionPackageIdByAppId(AppId: Guid): Guid`
- `GetCurrentlyInstalledVersionPackageIdByAppId(AppId: Guid): Guid`
- `GetSpecificVersionPackageIdByAppId(AppId: Guid; Name: Text; VersionMajor: Integer; VersionMinor: Integer; VersionBuild: Integer; VersionRevision: Integer): Guid`
- `GetExtensionLogo(AppId: Guid; var Logo: Codeunit "Temp Blob")`
- `GetAppName(AppId: Guid): Text`
- `HandleOrphanedDataNotification(Notif: Notification)`
- `MarkOrphanedDataAsReviewed(Notif: Notification)`
- `MarkAllOrphanedExtensionDataAsReviewed()` (internal)
- `GetAppName(AppId: Guid; OperationId: Guid): Text` (internal)

Plus 3 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 4100 "Temp Blob"](../codeunit/4100.md) (5 calls: `DownloadDeploymentStatusDetails → CreateInStream`, `DownloadDeploymentStatusDetails → CreateOutStream`, `DownloadExtensionSource → CreateInStream`, …)
- [Codeunit 2500 "Extension Installation Impl"](../codeunit/2500.md) (3 calls: `CheckPermissions → CheckPermissions`, `GetExtensionSource → GetVersionDisplayString`, `UnpublishExtension → IsInstalledByPackageId`)
- [Codeunit 2501 "Extension Marketplace"](../codeunit/2501.md) (1 call: `DeployExtension → RunSetupForExtension`)
- [Page 2514 "Delete Orphaned Extension Data"](../page/2514.md) (1 call: `HandleOrphanedDataNotification → (object)`)

## Called by

- [Codeunit 2504 "Extension Management"](../codeunit/2504.md) (16 calls: `ConfigureExtensionHttpClientRequestsAllowance → ConfigureExtensionHttpClientRequestsAllowance`, `DeployExtension → DeployExtension`, `DownloadExtensionSource → DownloadExtensionSource`, …)
- [Codeunit 2501 "Extension Marketplace"](../codeunit/2501.md) (2 calls: `InstallMarketplaceExtension → DeployExtension`, `InstallMarketplaceExtension → GetLatestVersionPackageIdByAppId`)
- [Page 2505 "Extn. Installation Progress"](../page/2505.md) (2 calls: `NeedToWait → RefreshStatus`, `OnQueryClosePage → RefreshStatus`)
- [Page 2508 "Extension Deployment Status"](../page/2508.md) (2 calls: `OnAfterGetRecord → GetDeployOperationInfo`, `OnAfterGetRecord → RefreshStatus`)
- [Page 2509 "Extn Deployment Status Detail"](../page/2509.md) (2 calls: `OnAfterGetCurrRecord → GetDeployOperationInfo`, `OnAfterGetCurrRecord → RefreshStatus`)

## Recent changes

- 2026-09-07 [#11065 Open installation status after AppSource install failure](../../changes/bcapps/11065.md) (main, BC30, feature)
- 2026-07-23 [#9569 Enforce permissions when reviewing orphaned extension data](../../changes/bcapps/9569.md) (main, BC30, fix)

## Across versions

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

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: "Extension Operation Impl")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
