Sign in

Alexander Drogin

@adrogin.bsky.social
115 followers 12 following 29 posts

Microsoft Business Central developer

PostsRepliesMedia
Alexander Drogin @adrogin.bsky.social · 15/07/2026
I just published AL Prettier version 0.4.1 - now fully functional AL language formatter. Until yesterday, it was lacking support of report extension objects. Now all AL objects can be parsed and printed. github.com/adrogin/al-p...
github.com
GitHub - adrogin/al-prettier: Prettier plugin for Business Central's AL language
Prettier plugin for Business Central's AL language - adrogin/al-prettier
010
Alexander Drogin @adrogin.bsky.social · 17/06/2026
I will also share this here, duplicating my post from LinkedIn. I published my demo app from #BCTechDays for anyone who wants to experiment with SQL locks acquired by various AL functions. github.com/adrogin/BCTe...
github.com
GitHub - adrogin/BCTechDays26: Demo app from my BC TechDays 2026 session
Demo app from my BC TechDays 2026 session. Contribute to adrogin/BCTechDays26 development by creating an account on GitHub.
030
Alexander Drogin @adrogin.bsky.social · 10/03/2026
This gives me a hint, something to look into. Thank you!
000
Alexander Drogin @adrogin.bsky.social · 09/03/2026
Since restrictive behaviour for the permission tests is the default value, I would assume that all tests must fail if permissions are not changed and the TestPermissions property is not explicitly set. Do you mean that this is the way it works now in 27?
100
Alexander Drogin @adrogin.bsky.social · 06/03/2026
Short post format left no space for details. :-) It was BC 26 upgraded to 27. And some more nuances. TestPermissions = NonRestrictive doesn't help, only Disabled does. And not every test fails, only around one out of three. Probably those accessing some specific tables, I'm not really sure.
200
Alexander Drogin @adrogin.bsky.social · 06/03/2026
Why could BC tests start failing all of a sudden with "Sorry, the current permissions prevented the action"? I've been running my tests for a while, but after upgrading the dev instance got this error. Setting TestPermissions = Disabled resolves it, but I'm curious what could have caused it.
120
Alexander Drogin @adrogin.bsky.social · 09/01/2026
SQL Server allows table rows to exceed the 8KB data page limit. But... some curious side effects can happen. www.keytogoodcode.com/post/another...
keytogoodcode.com
Another edge case of an overflowing record in a SQL table
As a follow-up to my previous post, I'd like to linger a little longer on the topic of wide rows and the effects of row overflow in SQL Server, and specifically on the storage impact that we can obser...
000
Alexander Drogin @adrogin.bsky.social · 03/09/2025
SetLoadFields function helps developers to avoid unnecessary table joins and reduce the amount of data sent over the network. But how significant is the benefit of a smaller dataset? When does it really make a difference? Some measurements in a blog post. www.keytogoodcode.com/post/perform...
keytogoodcode.com
Performance benefits of SetLoadFields in a slow network
Introduction of the SetLoadFields function in AL language that allowed to limit the number of fields returned to the Business Central server by a SQL query was a big step forward towards achieving bet...
021
Alexander Drogin @adrogin.bsky.social · 06/06/2025
It looks like I need to practice my skills in using the Ctrl+F function. I once asked how I could generate a hash with the Cryptography Management codeunit based on a binary key. Easy, it turns out. There is a function for this that accepts a base64 key. I just did not find it.
010
Alexander Drogin @adrogin.bsky.social · 31/05/2025
How can just in time loads be faster than a full record load? After all, this means two queries reading the same table. And two are slower than one, right? Right, but only if we allow these two queries to run until completion. www.keytogoodcode.com/post/jit-loa...
keytogoodcode.com
JIT loads vs Full record load
Since the time when I came across this post by Waldo (or actually, he mentioned his test results in one online discussion) I was curious to try it myself and dig into its unexpected results. The quest...
174
Alexander Drogin @adrogin.bsky.social · 30/05/2025
Which side are you on when it comes to the question whether SetCurrentKey is beneficial for data access performance in AL? Should we use it or drop it? I give a definite and unequivocal answer: it depends. www.keytogoodcode.com/post/to-sort...
keytogoodcode.com
To sort, or not to sort, that is the question
Back in the old Navision days, when clients' data were stored in the Navision native database instead of Azure SQL Server, and functions like FindSet and FindFirst did not exist in the AL language, ev...
261
Alexander Drogin @adrogin.bsky.social · 21/04/2025
If the other side was using a text key, this would make things easier for us. The key is actually a hex number shared as text, but they parse it into its actual hexadecimal value before running the hash function.
010
Alexander Drogin @adrogin.bsky.social · 19/04/2025
This could be another option for a contribution to the system app. The function that generates the hash must decode the Base64 string in this case. But as it is, the function would take the encoded string as the key.
100
Alexander Drogin @adrogin.bsky.social · 19/04/2025
Yes, that's what I was considering too. Just thinking that the developer experience would be a bit different from classic arrays, as we cannot allocate a specific amount of memory, but have to add one element at a time.
000
Alexander Drogin @adrogin.bsky.social · 17/04/2025
It could be on overload. Although AL is generally not too good in manipulating byte arrays. Would it even be a good idea to to have a function accepting a list of bytes, considering that AL arrays can only have fixed size?
100
Alexander Drogin @adrogin.bsky.social · 17/04/2025
I can't see any way around it, but maybe someone has an idea how to generate a hash in AL with a byte sequence as a key instead of a text string?
100
Alexander Drogin @adrogin.bsky.social · 17/04/2025
I have a good question for #bcalhelp. I need to generate a hash with a function from Cryptography Management CU, which requires a text argument as the key. But I need to send a byte array. Text in AL is UTF-8, so bytes above 7F turn into 2-byte sequences, and my key never matches the counterpart.
200
Alexander Drogin @adrogin.bsky.social · 12/04/2025
@nataliekarolak.bsky.social has been concerned about the lack of activity on BSky. I have a suggestion. How about garbage collection? Seems to be a good topic to talk about. www.keytogoodcode.com/post/garbage...
keytogoodcode.com
Garbage collection of event subscribers
I once wrote a post on event subscribers and the presumed performance benefits of single instance subscriber codeunits, but the topic keeps reappearing every now and then, and I feel it could be a good idea to add a few more arguments to the same old debate. Because why not run a few useless, but highly entertaining tests on a Saturday evening.One statement in defense of the single instance event subscribers is that the subscriber codeunit does not have to be disposed after the execution and rem
252
Alexander Drogin @adrogin.bsky.social · 22/03/2025
I worked a little more on the BC cost tracer and added a couple new features: node grouping and a new layout with the fCoSE algorithm, which is very efficient in compound nodes clustering. Thanks to this algorithm, item ledger entries can be grouped by the document no. github.com/adrogin/BCVi...
github.com
GitHub - adrogin/BCVisuals: Visual control add-ins for Business Central
Visual control add-ins for Business Central. Contribute to adrogin/BCVisuals development by creating an account on GitHub.
030
Alexander Drogin @adrogin.bsky.social · 13/03/2025
Looking forward to be on stage at @bctechdays.com with @stefanmaron.com
0104
Alexander Drogin @adrogin.bsky.social · 04/03/2025
And the blank message in this lig entry does not help either. It would be worth adding something meaningful.
100
Alexander Drogin @adrogin.bsky.social · 04/03/2025
Search in the repository points to Master Data Management in ALAppExtensions, just a feature usage log.
110
Alexander Drogin @adrogin.bsky.social · 03/03/2025
No other method I'm aware of. And this way, it looks good. It's a clear intention: "I'm only going to use these fields". And then the runtime will adjust the list anyway, if any other fields must be included.
030
Alexander Drogin @adrogin.bsky.social · 24/02/2025
InStream/OutStream are essentially memory buffers with read/write pointers. In this snippet, CreateInStream instantiates the stream, but does not read the data, whilst ReadAs actually fills the buffer. I don't see as a hack, but it surely can be confusing.
020
Alexander Drogin @adrogin.bsky.social · 22/02/2025
I almost never use the return value of the Insert function in AL, but recently I found it useful in avoiding a specific deadlock situation. And the deadlock itself was a very curious one. www.keytogoodcode.com/post/buffere...
keytogoodcode.com
Buffered inserts and deadlocks
Recently I was debugging a very interesting deadlock case which I want to share in a blog post now. It was especially curious because, as it turned out, it was caused by the Business Central's bulk in...
083
Alexander Drogin @adrogin.bsky.social · 14/02/2025
The holidays are almost over, next week I am back to work and other Business Central activities. But these two weeks made a great breakaway tour.
040
Alexander Drogin @adrogin.bsky.social · 06/02/2025
Are you afraid of filters on FlowFields in AL? Well... There is definitely a reason to be cautious. But it may not be as bad as it seems, and certainly not as bad as some other methods which are used to avoid these filters. www.keytogoodcode.com/post/filteri...
keytogoodcode.com
Filtering on FlowFields
It has been said so many times that filtering on FlowFields is bad for performance that we are used to avoiding this kind of filters in AL at all costs. So whenever a developer needs to select a subse...
2103
Alexander Drogin @adrogin.bsky.social · 21/12/2024
Following my series of posts where I've been addressing various aspects of table indexing, this post delves into the same argument from a different point of view. Now I want to ask a question: how indexing impacts query performance from the insert/update side. www.keytogoodcode.com/post/table-i...
keytogoodcode.com
Table indexes and inserts
Following my series of posts where I have been addressing various aspects of table indexing, this post delves into the same old argument from a different point of view. Previously, I measured timings ...
052
Alexander Drogin @adrogin.bsky.social · 25/11/2024
Did you ever get confused with Business Central's temporary tables and the way temp tables are passed to procedure parameters? I did too, so I wrote a post as a memo. www.keytogoodcode.com/post/tempora...
keytogoodcode.com
Temporary tables in procedure parameters
When we declare multiple instances of a record variable referencing the same table in AL code, we essentially receive different instances of the active record, but the same underlying database table b...
0103