Streamline object ID management for Business Central app development, ensuring consistency and avoiding collisions in your AL development workflow. Whether you're working alone or part of a large team, al-object-maestro helps you maintain accurate and unique object IDs across all features, branches, and repositories.
You need to map a volume to the /app/data
directory. Inside this directory, the application will
- look for the
config.yml
- create a database
- store repositories (if CLONE_IN_MEMORY=false)
Use the following command to run the container locally:
docker run -d -p 5000:5000 -v "C:/path:/app/data" -e CLONE_IN_MEMORY=true --name al-id-maestro ghcr.io/philipp-mlr/al-id-maestro:main
Variable | Description | Default | Required |
---|---|---|---|
CLONE_IN_MEMORY | true = Repos get cloned into memory. Slower start-up time, faster reads. false = Repos get cloned onto the disk. Faster start-up time, slower reads. |
true | false |
The container needs a file named config.yml
mounted to the /app/data
directory.
For more information about the configuration options, checkout the config.yml example file.
You may define multiple repositories like so:
repositories:
- name: repo-1
url: https://github.com/myorg/cool-repo
authToken: ghp_ABC123
remoteName: origin
excludeBranches:
- release/
- name: repo-2
url: https://github.com/myuser/awesome-apps
authToken: ghp_ABC123
remoteName: origin
excludeBranches:
- somebranch/
Setting | Description | State |
---|---|---|
name | A friendly name for the repository | required |
authToken | Github auth token | required |
remoteName | Remote name | required |
excludeBranches | Array of branch patterns which get ignored during scan. Omit * asterisk | optional |
You have to define ID ranges for the following object types:
Object type | State |
---|---|
Page | required |
PageExtension | required |
Table | required |
TableExtension | required |
Enum | required |
EnumExtension | required |
Report | required |
ReportExtension | required |
PermissionSet | required |
PermisisonSetExtension | required |
Codeunit | required |
XMLPort | required |
MenuSuite | required |
You may define multiple ranges for the same object. They must not overlap.
This will work:
idRanges:
- objectType: Codeunit
from: 50000
to: 60000
- objectType: Codeunit
from: 60000
to: 70000
This won't work: overlapping ID ranges!
idRanges:
- objectType: Codeunit
from: 50000
to: 60000
- objectType: Codeunit
from: 59000
to: 70000
Please open an issue.