---
id: video/PHmFqehrPG4
type: video
title: "What's New: AL - Interfaces (2024 release wave 2)"
summary: "AL interface extension in the 2024 release wave 2: how to extend an existing interface without breaking existing implementations, and how to use the new is and as operators for type checking and casting. Shown with a shipping cost calculator sample app using a provider model."
tier: official
language: en
tags:
  - interfaces
  - extensibility
  - interface extension
  - type checking
  - casting
  - provider model
  - enum
  - codeunit
system: development
review:
  state: reviewed
  by: opus
  at: "2026-10-07T23:05:27.274Z"
  flags: []
generated:
  at: "2026-10-07T23:05:27.326Z"
  pipeline: 0.2.0
  prompts:
    extract-video: 1
    summarize-video: 2
  input_hash: 23e57657a52fe57cc510c59fea29a5e56dee34b19c3561fd6701618c98af452c
evidence:
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=20s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 20
    quote: it is more than four years since we first released interfaces in Al and although it was integrated with voms from for extensibility from
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=378s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 378
    quote: what we would like to do is add a new myth to the interface but that breaks all the existing provider apps because they
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=456s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 456
    quote: all we want is just to extend the existing interface without changing or breaking everything so what we have now introduced is a way
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=496s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 496
    quote: this is one of the new features extending interfaces syntax is you have the normal interface declaration and then you add extend and then
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=638s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 638
    quote: if provider is express shipping provider it's a it's a Boolean expression that tests if the provider also implements I express shipping provider
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=708s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 708
    quote: we have added a i an unknown interface that you can use that gives a common ground for anyone who wants this kind of
  - kind: video
    url: https://www.youtube.com/watch?v=PHmFqehrPG4&t=774s
    title: "What's New: AL - Interfaces (2024 release wave 2)"
    date: "2024-10-08T15:00:24.000Z"
    commit: null
    t: 774
    quote: cannot be cast to the right side you will get an error and this is why you should in most cases check first
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
video_id: PHmFqehrPG4
channel: yt-microsoft
source_name: Microsoft Dynamics 365 Business Central (YouTube)
url: https://www.youtube.com/watch?v=PHmFqehrPG4
published_at: "2024-10-08T15:00:24.000Z"
duration_s: 885
captions: full
audience:
  - developer
chapters:
  - t: 0
    title: Introduction and Sample App Overview
  - t: 54
    title: Shipping Cost Calculator UI and Architecture
  - t: 105
    title: Interface, Enum and Orchestrator Code Structure
  - t: 207
    title: Provider Implementation and Architecture Diagram
  - t: 310
    title: Limitations of the Current Interface Model
  - t: 416
    title: Interface Extension Feature - Syntax and Benefits
  - t: 527
    title: Implementing Extended Interfaces in Code
  - t: 602
    title: Type Checking and Casting with Is and As Operators
  - t: 788
    title: Live Demo of Extended Interfaces
  - t: 840
    title: Conclusion and Summary
features:
  - name: Interface Extension
    status: unclear
    t: 456
    verified: false
    status_source: video
  - name: Type Checking with Is Operator for Interfaces
    status: unclear
    t: 602
    verified: false
    status_source: video
  - name: Interface Casting with As Operator
    status: unclear
    t: 659
    verified: false
    status_source: video
  - name: Unknown Interface Type
    status: unclear
    t: 692
    verified: false
    status_source: video
objects_mentioned:
  - interface I shipping provider
  - enum shipping vendor
  - codeunit shipping cost orchestrator
  - codeunit standard shipping provider
  - interface I express shipping provider
  - interface I unknown interface
quotes:
  - t: 20
    text: it is more than four years since we first released interfaces in Al and although it was integrated with voms from for extensibility from
    check: exact
  - t: 378
    text: what we would like to do is add a new myth to the interface but that breaks all the existing provider apps because they
    check: exact
  - t: 456
    text: all we want is just to extend the existing interface without changing or breaking everything so what we have now introduced is a way
    check: exact
  - t: 496
    text: this is one of the new features extending interfaces syntax is you have the normal interface declaration and then you add extend and then
    check: exact
  - t: 638
    text: if provider is express shipping provider it's a it's a Boolean expression that tests if the provider also implements I express shipping provider
    check: exact
  - t: 708
    text: we have added a i an unknown interface that you can use that gives a common ground for anyone who wants this kind of
    check: exact
  - t: 774
    text: cannot be cast to the right side you will get an error and this is why you should in most cases check first
    check: exact
---

# What's New: AL - Interfaces (2024 release wave 2)

> AL interface extension in the 2024 release wave 2: how to extend an existing interface without breaking existing implementations, and how to use the new is and as operators for type checking and casting. Shown with a shipping cost calculator sample app using a provider model.

