---
id: object/codeunit/47023
type: object
title: Codeunit 47023 "SL Helper Functions"
summary: Codeunit 47023 "SL Helper Functions" in HybridSL (Microsoft.DataMigration.SL). 65 public procedures, 5 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - hybridsl
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: 8cc279383aa7a172dd84236c256a52557687fbaa6fe977d3c0477234edc30e8d
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/HybridSL/app/src/Migration/Support/SLHelperFunctions.Codeunit.al
    title: src/Apps/W1/HybridSL/app/src/Migration/Support/SLHelperFunctions.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: 47023
name: SL Helper Functions
namespace: Microsoft.DataMigration.SL
app: HybridSL
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: 70
  events: 5
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 9
  called_by: 12
  implements: 0
---

# Codeunit 47023 "SL Helper Functions"

> Codeunit 47023 "SL Helper Functions" in HybridSL (Microsoft.DataMigration.SL). 65 public procedures, 5 events. Introduced in BC29, still in BC30.

HybridSL · Microsoft.DataMigration.SL · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/HybridSL/app/src/Migration/Support/SLHelperFunctions.Codeunit.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| Permissions | tabledata "Dimension Set Entry" = rimd, tabledata "G/L Account" = rimd, tabledata "G/L Entry" = rimd, tabledata Customer = rimd, tabledata "Cust. Ledger Entry" = rimd, tabledata Dimension = rimd, tabledata "Dimension Value" = rimd, tabledata "Detailed Cust. Ledg. Entry" = rimd, tabledata Vendor = ri... |

## Events published

- `OnSkipPostingGLAccounts(var SkipPosting: Boolean)` (integration)
- `OnSkipPostingItemBatches(var SkipPosting: Boolean)` (integration)
- `OnSkipPostingAccountBatches(var SkipPosting: Boolean)` (integration)
- `OnSkipPostingCustomerBatches(var SkipPosting: Boolean)` (integration)
- `OnSkipPostingVendorBatches(var SkipPosting: Boolean)` (integration)

## Procedures

- `GetPostingAccountNumber(AccountToGet: Text): Code[20]`
- `GetDimSetIDByFullSubaccount(Subaccount: Text[24]): Integer`
- `GetMigrationTypeTxt(): Text[250]`
- `GetNumberOfAccounts(): Integer` (internal)
- `GetNumberOfCustomers(): Integer` (internal)
- `GetNumberOfItems(): Integer` (internal)
- `GetNumberOfVendors(): Integer` (internal)
- `NameFlip(Value: Text): Text` (internal)
- `ConvertAccountCategory(SLAccountStaging: Record "SL Account Staging"): Option` (internal)
- `ConvertDebitCreditType(SLAccountStaging: Record "SL Account Staging"): Option` (internal)
- `ConvertIncomeBalanceType(SLAccountStaging: Record "SL Account Staging"): Option` (internal)
- `ResetAdjustforPaymentInGLSetup(var Flag: Boolean)` (internal)
- `CreateDimensions()` (internal)
- `CheckDimensionName(Name: Text[50]): Code[20]` (internal)
- `CreateDimensionValues()` (internal)
- `GetTelemetryCategory(): Text` (internal)
- `SetDimensionsCreated()` (internal)
- `PostGLTransactions()` (internal)
- `SafePostItemBatch(ItemJournalBatch: Record "Item Journal Batch")` (internal)
- `SafePostGLBatch(JournalBatchName: Code[10])` (internal)
- `RemoveBatches()` (internal)
- `LogWarningAndClearLastError(ContextValue: Text[50])` (internal)
- `GLBatchHasLines(TemplateName: Code[10]; BatchName: Code[10]; AccountType: Enum "Gen. Journal Account Type"): Boolean` (internal)
- `SetGlobalDimensions(GlobalDim1: Code[20]; GlobalDim2: Code[20])` (internal)
- `CheckPluralization(var GlobalDim: Code[20])` (internal)
- `SetShortcutDimenions()` (internal)
- `UpdateGlobalDimensionNo()` (internal)
- `GetGlobalDimensionNo(DimensionCode: Code[20]): Integer` (internal)
- `GetSLSegmentsIdBySegmentNumber(SegmentNumber: Integer): Text[20]` (internal)
- `SetProcessesRunning(IsRunning: Boolean)` (internal)
- `CreateItemTrackingCodes()` (internal)
- `SetItemTrackingCodesCreated()` (internal)
- `CreateLocations()` (internal)
- `SetLocationsCreated()` (internal)
- `CreateBankAccounts()` (internal)
- `CreateOpenPurchaseOrders()` (internal)
- `CreateOpenSalesOrders()` (internal)
- `CreateProjectData()` (internal)
- `CreateUnitOfMeasureIfNeeded(CodeToSet: Code[10]; DescriptionToSet: Text[50])` (internal)
- `DeleteExistingCustomerPostingGroups()` (internal)
- `DeleteExistingGeneralPostingSetups()` (internal)
- `DeleteExistingGenProductPostingGroups()` (internal)
- `DeleteExistingInventoryPostingSetups()` (internal)
- `DeleteExistingInventoryPostingGroups()` (internal)
- `DeleteExistingVendorPostingGroups()` (internal)
- `CheckAndLogErrors()` (internal)
- `LogError(LastErrorMessage: Text)` (internal)
- `GetLastError()` (internal)
- `RunPreMigrationCleanup()` (internal)
- `CreatePreMigrationData(): Boolean` (internal)
- `CreatePostMigrationData(): Boolean` (internal)
- `LogPostMigrationDataMessage(PostMigrationType: Code[30]; TableRef: Text[30]; MessageCode: Text[100]; MessageText: Text[250])`
- `CheckMigrationStatus()` (internal)
- `CreateDataMigrationErrorRecord(ErrorMessage: Text[250])` (internal)
- `DimensionsCreated(): Boolean` (internal)
- `ItemTrackingCodesCreated(): Boolean` (internal)
- `LocationsCreated(): Boolean` (internal)
- `CashManagerDataCreated(): Boolean` (internal)
- `OpenPODataCreated(): Boolean` (internal)
- `OpenSODataCreated(): Boolean` (internal)
- `ProjectDataCreated(): Boolean` (internal)
- `SetBankAccountsCreated()` (internal)
- `SetOpenPOsCreated()` (internal)
- `SetOpenSOsCreated()` (internal)
- `SetProjectDataCreated()` (internal)

