AL Toolbox for Visual Studio Code
Please visit https://www.altoolbox.com/ for more in depth information and AL Language tips and tricks.
Features
- Regions Pre AL Language 6.0
- Custom Region Colors
- Snippets
- Actions
- Added Code Cop Warning
Quick Overview Features
- Custom Color of Regions
- Quickfixes: Surround with CopyStr
- Quickfixes: Pragma Warnings
- Action: Create Region
- Action: Renumber AL Objects
- Action: Change Object Prefix
- Action: Create Related Tables
- Action: Open Related Tables
- Action: Copy Fields Related Tables
- Action: Init Git Ignore
- Action: Generate SetLoadFields
- Region Functionality for PRE AL Language 6.0
- Settings
- Known Issues
Custom Color of Regions
You can change the color in UserSettings
Quickfixes: Surround with CopyStr
Automatic fix for AL(AA0139)
Pragma Warnings
Every warning/information line will now show a CodeAction to surround with Pragma to ignore it. So that warnings that you can do nothing about can be ignored easily.
Some variants on the above Pragma CodeAction were added as well:
- Surround ### with Pragma & add TODO tag (with comment)
- Surround ### with Pragma (in all documents)
Action: Create Region
-
ALTB: Create regions for all AL functions and triggers | Running this command will generate Regions around all Functions that don't have regions yet.
-
ALTB: Create regions for all AL dataitems and columns | Running this command will generate Regions around all Dataitems and Columns in a report.
-
ALTB: Create regions for all AL functions, triggers, dataitems, and columns | Combination of the previous 2.
Action: Renumber AL Objects
- ALTB: Renumber AL Objects | This function will renumber your objects based on the number ranges in the App.json
- Objects will be numbered in ascending order stating with the lowest number in first available range. The ranges are taken from idRange(s) in the app.json file.
- Extension objects will be added to the 80,000-89,999 range if 80,000 is in the available ranges. If not the same is done as for the other objects.
- ALTB: Renumber fields | Renumbers field numbers in the active editor
- ALTB: Renumber all fields | Renumbers fields in all tables and table extensions objects (in all workspace folders).
Action: Change Object Prefix
- ALTB: Change Object Prefix | This function will ask you what the new prefix should be and rename all your objects and the settings.json.
Action: Create Related Tables
This will create a set of tableextensions that should have the same fields so that there is no issue when standard code issues a TransferFields().
Action: Open Related Tables
- ALTB: Open Related Tables/Pages | This function will open the related tables/pages for the object you are working on, so you can easily copy paste fields between the related tables of Sales Header for example.
Action: Copy Fields Related Tables
- ALTB: Copy fields to related tables | This will copy al fields from the current table to all related tables. If there are conflicts you will get a popup that allows you to navigate to them:
Action: Init Git Ignore
- ALTB: init .gitignore | Creates the following .gitignore in the current workspace folder or appends the missing lines to the existing .gitignore
# ALTB .alpackages/ .alcache/ .altemplates/ .altestrunner/ *.json !app.json rad.json *.app *.g.xlf
Action: Generate SetLoadFields
ALTB: Generate SetLoadFields | Creates SetLoadFields or adds missing fields to SetLoadFields for a record. - Looks for a record at the current mouse position. - Only works for local records. - For each Get, Find, FindFirst, ... a SetLoadFields function is generated the line before it, unless it already exists. - All used fields are added. Assignment is not seen as usage.
Region Functionality for PRE AL Language 6.0
Either //#Region or the default #Region can be used with this extension. The snippets/actions will adjust automatically according to the runtime you are using. #Region will now be colored like //#Region; you can change the colors in the User Setup
Settings
-
ALTB.UseOldFileNamingConventions | Boolean: default
true
- Use
<ObjectPrefix>(<ExtenedObjectId>-Ext)?<ObjectId>.<ObjectNameExcludingPrefix>.al
instead of<ObjectNameExcludingPrefix>.<FullTypeName>(Ext)?.al
for file names.
- Use
-
ALTB.PutCreatedRelatedObjectsInSeparateFolders | Boolean: default
false
- If false all objects created with 'ALTB: Start Project: Create Related Tables' are put in there respective object folder. If true each group of related objects is put in a subfolder of that object folder.
-
ALTB.AdditionalRelatedObjects | List: default
[]
- Adds additional related pages and tables. These are used while navigating and creating related tables. Note that this only works for PageExtensions and TableExtensions, not your own Pages and Tables. A more indepth explanation can be found in the 'Related Objects' section below.
-
ALTB.DisableAPIEntityWarnings | Boolean: default
false
- Disables error messages for duplicate EntityName and/or EntitySetName from API pages that have the same APIPublisher, APIGroup, and APIVersion
-
ALTB.UseAlRegions | Boolean: default
true
- Use the standard AL regions instead of the regions previously used by this extension (No longer with '//'). This will only have effect if the runtime in app.json is higher than or equal to 6.0.
-
ALTB.DisableCustomFolding | Boolean: default
false
- Disable all folding provided by this extension (requires reload).
-
ALTB.RegionColor | Color: default
#569CD6
~ blue- Region marker color (
(//)?#(end)?region
). Set to""
to disable coloring.
- Region marker color (
-
ALTB.RegionTextColor | Color: default
#D4D4D4
~ white- Color of text after region markers. Set to
""
to disable coloring.
- Color of text after region markers. Set to
-
ALTB.DisableHoverProviders | Boolean: default
false
- AL Toolbox shows the field description on hover.
-
ALTB.CheckCommentTranslations | Boolean: default
false
- Checks if label comments match the format required by the 'AL Language Tools' extension for generating XLIFF files
-
ALTB.SnippetTargetLanguage | String: default
NLB
- Primary target language identifier used for translations in snippets. Supported formats: xx-XX or XXX (for example: nl-BE or NLB)
-
ALTB.SnippetTargetLanguage2 | String: default
FRB
- Secondary target language identifier used for translations in snippets. Supported formats: xx-XX or XXX (for example: fr-BE or FRB)
-
ALTB.TelemetryIdentifier | String: default
External
- Custom identifier for Application Insights to identify internal/external telemetry
-
ALTB.DisableSnippets
- Disables all snippets provided by ALTB.
-
ALTB.UseSimpleFunctionSnippets
- Simplifies function snippets so a custom completion provider can be used.
Known Issues
-
ALTB: Renumber AL Objects
- Extension objects will be added to the 80,000-89,999 range if 80,000 is in the available ranges. So if only the range 80,000-80,100 is in the ranges objects will still get ids greater than 80,100.
- If there exist one or more extension objects of the same type where the last 4 digits of the ids are the same, then they will receive the same id. e.g.: extension objects with id 36 and 2,000,036 will both receive 80,036 as id.
- Extension objects will not be renumbered if they don't have a original object number after there definition and 80,000 is in the available ranges.
Format example:
pageextension 80021 "EXTCustomerCard" extends "Customer Card" //21
-
ALTB: Change Object Prefix
- This will only change the prefix of object names and fields. So not for actions, events subscribers, parts on pages, keys...
-
ALTB: Generate SetLoadFields
- If there's a Get, Find, ... in a statement over multiple lines, the genered code can be incorrect. e.g:
if RecVar.Get() then TestFunction(RecVar.TestField); // Will genereate: if RecVar.SetLoadFields(TestField); RecVar.Get() then TestFunction(RecVar.TestField);
- If there's a Get, Find, ... in a statement over multiple lines, the genered code can be incorrect. e.g:
Folding with Regions Example
Related Objects
To add additional related objects use the ALTB.AdditionalRelatedObjects setting.
Example format:
[
{ // For adding tableextensions
"folder": "SalesHeader", // subfolder of src where to place the objects when using "ALTB: Start Project: Create Related Tables"
"objectType": "tableextension",
"objects": [ // these tables will be considered related
{ "id": 36, "name": "Sales Header" },
{ "id": 110, "name": "Sales Shipment Header" },
{ "id": 112, "name": "Sales Invoice Header" },
{ "id": 114, "name": "Sales Cr.Memo Header" },
{ "id": 5107, "name": "Sales Header Archive" },
{ "id": 6660, "name": "Return Receipt Header" }
]
},
...
{ // For adding pageextensions
"table": "Contact", // source table of pageextension
"folder": "Contact", // subfolder of src where to place the objects when using "ALTB: Start Project: Create Related Tables"
"objectType": "pageextension",
"objects": [ // pages for the source table
{ "id": 5050, "name": "Contact Card" },
{ "id": 5052, "name": "Contact List" }
]
},
...
]
The default related objects can be found in src/constants.js in the AL-toolbox repository (search for RelatedObjects).
Contributers
- Kasper De Smedt
- Kris Jordaens
- Daan Saveyn
- Johannes Wikman (jwikman)
- Frédéric Vercaemst (fvet)
Special Thanks
Special thanks to ESC BV for investing in this tool! https://esc.be/