---
id: object/codeunit/905
type: object
title: Codeunit 905 "Assembly Line Management"
summary: Codeunit 905 "Assembly Line Management" in Base Application (Microsoft.Assembly.Document). 17 public procedures, 30 events, 1 event subscribers. Present since at least BC23, still in BC30, changed in BC24-28.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "28"
  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: cf0b8f66511b4d4b223d6b088ff9e601f99958e2595484cd3f1d26cb212b4200
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al
    title: src/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 905
name: Assembly Line Management
namespace: Microsoft.Assembly.Document
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"
  - "27"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 70
  events: 30
  subscribers: 1
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 2
  calls: 4
  called_by: 5
  implements: 0
---

# Codeunit 905 "Assembly Line Management"

> Codeunit 905 "Assembly Line Management" in Base Application (Microsoft.Assembly.Document). 17 public procedures, 30 events, 1 event subscribers. Present since at least BC23, still in BC30, changed in BC24-28.

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

## Properties

| Property | Value |
|---|---|
| Permissions | TableData "Assembly Line" = rimd |

## Events published

- `OnAfterCalcEarliestDueDate(var AsmHeader: Record "Assembly Header")` (integration)
- `OnAddBOMLineOnAfterValidateUOMCode(var AssemblyLine: Record "Assembly Line"; BOMComponent: Record "BOM Component"; AssemblyHeader: Record "Assembly Header")` (integration)
- `OnAddBOMLineOnBeforeValidateQuantity(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; BOMComponent: Record "BOM Component"; var IsHandled: Boolean; QtyPerUoM: Decimal)` (integration)
- `OnAddBOMLineOnAfterValidatedNo(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; BOMComponent: Record "BOM Component")` (integration)
- `OnAfterSetLinkToBOM(var BOMComponent: Record "BOM Component"; var AssemblyHeader: Record "Assembly Header")` (integration)
- `OnAfterTransferBOMComponent(var AssemblyLine: Record "Assembly Line"; BOMComponent: Record "BOM Component"; AssemblyHeader: Record "Assembly Header")` (integration)
- `OnBeforeReplaceAssemblyLines(AssemblyHeader: Record "Assembly Header"; var TempAssemblyLine: Record "Assembly Line" temporary; var IsHandled: Boolean)` (integration)
- `OnBeforeShowAvailability(var TempAssemblyHeader: Record "Assembly Header" temporary; var TempAssemblyLine: Record "Assembly Line" temporary; ShowPageEvenIfEnoughComponentsAvailable: Boolean; var IsHandled: Boolean; var RollBack: Boolean; WarningModeOff: Boolean)` (integration)
  - subscribers: [Codeunit 30220 "Shpfy Suppress Asm Warning"](../codeunit/30220.md) BeforeShowAvailability
- `OnShowAvailabilityOnAfterCalcQtyAvailTooLow(var TempAssemblyHeader: Record "Assembly Header" temporary; var TempAssemblyLine: Record "Assembly Line" temporary; ShowPageEvenIfEnoughComponentsAvailable: Boolean; QtyAvailToMake: Decimal; EarliestAvailableDate: Date; var QtyAvailTooLow: Boolean; var RollBack: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAssemblyLines(var AsmHeader: Record "Assembly Header"; OldAsmHeader: Record "Assembly Header"; FieldNum: Integer; ReplaceLinesFromBOM: Boolean; CurrFieldNo: Integer; CurrentFieldNum: Integer; var IsHandled: Boolean; HideValidationDialog: Boolean)` (integration)
- `OnAfterUpdateAssemblyLines(var AsmHeader: Record "Assembly Header"; OldAsmHeader: Record "Assembly Header"; FieldNum: Integer; ReplaceLinesFromBOM: Boolean; CurrFieldNo: Integer; CurrentFieldNum: Integer)` (integration)
  - subscribers: [Codeunit 6255 "Sust. Assembly Subscriber"](../codeunit/6255.md) OnAfterUpdateAssemblyLines