## 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 1796 "Data Migration Error Logging"](../codeunit/1796.md) (4 calls: `CreateDimensions → SetLastRecordUnderProcessing`, `LogError → ClearLastRecordUnderProcessing`, `LogError → GetFullListOfLastRecordsUnderProcessingAsText`, …)
- [Codeunit 47000 "SL Account Migrator"](../codeunit/47000.md) (2 calls: `GetDimSetIDByFullSubaccount → CreateDimSetFromSubSegments`, `GetDimSetIDByFullSubaccount → GetSegmentValueFromSubaccount`)
- [Codeunit 13 "Gen. Jnl.-Post Batch"](../codeunit/13.md) (1 call: `SafePostGLBatch → (object)`)
- [Codeunit 23 "Item Jnl.-Post Batch"](../codeunit/23.md) (1 call: `SafePostItemBatch → (object)`)
- [Codeunit 47002 "SL Populate Account History"](../codeunit/47002.md) (1 call: `GetDimSetIDByFullSubaccount → GetNumberOfSegments`)
- [Codeunit 47006 "SL Project Migrator"](../codeunit/47006.md) (1 call: `CreateProjectData → MigrateProjectModule`)
- [Codeunit 47007 "SL SO Migrator"](../codeunit/47007.md) (1 call: `CreateOpenSalesOrders → MigrateOpenSalesOrders`)
- [Codeunit 47010 "SL Cash Manager Migrator"](../codeunit/47010.md) (1 call: `CreateBankAccounts → MigrateCashManagerModule`)
- [Codeunit 47011 "SL PO Migrator"](../codeunit/47011.md) (1 call: `CreateOpenPurchaseOrders → MigrateOpenPurchaseOrders`)

## Called by

- [Codeunit 47001 "SL Cloud Migration"](../codeunit/47001.md) (22 calls: `CreateDataMigrationStatusRecords → GetMigrationTypeTxt`, `InitiateSLMigration → CreatePreMigrationData`, `InitiateSLMigration → DeleteExistingCustomerPostingGroups`, …)
- [Codeunit 47005 "SL Wizard Integration"](../codeunit/47005.md) (8 calls: `OnAfterMigrationFinishedSubscriber → PostGLTransactions`, `OnAfterMigrationFinishedSubscriber → SetProcessesRunning`, `RegisterSLDataMigrator → GetLastError`, …)
- [Codeunit 47000 "SL Account Migrator"](../codeunit/47000.md) (6 calls: `CreateDimSet → GetSLSegmentsIdBySegmentNumber`, `CreateDimSetFromSubSegments → GetSLSegmentsIdBySegmentNumber`, `MigrateAccountDetails → ConvertAccountCategory`, …)
- [Codeunit 47010 "SL Cash Manager Migrator"](../codeunit/47010.md) (5 calls: `CreateBankAccount → LogPostMigrationDataMessage`, `CreateBankTransactions → GetDimSetIDByFullSubaccount`, `CreateBankTransactions → LogPostMigrationDataMessage`, …)
- [Codeunit 47007 "SL SO Migrator"](../codeunit/47007.md) (3 calls: `CreateLines → LogPostMigrationDataMessage`, `GetSalesOrderDimSetID → GetDimSetIDByFullSubaccount`, `MigrateOpenSalesOrderData → LogPostMigrationDataMessage`)
- [Codeunit 47006 "SL Project Migrator"](../codeunit/47006.md) (2 calls: `CreateEquipmentResource → NameFlip`, `CreateResource → NameFlip`)
- [Codeunit 47011 "SL PO Migrator"](../codeunit/47011.md) (2 calls: `CreateItemUnitOfMeasure → CreateUnitOfMeasureIfNeeded`, `CreateLines → GetDimSetIDByFullSubaccount`)
- [Codeunit 47013 "SL Hybrid Management"](../codeunit/47013.md) (2 calls: `InitializationofSLSynchronization → GetTelemetryCategory`, `UpdateStatusOnHybridReplicationCompleted → GetTelemetryCategory`)
- [Codeunit 47018 "SL Customer Migrator"](../codeunit/47018.md) (2 calls: `DecrementMigratedCount → GetMigrationTypeTxt`, `MigrateCustomerDetails → NameFlip`)
- [Codeunit 47021 "SL Vendor Migrator"](../codeunit/47021.md) (2 calls: `DecrementMigratedCount → GetMigrationTypeTxt`, `MigrateVendorDetails → NameFlip`)
- [Codeunit 47024 "SL Migration Error Handler"](../codeunit/47024.md) (1 call: `UpdateErrorOverview → GetMigrationTypeTxt`)
- [Codeunit 47026 "SL Item Migrator"](../codeunit/47026.md) (1 call: `DecrementMigratedCount → GetMigrationTypeTxt`)

## 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: "SL Helper Functions")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
