AL Object ID Ninja
Zero-configuration, dead-simple, lightning fast, no-collision object ID assignment for multi-user repositories
- No collisions, ever: Real-time, conflict-free ID assignment that always gives every developer a guaranteed unique object ID.
- Lightning-fast: Get your conflict-free object IDs instantly, with IntelliSense integration.
- Zero-configuration: No setup, no onboarding, no settings — you work exactly like before, and it silently keeps your IDs clean.
From the blog
Detecting current object type and ID using some funky .NET Interop
Did you ever need to identify the current object type and ID, programmatically, from within the object? For example, detecting the current table ID in a table trigger like this guy? Or current codeunit ID from inside the codeunit?
Why would you need something like this? If you are inside a trigger in, say, table 18, you do know that you are in the table 18, and you can refer to it as 18 or DATABASE::Customer, right? Yes, but this is hardcoding. If you move this code to a different table you’d have to change the hardcoded constant to whatever that other table is.
Microsoft was well aware of the need to know the currently running object ID in some cases, because there is the OBJECTID function to the CurrPage and CurrReport built-in objects. However, for tables, codeunits, XMLports, and queries, there is nothing of the sort.
Now, using .NET Interop, you can easily (well, easy is relative) get this info.
Detect file encoding in C/AL using .NET Interop
When importing files using XMLports, and especially when handling text files, file encoding is important. If the XMLport expects ASCII, and you feed it UTF-8, you may get scrambled data. If you have mismatching unicode input files, it may just fail altogether. Therefore, making sure that encoding is correct before you actually start gobbling input files might be important.
At least it was for me. I am currently automating data migration for a major go-live, and I am feeding some 30 input files to NAV, and I want to make sure they are all encoded correctly before I enter a process which would take another geological era to complete.
Detecting encoding is not something that pure C/AL can help you with, so I naturally went the .NET way. My position is that there is nothing a computer can do that .NET cannot. My another position is that there is no problem that I have that nobody before me ever had. Combining these two, we reach a yet another position of mine, that there is nothing that computer can do, of which there is no C# example, and typically I look for those on http://stackoverflow.com/
So, here’s the solution.
A .NET Interoperability Lesson: Mapping indexed properties to C/AL
Indexed properties are commonly used in C# because they allow a lot of syntactical flexibility, and make the code more readable, and easier to follow. Indexed properties are very similar to C/AL array indexing, except for two important differences:
- In C/AL, indexer is always 1-based. In C#, indexers are 0-based.
- In C/AL, indexer is always an integer. In C#, indexers can be any type.
These two examples show these differences:
- Go to the previous page
- 1
- …
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- …
- 161
- Go to the next page
