import { Callout } from "zudoku/ui/Callout";

# Get Started

Welcome to the AL developer documentation of [365 business development](https://www.365businessdev.com/).

This section is written for AL developers who build on top of our apps. It documents the **extension surface** of each product: the events you can subscribe to, the public codeunits and methods you can call, the interfaces and extensible enums you can implement, and the API pages you can address from outside Business Central. Everything you need to make one of our products part of your own extension or module.

It is not a user guide. What a product does, and how it is set up and used, is described in the [product documentation](../en-us/index.mdx).

## What an app chapter covers

Not every app offers all of it. The chapters of an app state what it publishes, and each of the four kinds answers a different need:

| Extension point | What it is for |
| --- | --- |
| **Extensibility events** | Take part in what the app does - enrich the data it works with, correct it, skip a step, or react to a result. The usual way to change behavior without touching the app. |
| **Public codeunits** | Call a capability of the app directly from your own code, for a document or a record the app does not process by itself. |
| **Interfaces and extensible enums** | Add an implementation of your own where an app iterates over implementations rather than over a fixed list - a new screening source, a new data provider, a new document format. |
| **API pages** | Reach the app from outside Business Central over OData, for an integration that does not run in AL at all. |

## Before you start

### Know your way around AL

If you are new to building extensions, read [Development in AL](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-dev-overview) first, to get an understanding of the basics and the terms you will encounter, and follow [Getting Started with AL](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-get-started) to set up the tools.

### Add the dependency

An integration starts with a dependency on the app you build upon, declared in the `dependencies` node of your `app.json` - see [JSON Files](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-json-files#appjson). Each app chapter states the id, the publisher and the version you need:

```json
    {
      "id": "66745141-90b6-4fb0-906a-94400600f856",
      "name": "365 business PDF",
      "publisher": "365 business development",
      "version": "20.5.0.0"
    }
```

The version in a dependency is the **minimum** version your extension needs. Extension points are added over time, and the chapters state from which version on something is available - take that version, not the one that happens to be installed on your development environment.

### Keep to what is documented

<Callout type="caution" title="Public means documented here">
An AL object is public unless it declares `Access = Internal`, which leaves a good part of our apps technically reachable. Only what is documented in this section is supported: it keeps working across updates, and a breaking change to it is announced. Everything else is an implementation detail and may change with any release, including one that only raises the build number.
</Callout>

Where an app offers both an event and a way to reach the same result by other means, take the event. It is the contract we maintain.

### Expect the service and the license

Most of our products do their actual work in a `365 business` service and call it over HTTP. Two properties of the environment therefore decide whether a call succeeds:

- the feature has to be **licensed** for the tenant;
- **outgoing HTTP calls** have to be allowed for the app, which is off by default in a sandbox.

Neither is something your extension controls, but your error handling has to cope with both.

## Getting help

Found a gap in an extension point, or need one that does not exist yet? Tell us - our development team can add events and public methods where they are needed. Use the feedback system integrated in the apps, or [contact us](https://365businessdev.com/kontakt/).

## See also

- [The apps covered in this section](al-developer.md)
- [Product documentation](../en-us/index.mdx)
