Hey BC Community! π
Last week (Week 46), I had the incredible opportunity to attend Devoxx Morocco in Marrakech – an amazing tech conference filled with inspiring talks, cutting-edge innovations, and great conversations with fellow developers. π²π¦β¨

But even while I was soaking up all that conference energy, I made sure not to miss what’s been happening in the Business Central world! Because let’s be honest – the BC community never sleeps, and there’s always something exciting to catch up on.
So here we are with your weekly dose of BC Weekly News from N1ERP, bringing you the most important updates, tools, tips, and community contributions from this past week.
Let’s dive in! π
π Table of Contents
π Security & Permissions
Inherent Permissions in Microsoft Dynamics 365 Business Central
Fine-grained, code-level permission control that changes how developers handle security
π Developer Productivity
Smart Report Filenames: Stop Wasting Time Renaming Downloads
A 3-line AL trick that adds context to every BC report you download
The extensions.json File: The Secret to Team-Wide VS Code Setup
One file that eliminates “what extensions do I need?” questions forever
π€ AI & Automation
YAMPI: Manage BC Environments by Just Talking to AI
Stefano Demiliani’s MCP server that turns Admin Center tasks into natural language commands
AboutText Property: Teaching AI to Understand Your APIs
BC 27.1’s game-changer for MCP integration and AI-powered API discovery
π οΈ Technical Deep Dives
Breaking the 350 MB Upload Limit in Business Central
Maxime Caty’s solution for uploading files up to 2 GB using JavaScript add-ins
Updating BLOB Fields Using FieldRef Datatype
Wayne Radue’s clean solution to one of AL’s trickiest corners
Inherent Permissions: The Game-Changer for BC Security
Tired of giving users more access than they need just to run a simple process?
Muhammad Ali Nasik Awan breaks down Inherent Permissions in Business Centralβa feature that’s revolutionizing how developers handle security.
What You’ll Discover:
π― The Problem It Solves
Stop granting permanent permissions when you only need temporary access
β‘ Two Powerful Approaches
- Method-level control (surgical precision)
- Object-level permissions (for internal tables)
π‘οΈ Why It Matters
β Maintain least-privilege principles
β Eliminate “permission denied” errors
β Reduce admin overhead
β Keep sensitive data secure
π‘ Real Examples Inside
From reports to background jobsβsee exactly when and how to use them
β οΈ Critical Warning
Not all tables should use this feature. Learn which ones to avoid.
The bottom line: Inherent Permissions let you write secure, maintainable code without compromising on functionality.
π Read Muhammad Ali Nasik Awan’s full guide on LinkedIn to master this essential BC development feature.
Your next extension deserves better security architecture.
Stop Wasting Time Renaming BC Report Downloads
Ever downloaded ‘Sales-Invoice.pdf’ for the 47th time today and thought “Which customer was THIS?!”
Shubham Rajawa just dropped a brilliant AL trick that’ll save you hours of file-renaming frustration.
The Problem We All Face:
You’re on a client call. You download a report. The filename? Generic. Useless. You waste precious minutes figuring out which document it is.
There’s a better way.
π― The Solution: Smart, Context-Rich Filenames
With just 3 lines of AL code, transform this:
β Sales-Invoice.pdf
Into this:
β
1001_Standard Sales - Invoice.pdf
Instant context. Zero confusion.
β‘ How It Works:
Subscribe to the OnGetFilename event and inject Record IDs, customer names, or any data you need directly into the filename.
The best part? It’s automatic. Set it once, benefit forever.
π‘ Why This Matters:
β No more mid-call scrambling
β Searchable file names
β Better document management
β Happier clients (and team!)
Shubham’s team saved hours last sprint with this trick.
π Grab the complete code snippet from Shubham Rajawa’s LinkedIn post and implement it in your next BC project.
Your downloads folder will thank you. π
The Secret File That’ll Save Your Team 10+ Hours This Week
Your new developer just cloned the repo. Now what?
“Hey, what extensions do I need?”
“Uh… let me make a list…”
30 minutes of back-and-forth later…
There’s a better way. And most BC developers don’t even know it exists.
Jeffrey Bulanadi just revealed the hidden VS Code file that eliminates setup chaos completely: extensions.json
π± The Problem:
Your team is working blind. Different extensions. Different tools. Different capabilities.
You say: “Just use the object designer.”
They say: “I don’t have that.”
Cue 15 minutes of troubleshooting. Again.
β¨ The Solution:
One file. One click. Everyone gets the same superpowers.
Before extensions.json:
β 30 minutes of setup questions
β Missing tools
β Inconsistent environments
β “I don’t have that extension” moments
After extensions.json:
β
Clone repo
β
VS Code asks: “Install recommended extensions?”
β
Click yes
β
Make coffee
β
Start coding
That’s it.
π‘ What Jeffrey Shares:
π― The extensions that actually matter (not just a random listβeach one solves a real problem)
π― Why your team needs identical setups
π― How to build your own extensions.json strategically
π― The quality control tools that caught his 73 warnings (and made his code noticeably better)
π― Translation nightmares solved with 3 extensions
π― API testing without leaving VS Code
π Pro Tip: Already know about Waldo’s AL Extension Pack? Jeffrey goes beyond the basicsβshowing you how to customize your setup with specialized tools for translations, API testing, and quality control that aren’t in the standard pack.
π The Real Win:
It’s not about the extensions. It’s about shared experience.
When everyone has the same tools, your team speaks the same language. No confusion. No “I can’t do that” moments. Just coding.
Jeffrey built his extensions.json over months of frustration and discovery.
Each extension earned its place by solving an actual problem.
π Read Jeffrey Bulanadi’s complete guide at learnbeyondbc.com and grab his ready-to-use extensions.json from the demo repo.
Stop fighting your editor. Start working like a team.
Manage Your BC Environments by Just Talking to AI
Stop clicking through Admin Center portals.
Stop memorizing API endpoints.
Just ask your AI assistant.
Stefano Demiliani just dropped YAMPI (Yet Another MCP for Pizza’s Injection π) β the MCP server that lets you manage Business Central tenants using plain English.
π€ The Old Way:
β Navigate through Admin Center
β Remember API documentation
β Switch between multiple tools
β Manually track environment states
β¨ The New Way:
Just type:
- “Show me all my Business Central environments”
- “Update the Sales Module app to version 2.0”
- “Create a new sandbox called Q4-Testing”
- “What’s the storage usage across all environments?”
And it happens. Just like that.
π What YAMPI Can Do:
28 administrative tools across 7 categories:
π Authentication – Intelligent token management, multi-tenant support
π¦ Environment Management – Create, copy, monitor, configure
π Application Management – View, update, uninstall apps
π Updates – Schedule BC version updates
π₯ Session Management – Monitor and terminate sessions
π§ Notifications – Manage alert recipients
β‘ Features – Activate/deactivate features on-demand
π‘ Why This Matters:
For admins: Streamline daily tasks with natural language
For DevOps: Automate environment management at scale
For consultants: Manage multiple client tenants effortlessly
For junior staff: Complex tasks through guided conversations
π― The Magic:
β Seamless authentication via Microsoft Entra ID
β Multi-tenant architecture for managing multiple BC instances
β Auto token refresh (50 minutes, no repeated logins)
β Works with GitHub Copilot, Cursor, Claude Desktop
β Enterprise-grade security β no credentials stored locally
β‘ Get Started in 2 Minutes:
Option 1 (VS Code): Install the D365 BC Admin MCP Extension from VS Code Marketplace
Option 2 (Direct): npm install -g @demiliani/d365bc-admin-mcp
That’s it. No API keys. No complex setup. Just start talking to your BC environments.
Stefano built this to scratch his own itch, then realized it could transform how we all work.
First revealed at Directions EMEA in Poznan. Now open-source and ready for production.
π Read Stefano Demiliani’s complete guide to see real-world examples, security details, and installation steps.
π Check the vs-code extension
Your BC environments are now just a conversation away. π
Break Through BC’s 350 MB Upload Limit
Hit the 350 MB wall trying to upload files to Business Central?
You’re not alone. And now there’s a solution.
Maxime Caty just open-sourced AL Large File Uploader Addin β a JavaScript add-in that smashes through BC’s built-in limit and lets you upload files up to 2 GB.
π€ The Problem:
Business Central’s UploadIntoStream() function caps out at 350 MB.
For manufacturers with large CAD files, distributors with massive product catalogs, or anyone dealing with video/media β this is a deal-breaker.
β¨ The Solution:
Upload files up to 2 GB using a clever JavaScript add-in approach:
πΉ Chunks the file into smaller pieces on the client side
πΉ Sends each chunk to the AL backend
πΉ Reassembles chunks using OutStream in AL
πΉ Maxes out at 2 GB (the AL Stream limit)
β‘ How It Works:
Instead of one massive upload, the JavaScript add-in:
- Splits your large file into manageable chunks
- Transmits each chunk individually to BC
- AL code writes each chunk to an OutStream
- Rebuilds the complete file on the server
Result: You bypass the 350 MB restriction entirely.
β οΈ The Trade-off:
Speed. This method is slower than the built-in UploadIntoStream() function.
Why? OutStream.Write() is slow when handling large Text variables, and AL’s limited variable type interoperability restricts optimization options.
But if you need to upload 500 MB, 1 GB, or approaching 2 GB? Slower is still better than impossible.
π― Perfect For:
β Manufacturers uploading large CAD/CAM files
β Media companies managing video/audio assets
β Distributors importing massive product catalogs
β Anyone hitting the 350 MB wall regularly
Maxime built this to solve a real-world limitation. Now it’s open-source for the community.
π Check out the AL Large File Uploader Addin on GitHub for implementation details and source code.
When 350 MB isn’t enough, go up to 2 GB. π
The One Property That Makes AI Understand Your BC APIs
You exposed your BC API through MCP. But how does AI know WHEN to use it?
Gerardo Daniel RenterΓa GarcΓa spotted something brilliant in BC 27.1 that changes everything: the AboutText property.
π€ The Problem:
AI assistants are powerful, but they need context. Without it, they’re guessing when to call your API.
User asks: “Show me all employees”
AI thinks: “Which API handles employees? What does it do? Should I use this one?”
Before BC 27.1: APIs were silent. No self-documentation. No AI guidance.
β¨ The Solution (BC 27.1+):
Microsoft added AboutText to APIV2 pages:
al
page 30017 "APIV2 - Employees"
{
APIVersion = 'v2.0';
EntityName = 'employee';
AboutText = 'Manages employee master data including
personal details, contact information, employment
status, job titles, payroll attributes, and banking
information. Supports full CRUD operations...';
}
This text becomes the AI’s instruction manual.
π― How It Works:
- You expose your API through BC MCP server
- AI reads the AboutText description
- User asks for employee data
- AI matches the query to your API’s description
- Correct API called automatically
The AboutText teaches AI what your API does and when to use it.
π‘ Gerardo’s Formula:
AboutText =
[What it manages] +
[What data it includes] +
[What operations] +
[What use cases] +
[What integrations]
π Why This Matters:
For API developers:
β Self-documenting APIs for AI consumption
β Better MCP integration
β Copilot Studio automatically understands your endpoints
For AI assistants:
β Know exactly when to call your API
β Match user intent to correct endpoints
β No more guessing which tool to use
π Pro Tip:
Check out Microsoft’s APIV2 pages in BC 27.1+ to see how they document their APIs with AboutText. Use them as templates for your own.
The difference between AI randomly calling your API and intelligently using it? AboutText.
π Read Gerardo’s full breakdown with code examples and MCP integration details at gerardorenteria.blog
Teaching AI to understand your APIs, one property at a time. β¨
The BLOB Field Problem Every BC Developer Hits (And How to Fix It)
Need to update a BLOB field dynamically, but you only have a FieldRef?
Welcome to one of AL’s trickiest corners.
Wayne Radue just shared the clean solution most developers wish they’d known earlier.
π€ The Problem:
You’re working generically with RecordRef/FieldRef (maybe looping through fields, maybe building a dynamic solution).
You hit a BLOB field: Picture, Document, CustomData…
You can’t just assign a value directly to a FieldRef pointing to a BLOB.
Now what?
β¨ The Solution:
Use an OutStream + TempBlob as the bridge:
procedure UpdateBlobFieldByFieldRef(
var RecRef: RecordRef;
FieldNo: Integer;
NewText: Text)
var
FieldRef: FieldRef;
TempBlob: Codeunit "Temp Blob";
OutStream: OutStream;
begin
FieldRef := RecRef.Field(FieldNo);
TempBlob.CreateOutStream(OutStream);
OutStream.WriteText(NewText);
TempBlob.ToFieldRef(FieldRef);
RecRef.Modify();
end;
That’s it. BLOB updated through FieldRef.
π Why This Works:
- FieldRef gets you to the BLOB field dynamically
- TempBlob acts as a staging area
- OutStream writes your data into the TempBlob
- ToFieldRef() bridges TempBlob β FieldRef
- Modify() persists the change
π‘ When You Need This:
β Building generic utilities that work across tables
β Looping through fields without hardcoding names
β Creating dynamic import/export solutions
β Working with BLOB fields in metadata-driven code
β Any time you have FieldRef but need to update a BLOB
π― The Key Insight:
Direct assignment doesn’t work with BLOB FieldRefs.
You need the TempBlob bridge pattern.
Once you know it, it’s simple. But finding it the first time? Hours of frustration.
Wayne just saved you those hours.
π See Wayne Radue’s full LinkedIn article for the complete code and explanation.
One pattern, infinite dynamic BLOB possibilities. π
Leave a Reply