[Watch on YouTube](https://www.youtube.com/watch?v=PHmFqehrPG4) · Microsoft Dynamics 365 Business Central (YouTube) · 2024-10-08 · 14:45 · tier official · reviewed (checked by Opus)

## Overview

The video builds on a shipping cost calculator sample app made of an interface, an enum, an orchestrator codeunit and provider codeunits. It uses the app to show the limit of the current interface model: adding a method to an interface breaks every existing provider app that implements it.

## Key points

- Interfaces were first released in AL more than four years before this video, integrated with enums for extensibility.
- Adding a new method to an existing interface breaks all existing provider apps that implement it.
- Interface extension creates a new interface that extends an existing one; the syntax is the normal interface declaration plus the extends keyword.
- Implementors must implement all methods from all extended interfaces. Existing enums are not changed, so old implementations keep working.
- The is operator is a Boolean expression that tests whether an interface instance also implements another interface. Its left side must be an interface instance or a variant.
- The as operator casts an interface instance to another interface type and errors if the cast is not possible, so check with is first.
- A new common base interface, unknown interface, was added to the system application for generic checks on whether an unknown interface implements a specific interface.

## Chapters

- [0:00](https://www.youtube.com/watch?v=PHmFqehrPG4&t=0s) Introduction and Sample App Overview
- [0:54](https://www.youtube.com/watch?v=PHmFqehrPG4&t=54s) Shipping Cost Calculator UI and Architecture
- [1:45](https://www.youtube.com/watch?v=PHmFqehrPG4&t=105s) Interface, Enum and Orchestrator Code Structure
- [3:27](https://www.youtube.com/watch?v=PHmFqehrPG4&t=207s) Provider Implementation and Architecture Diagram
- [5:10](https://www.youtube.com/watch?v=PHmFqehrPG4&t=310s) Limitations of the Current Interface Model
- [6:56](https://www.youtube.com/watch?v=PHmFqehrPG4&t=416s) Interface Extension Feature - Syntax and Benefits
- [8:47](https://www.youtube.com/watch?v=PHmFqehrPG4&t=527s) Implementing Extended Interfaces in Code
- [10:02](https://www.youtube.com/watch?v=PHmFqehrPG4&t=602s) Type Checking and Casting with Is and As Operators
- [13:08](https://www.youtube.com/watch?v=PHmFqehrPG4&t=788s) Live Demo of Extended Interfaces
- [14:00](https://www.youtube.com/watch?v=PHmFqehrPG4&t=840s) Conclusion and Summary

## Features

| Feature | Status | At |
|---|---|---|
| Interface Extension | status not stated, demoed | [7:36](https://www.youtube.com/watch?v=PHmFqehrPG4&t=456s) |
| Type Checking with Is Operator for Interfaces | status not stated, demoed | [10:02](https://www.youtube.com/watch?v=PHmFqehrPG4&t=602s) |
| Interface Casting with As Operator | status not stated, demoed | [10:59](https://www.youtube.com/watch?v=PHmFqehrPG4&t=659s) |
| Unknown Interface Type | status not stated | [11:32](https://www.youtube.com/watch?v=PHmFqehrPG4&t=692s) |

## AL objects mentioned

As heard in the captions. A name that matches one object page by exact type and name links to it; the others stay as named.

- interface "I shipping provider" at [2:26](https://www.youtube.com/watch?v=PHmFqehrPG4&t=146s)
- enum "shipping vendor" at [3:06](https://www.youtube.com/watch?v=PHmFqehrPG4&t=186s)
- codeunit "shipping cost orchestrator" at [3:27](https://www.youtube.com/watch?v=PHmFqehrPG4&t=207s)
- codeunit "standard shipping provider" at [4:27](https://www.youtube.com/watch?v=PHmFqehrPG4&t=267s)
- interface "I express shipping provider" at [7:56](https://www.youtube.com/watch?v=PHmFqehrPG4&t=476s)
- interface "I unknown interface" at [11:48](https://www.youtube.com/watch?v=PHmFqehrPG4&t=708s)

Not found in BC28-30: interface "I shipping provider", enum "shipping vendor", codeunit "shipping cost orchestrator", codeunit "standard shipping provider", interface "I express shipping provider", interface "I unknown interface".

## Quotes

- [0:20](https://www.youtube.com/watch?v=PHmFqehrPG4&t=20s) "it is more than four years since we first released interfaces in Al and although it was integrated with voms from for extensibility from"
- [6:18](https://www.youtube.com/watch?v=PHmFqehrPG4&t=378s) "what we would like to do is add a new myth to the interface but that breaks all the existing provider apps because they"
- [7:36](https://www.youtube.com/watch?v=PHmFqehrPG4&t=456s) "all we want is just to extend the existing interface without changing or breaking everything so what we have now introduced is a way"
- [8:16](https://www.youtube.com/watch?v=PHmFqehrPG4&t=496s) "this is one of the new features extending interfaces syntax is you have the normal interface declaration and then you add extend and then"
- [10:38](https://www.youtube.com/watch?v=PHmFqehrPG4&t=638s) "if provider is express shipping provider it's a it's a Boolean expression that tests if the provider also implements I express shipping provider"
- [11:48](https://www.youtube.com/watch?v=PHmFqehrPG4&t=708s) "we have added a i an unknown interface that you can use that gives a common ground for anyone who wants this kind of"
- [12:54](https://www.youtube.com/watch?v=PHmFqehrPG4&t=774s) "cannot be cast to the right side you will get an error and this is why you should in most cases check first"

Presenters (as heard): Esp new Christopherson.