- `OnBeforeUpdateExistingLine(var AsmHeader: Record "Assembly Header"; OldAsmHeader: Record "Assembly Header"; CurrFieldNo: Integer; var AssemblyLine: Record "Assembly Line"; UpdateDueDate: Boolean; UpdateLocation: Boolean; UpdateQuantity: Boolean; UpdateUOM: Boolean; UpdateQtyToConsume: Boolean; UpdateDimension: Boolean; var IsHandled: Boolean)` (integration)
- `OnUpdateExistingLineOnBeforeModifyAssemblyLine(var AssemblyHeader: Record "Assembly Header"; OldAssemblyHeader: Record "Assembly Header"; CurrentFieldNo: Integer; var AssemblyLine: Record "Assembly Line"; UpdateDueDate: Boolean; UpdateLocation: Boolean; UpdateQuantity: Boolean; UpdateUOM: Boolean; UpdateQtyToConsume: Boolean; UpdateDimension: Boolean)` (integration)
- `OnBeforeCalcEarliestDueDate(var AsmHeader: Record "Assembly Header")` (integration)
- `OnBeforeCreateWhseItemTrkgForAsmLines(var AsmHeader: Record "Assembly Header"; var IsHandled: Boolean)` (integration)
- `OnBeforeCalcTempAssemblyLineQuantityRelatedFields(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; FromAssemblyLine: Record "Assembly Line"; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateQuantityToConsume(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; var QtyToConsume: Decimal; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAssemblyLineLocationCode(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateAssemblyLineQuantity(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; var QtyRatio: Decimal; var IsHandled: Boolean)` (integration)
- `OnCopyAssemblyDataOnAfterToAssemblyLineInsert(var AssemblyLine: Record "Assembly Line"; var ToAssemblyLine: Record "Assembly Line"; var ToAssemblyHeader: Record "Assembly Header")` (integration)
- `OnDoVerificationsSkippedEarlierOnAfterTempNewAsmLineModify(var AssemblyLine: Record "Assembly Line")` (integration)
- `OnExplodeAsmListOnAfterToAssemblyLineInsert(var FromAssemblyLine: Record "Assembly Line"; var ToAssemblyLine: Record "Assembly Line")` (integration)
- `OnExplodeAsmListOnAfterToAssemblyLineModify(var FromAssemblyLine: Record "Assembly Line"; var ToAssemblyLine: Record "Assembly Line")` (integration)
- `OnUpdateAssemblyLinesOnBeforeAutoReserveAsmLine(var AssemblyLine: Record "Assembly Line"; ReplaceLinesFromBOM: Boolean)` (integration)
- `OnUpdateAssemblyLinesOnAfterCalcShouldReplaceAsmLines(AssemblyHeader: Record "Assembly Header"; TempAssemblyLine: Record "Assembly Line" temporary; var ShouldReplaceAsmLines: Boolean)` (integration)
- `OnUpdateAssemblyLinesOnAfterCopyAssemblyData(var AssemblyLine: Record "Assembly Line"; var ReplaceLinesFromBOM: Boolean)` (integration)
- `OnBeforeCreateAndSendNotification(var AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; var IsHandled: Boolean; var Rollback: Boolean)` (integration)
- `OnAvailToPromiseOnBeforeAssignOrderAbleToAssemble(var AssemblyLine: Record "Assembly Line"; var IsHandled: Boolean)` (integration)
- `OnBeforeShowDueDateBeforeWorkDateMsg(ActualLineDueDate: Date; var IsHandled: Boolean)` (integration)
- `OnPreCheckAndConfirmUpdateOnElseOnBeforeResetLinesConfirmDialog(var AssemblyHeader: Record "Assembly Header"; OldAssemblyHeader: Record "Assembly Header"; FieldNum: Integer; var ReplaceLinesFromBOM: Boolean; var SkipReplaceLinesConfirmation: Boolean)` (integration)

## Event subscriptions

- OnInitializingNotificationWithDefaultState subscribes to Page "My Notifications" OnInitializingNotificationWithDefaultState

## Procedures

- `GetNextAsmLineNo(var AsmLine: Record "Assembly Line"; AsmLineRecordIsTemporary: Boolean): Integer`
- `InsertAsmLine(AsmHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; AsmLineRecordIsTemporary: Boolean)`
- `AddBOMLine(AssemblyHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; AsmLineRecordIsTemporary: Boolean; BOMComponent: Record "BOM Component"; ShowDueDateBeforeWorkDateMessage: Boolean; QtyPerUoM: Decimal)`
- `AddBOMLine(AsmHeader: Record "Assembly Header"; var AssemblyLine: Record "Assembly Line"; BOMComponent: Record "BOM Component")`
- `ExplodeAsmList(var AssemblyLine: Record "Assembly Line")`
- `UpdateWarningOnLines(AsmHeader: Record "Assembly Header")`
- `UpdateAssemblyLines(var AsmHeader: Record "Assembly Header"; OldAsmHeader: Record "Assembly Header"; FieldNum: Integer; ReplaceLinesFromBOM: Boolean; CurrFieldNo: Integer; CurrentFieldNum: Integer)`
- `ShowDueDateBeforeWorkDateMsg(ActualLineDueDate: Date)`
- `CopyAssemblyData(FromAssemblyHeader: Record "Assembly Header"; var ToAssemblyHeader: Record "Assembly Header"; var ToAssemblyLine: Record "Assembly Line"): Integer`
- `ShowAvailability(ShowPageEvenIfEnoughComponentsAvailable: Boolean; var TempAssemblyHeader: Record "Assembly Header" temporary; var TempAssemblyLine: Record "Assembly Line" temporary): Boolean`
- `ShowNotificationDetails(AvailabilityCheckNotification: Notification)`
- `DeactivateNotification(SetupNotification: Notification)`
- `CompletelyPicked(AsmHeader: Record "Assembly Header"): Boolean`
- `SetWarningsOff()`
- `SetWarningsOn()`
- `CreateWhseItemTrkgForAsmLines(AsmHeader: Record "Assembly Header")`
- `SetHideValidationDialog(NewHideValidationDialog: Boolean)`

Plus 22 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 5404 "Lead-Time Management"](../codeunit/5404.md) (3 calls: `CalcEarliestDueDate → GetPlannedDueDate`, `CalcEarliestDueDate → GetPlannedEndingDate`, `CalcEarliestDueDate → ManufacturingLeadTime`)
- [Codeunit 1511 "Notification Lifecycle Mgt."](../codeunit/1511.md) (2 calls: `CreateAndSendNotification → RecallNotificationsForRecordWithAdditionalContext`, `CreateAndSendNotification → SendNotificationWithAdditionalContext`)
- [Codeunit 311 "Item-Check Avail."](../codeunit/311.md) (2 calls: `ShowAssemblyAvailability → AsmOrderCalculate`, `UpdateAssemblyLines → RaiseUpdateInterruptedError`)
- [Codeunit 6500 "Item Tracking Management"](../codeunit/6500.md) (2 calls: `CreateWhseItemTrkgForAsmLines → GetWhseItemTrkgSetup`, `CreateWhseItemTrkgForAsmLines → InitItemTrackingForTempWhseWorksheetLine`)

## Called by

- [Table 900 "Assembly Header"](../table/900.md) (14 calls: `AddBOMLine → AddBOMLine`, `CompletelyPicked → CompletelyPicked`, `CreatePick → CreateWhseItemTrkgForAsmLines`, …)
- [Codeunit 6620 "Copy Document Mgt."](../codeunit/6620.md) (2 calls: `CheckAsmOrderAvailability → ShowAvailability`, `CreateToAsmLines → GetNextAsmLineNo`)
- [Codeunit 311 "Item-Check Avail."](../codeunit/311.md) (1 call: `ShowAsmWarningYesNo → ShowAvailability`)
- [Table 7321 "Warehouse Shipment Line"](../table/7321.md) (1 call: `CreateWhseItemTrackingLines → CreateWhseItemTrkgForAsmLines`)
- [Table 901 "Assembly Line"](../table/901.md) (1 call: `ExplodeAssemblyList → ExplodeAsmList`)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-28

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