BCCL Documentation
Index

Identifying Which App Raised an Error

Business Central environments usually run several extensions side by side, and an error that appears while you work with BCCL, or while you create a sales document, may not come from BCCL at all. This page explains how to read the details of a Business Central error message to determine which installed extension raised it, so you can direct the support request to the correct publisher.


Step 1: Open "Share Details" on the Error

When an error dialog appears in Business Central, choose the Share Details option on the error message. This shows the full technical information for the error, which is what you need both to identify the source and to report the issue.

The shared details contain, at minimum, the following fields. When you contact support, send all of them:

Field Purpose
Error message The text shown to the user.
Internal session ID Identifies the Business Central session.
Application Insights session ID Correlates the error with telemetry.
Client activity id Identifies the client action that triggered the error.
Time stamp on error When the error occurred.
User telemetry id Identifies the user in telemetry, without exposing the user name.
AL call stack The sequence of AL code that led to the error. This is the key to identifying the source app.

Step 2: Read the AL Call Stack

Each line of the AL call stack has this format:

ObjectName(ObjectType ObjectID).ProcedureName line N - <App name> by <Publisher name>

The app name and publisher name at the end of each line identify the extension the code belongs to.

  • Lines ending in Base Application by Microsoft are standard Business Central code.
  • Lines ending in another app and publisher name belong to that extension.

Top Versus Bottom

  • The topmost lines show the code that actually raised the error.
  • The lines further down show what triggered it. A typical pattern is a standard Base Application table trigger calling into a third-party event subscriber.

So the publisher named on the topmost lines is the one whose code produced the error, even if the error surfaced during a standard Business Central action.


Worked Example

A user sees this error while creating a sales order:

A valid license not found for <feature name>.

The AL call stack (anonymised) looks like:

LicenseMgt(CodeUnit 70000001).CheckLicense line 12 - <Third-Party App> by <Third-Party Publisher>
EventHandler(CodeUnit 70000002).OnBeforeUpdateCurrencyFactor line 5 - <Third-Party App> by <Third-Party Publisher>
"Sales Header"(Table 36).UpdateCurrencyFactor line 30 - Base Application by Microsoft
"Sales Header"(Table 36)."Currency Code - OnValidate"(Trigger) line 8 - Base Application by Microsoft

Reading it:

  • The top two lines point at a licensing codeunit and an event handler in a third-party app. That is the code raising the error.
  • The lower lines are "Sales Header"(Table 36) triggers in the Base Application. That is what triggered it: the user created a sales document, the standard table trigger fired, and the third-party app's event subscriber ran its license check.

The error surfaces while creating a sales document, but the code raising it belongs to the third-party extension.


Step 3: Apply the Rule

If the app or publisher named on the error-raising call stack lines is not a hougaard.com app, the error does not come from BCCL or any other hougaard.com app, and it must be reported to that publisher.

To find the publisher's contact details:

  1. In Business Central, search for Extension Management.
  2. Locate the app named in the call stack.
  3. Open it to see the publisher and, where provided, the support contact or help link.

A Quick Indicator

The entity name in the error text is usually the name of the third-party extension, not a standard Business Central entity. In A valid license not found for X., X is normally the name of the extension whose license is missing. If you do not recognise the entity name as something in standard Business Central, that is a strong indicator that a third-party app raised the error.


"A valid license not found" Errors: Is It a hougaard.com App?

The Message Pattern

A valid license not found for <name>.

This message is not produced by BCCL Subscription (Enduser) or by the other hougaard.com apps. If you see it, use the Share Details / AL call stack procedure above to confirm the origin.

Concrete Case

The error

A valid license not found for Exchange Rate Types.

is raised by the third-party AppSource app "Exchange Rate Types" published by Navapp Yazilim ve Danismanlik Ltd. Sti. The call stack contains objects such as:

Object Type and ID
NappNLMLicenseMgt Codeunit 70745025
NappERTCheckLicense Codeunit 70745111
NappERTEventHandler Codeunit 70745106
NappERTCurrencyExchangeRate Table extension 70745106

The app hooks into the Sales Header event OnBeforeUpdateCurrencyFactor, which is why the error fires when users manually create sales orders, purchase orders, and similar documents.

Resolution

  • Obtain or renew a licence for that app from its publisher, or uninstall/disable the app.
  • hougaard.com cannot issue or fix licences for third-party apps.
  • To find the app, open Microsoft AppSource and search for "Exchange Rate Types" by Navapp Yazilim ve Danismanlik Ltd. Sti.

Reading Stack Traces in BCCL Command-Line Output

The same principle applies to errors that BCCL prints on the command line, for example when a putdata import fails inside the target table's code. The stack trace lines name the object, the trigger or procedure, and the publishing app with its version.

  • BCCL's own objects appear lower in the trace, for example CodeUnit 80806.ImportTableJson, CodeUnit 80806.OnRun, CodeUnit 80807.HandleRequest, and CodeUnit 80800.call. These show that BCCL called into the table; they are not the source of the error.
  • A top line such as Table 349.OnInsert(Trigger) means the target table's own code raised the error. The publishing app named on that line owns the table and its business logic.

Use this to decide whether an import error originates in BCCL or in the target app's table code. Errors raised inside a table's OnInsert or CheckField logic are handled with import options such as delayed insert; see Import Errors.

Example (anonymised) from a failing putdata into table 349 Dimension Value:

Error: Dimension Code must have a value in Dimension Value: Dimension Code=, Code=<value>. It cannot be zero or empty.
  Table 349.OnInsert(Trigger)
  CodeUnit 80806.ImportTableJson
  CodeUnit 80806.OnRun
  CodeUnit 80807.HandleRequest
  CodeUnit 80800.call

The error is raised by the Dimension Value table's insert trigger; BCCL's codeunits below it are the call path.


Summary

Question How to answer it
Which app raised this error? Open Share Details, read the ... by <Publisher> suffix on the topmost AL call stack lines.
Is it a BCCL / hougaard.com error? Only if the topmost lines name a hougaard.com app.
Is A valid license not found for X. a BCCL message? No. It comes from the third-party app named X.
Who do I contact? The publisher shown on the error-raising lines; look them up in Extension Management.
What do I send to support? All fields from Share Details, including the complete AL call stack.