Description
Efnisyfirlit
- Preface
- Who this book is for
- What this book covers
- To get the most out of this book
- Get in touch
- Microsoft Dynamics 365 Business Central’s Online Momentum
- Dynamics 365 Business Central’s evolution
- The Universal Code initiative
- The role of open source and social networks
- The future perspective
- Summary
- Mastering a Modern Development Environment
- The Visual Studio Code user interface
- Code editor
- Status bar
- Activity bar
- Manage
- Command Palette
- Sidebar
- EXPLORER (Ctrl + Shift + E)
- SEARCH (Ctrl + Shift + F)
- SOURCE CONTROL (Ctrl + Shift + G)
- DEBUG (Ctrl + Shift + D)
- EXTENSIONS (Ctrl + Shift + X)
- Panels area
- PROBLEMS
- OUTPUT
- DEBUG CONSOLE
- TERMINAL
- Visual Studio Code – the editing features
- Comment lines
- Delimiter matching
- Text selection
- Code block folding
- Multiple cursors (or multi-cursors)
- Mini-map
- Breadcrumbs
- IntelliSense
- Word completion
- Go to definition
- Find all references
- Peek definition
- Renaming symbols
- Understanding the AL Language extension
- AL Language
- launch.json
- app.json
- Understanding symbols
- Inside symbols
- AL Language extension settings
- Understanding code analyzers
- GitHub Copilot for AL developers
- Summary
- Extension Development Fundamentals
- Technical requirements
- Basic concepts regarding extensions
- Understanding the basics of AL
- Creating a new workspace
- Defining objects using snippets
- Table object definition
- Page object definition
- Table extension object definition
- Page extension object definition
- Codeunit object definition
- Event object definitions
- XMLport object definition
- Query object definition
- Enum object definition
- Profile object definition
- Understanding AL project structure best practices
- Naming guidelines and AL object ranges
- Working on AL coding guidelines
- Summary
- Developing a Customized Solution for Dynamics 365 Business Central
- Translating a business case into a real-world extension
- Developing the Dynamics 365 Business Central customization
- Customer category implementations
- Table definition
- Page definition
- The tableextension definition
- The pageextension definition
- Codeunit definition
- Handling event subscribers
- Gift campaign implementations
- Table definition
- Page definition
- Codeunit definition
- Vendor quality implementations
- Table definition
- Page definition
- The pageextension definition
- Codeunit definition
- Promoting actions
- Creating page views
- Installing and upgrading codeunits
- Defining permission sets in AL
- Summary
- Writing Code for Extensibility
- Why do we need extensible code?
- Business scenario
- Events and the “Handled” pattern
- Writing a dependent extension
- Interfaces in AL
- Extension’s code protection
- Summary
- Advanced AL Development
- Understanding immutable keys
- Access modifiers in AL
- Handling errors with TryFunctions
- Using collectible errors
- Handling actions on errors
- Creating and extending role centers
- Customizing the headline
- Handling XML and JSON files with the AL language
- Understanding Isolated Storage
- Working with control add-ins
- Creating a PDF-Viewer control add-in
- Notifications inside Dynamics 365 Business Central
- Understanding page background tasks
- Using Azure Key Vault in AL extensions
- Namespaces in AL language
- Summary
- Handling Files with Dynamics 365 Business Central
- Handling files with AL
- Handling attachments
- Reading and writing text data from blob fields
- Using the Media and MediaSet data types in AL code
- Using XMLport in AL code
- Handling XML and JSON files with AL
- Using persistent blobs
- Isolated Storage
- Using Azure Blob Storage from AL
- Creating a storage account in Azure
- Using Azure Blob Storage from AL code
- Handling Dynamics 365 Business Central attachments in Azure Blob Storage
- Using Azure file shares from AL
- Summary
- Report Development
- Anatomy of the report object
- The report extension object
- Tools to use for RDL, Word, and Excel layouts
- The RDL, Word, and Excel layout features
- Part 1 – Designing the dataset
- Part 2 – Creating a simple RDL layout
- Part 2.1 – Creating the RDL report header
- Part 2.2 – Adding a table control to the RDL report body
- Part 3 – Understanding grouping
- Part 4 – Building a simple request page
- Part 5 – Adding database images
- Part 6 – Adding a Word layout
- Part 7 – Adding an Excel layout
- Report extension object: a basic example
- Cloning and refactoring reports
- Feature limitations when developing RDL or Word layout document reports
- Understanding report performance considerations
- Summary
- Printing
- Understand cloud-ready printing
- Email printers
- Microsoft Universal Print printers
- Universal Print connector
- Universal Print portal
- Universal Print Integration extension
- Deep dive into the modern printing structure
- Alternatives to Microsoft Universal Print
- Summary
- Debugging
- Running in debug mode
- Debugging logs: verbose mode
- Visual Studio Code debugger sections
- Debugger sidebar
- VARIABLES
- Watch
- Callstack
- Breakpoints
- Debugger toolbar
- Debugging in attach mode
- Non-debuggable items
- Snapshot debugging
- Performance profiling
- Summary
- Telemetry
- Signal fundamentals
- Dimensions
- Aggregated signals
- Microsoft’s recommendations
- Example
- Enabling partner telemetry in Dynamics 365 Business Central online
- KQL log analysis
- Statements
- Operators
- Functions
- Application Insights
- Alerts
- Dashboards
- Workbooks
- Tools to analyze telemetry data
- Power BI telemetry apps
- Custom signals
- Summary
- Coding for Performance
- Defining an efficient data access layer
- Table extension changes from Dynamics 365 Business Central version 23
- Setting the transaction isolation level in AL code
- Writing efficient pages and reports
- Writing performant installation and upgrade AL codeunits
- Events and performance
- Running asynchronous patterns
- Using StartSession in AL code
- Using Task Scheduler in AL code
- Testing and validating performances
- Summary
- Dynamics 365 Business Central APIs
- Using the OData protocol for APIs
- Configuring OAuth authentication for Dynamics 365 Business Central APIs
- Registering an application in Microsoft Entra ID
- Setting the application permissions
- Creating a client secret
- Microsoft Entra application registration in Dynamics 365 Business Central
- Acquiring an authentication token from Microsoft Entra ID
- Using Dynamics 365 Business Central standard APIs
- Creating a custom API in Dynamics 365 Business Central
- Implementing a new API for a custom entity
- Implementing a new API for an existing entity
- Using the read-only database replica
- Dynamics 365 APIs’ operational limits
- Using OData bound actions
- Using OData unbound actions
- Using OData batch calls with Dynamics 365 Business Central APIs
- Using Dynamics 365 Business Central webhooks
- Summary
- Extending Dynamics 365 Business Central with Azure Services
- Overview of Azure Functions
- Creating functions with Azure Functions
- Using Azure Functions from AL
- Overview of Azure Logic Apps
- Creating workflows with Azure Logic Apps
- Summary
- DevOps for Dynamics 365 Business Central
- AL-Go for GitHub: an introduction
- Creating a new per-tenant extension with AL-Go for GitHub
- Branching strategies
- Master-only branch
- Feature/developer branches
- Release branching
- Other strategies
- Git flow
- GitHub flow
- Git merge strategies
- Fast-forward merge
- Squash commit
- Rebase
- Git in Visual Studio Code
- Visual Studio Code GUI for Git
- Workflow
- Handling the CI/CD pipeline
- Setting up your self-hosted GitHub runner
- Handling dependencies between applications
- Adding a test application to an existing project
- Registering a customer sandbox environment for continuous deployment
- Creating a release for your application
- Registering a customer Production environment for manual deployment
- Adding a performance test app to your repository
- Using AL-Go for GitHub for AppSource development
- Summary
- Dynamics 365 Business Central and Power Platform Integration
- Technical requirements
- Power Automate and Dynamics 365 Business Central
- Example 1: Adding a default image to a Customer record
- Example 2: Exporting a selected invoice as PDF to OneDrive
- Creating a Power Apps app with Dynamics 365 Business Central integration
- Scenario: Expense app with offline capability
- Part 1: Creation of the canvas app project
- Part 2: Establishing a data connection to Dynamics 365 Business Central
- Part 3: Working with Dynamics 365 Business Central data from the canvas app
- Part 4: Adding controls and business logic to the canvas app
- Part 5: Adding offline capabilities to the application
- Part 6: Calling a Power Automate flow to execute actions in the app
- Exposing Dynamics 365 Business Central data to Dataverse by using virtual tables
- Exposing Dynamics 365 Business Central events to Dataverse
- Summary
- Useful and Proficient Tools for AL Developers
- Who is Waldo?
- What tools to use
- The AL Extension Pack
- The waldo’s CRS AL Language Extension
- Run objects
- Renaming / Reorganizing files
- Search on Google/Microsoft Docs
- Snippets
- Feedback to Waldo
- Waldo GitHub repo
- Free Visual Studio Code extensions for AL developers
- AZ AL Dev Tools/AL Code Outline (by Andrzej Zwierzchowski)
- AL Code Actions (by David Feldhoff)
- AL Object ID Ninja (by Vjeko.com)
- BusinessCentral.LinterCop (by Stefan Maron)
- AL Toolbox (by Bart Permentier)
- AL Navigator (by Waldemar Brakowski)
- Free Visual Studio Code extensions for AL Language side features
- Summary
- Creating Generative AI Solutions for Dynamics 365 Business Central
- Introduction to generative AI main concepts
- Introducing Azure OpenAI Service
- Dynamics 365 Business Central and Azure OpenAI Service
- Deploy an AI model with Azure OpenAI Service
- Creating a generative AI solution for Dynamics 365 Business Central
- Summary
- Other Books You May Enjoy
- Index




