Week 46 – Devoxx Morocco

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. πŸ‡²πŸ‡¦βœ¨

Chatting with Stephan Janssen, the founder of Devoxx, amazing conversation about tech, community, IA and innovation!

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:

  1. Splits your large file into manageable chunks
  2. Transmits each chunk individually to BC
  3. AL code writes each chunk to an OutStream
  4. 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:

  1. You expose your API through BC MCP server
  2. AI reads the AboutText description
  3. User asks for employee data
  4. AI matches the query to your API’s description
  5. 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:

  1. FieldRef gets you to the BLOB field dynamically
  2. TempBlob acts as a staging area
  3. OutStream writes your data into the TempBlob
  4. ToFieldRef() bridges TempBlob β†’ FieldRef
  5. 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. πŸš€


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *