Comparing .NET values

  • Reading time:1 min read

When comparing .NET variables, including Enums, you cannot use C/AL comparison operators. To compare .NET variables, you must use the Equals method (of the System.Object type) that all .NET types implement or inherit. So, instead of IF var1 = var2, or IF var1 = var1.EnumValue (in case of an Enum), just write IF var1.Equals(var2), or IF var1.Equals(var1.EnumValue).

I see this mistake often being made or attempted by developers, even though it has been documented inside .NET Interoperability documentation since it was introduced with 2009 R2.

Continue ReadingComparing .NET values

Directions EMEA 2015 Session Content

  • Reading time:2 mins read

For me, Mannheim was always a yet another German city, one that beyond its name I knew nothing else about. When it was announced that Directions EMEA 2015 would be in Mannheim, my first reaction was “say what?” And yet, just as last year in Poznan, I was pleasantly surprised, and realized that every place has something to show, spirit to share, and energy to bring.

There are very few conferences that matter to me. One of them is Directions EMEA, and this year it’s the fourth time that I got a chance to speak and share my ideas and hacks with the community. As promised, and in line with my never-broken tradition, I’m publishing all my content on my blog for you to download.

Continue ReadingDirections EMEA 2015 Session Content

What’s New in NAV 2016: Code Editor

  • Reading time:4 mins read

Three years ago I was doing a presentation about something or other about NAV at a non-NAV conference. That’s in front of normal developers. And you can imagine what their impression was of the state of the technology when, in front of a couple of hundred mostly C# developer, I opened the C/AL editor.

I don’t need to be concerned about that anymore, because Microsoft Dynamics NAV 2016 comes with a new code editor, which comes with a number of features the whole NAV community way hoping for since I remember. And I started forgetting a long time ago.

Namely, we now have:

  • Proper syntax highlighting
  • Line numbers
  • Change indicators
  • Auto-complete intellisense style. Ish.
  • Syntax tooltips
  • And – hold your seats! – undo!
Continue ReadingWhat’s New in NAV 2016: Code Editor

Off-topic: A C# lesson learned about conditional operators

  • Reading time:3 mins read

If it was hard to write, it should be hard to understand, that’s an unwritten rule-that-rules-them-all of programming. You absolutely love to apply syntactical stunts to impress your coworkers, especially if you do C# and they don’t, don’t you?

One of those stunts (at least from C/AL) perspective is a C-language type common feature known as conditional operator. It allows you to write this:

a = b ? c : d;

when you would normally (in C/AL, for example) get more eloquent:

if (b == true)
{
    a = c;
} else {
    a = d;
}

This (b == true) could have been replaced with just (b), but I put it there for clarity.

But! (There is always a “but”!)

Continue ReadingOff-topic: A C# lesson learned about conditional operators

Capturing unhandled errors in JavaScript Control Add-ins

  • Reading time:3 mins read

Not that I am saying it’s a good thing, but trial and error is a fairly common approach to debugging in the NAV world. We’ve all done it. Heck, even with the comprehensive testability framework built in, we all still do it more often than we’re happy to admit while sober.

But the overlord of trial and error in NAV is development of control add-ins in JavaScript. JavaScript itself is making it difficult in the first place, and then integration with NAV makes it even harder.

There is one situation in particular that’s adding a cherry on top of all of problems, and it’s the creepy “A script error has occurred” error message. It’s the equivalent of the BSoD.

Continue ReadingCapturing unhandled errors in JavaScript Control Add-ins

Careful with Microsoft.Dynamics.NAV JavaScript object

  • Reading time:1 min read

Make sure that you don’t access the Microsoft.Dynamics.NAV JavaScript object before the document ready event fires. If you do so, you might experience problems on Chrome when the user refreshes the browser (F5). It appears that on refresh Chrome loads (and runs) scripts in different order, and depending on how complex scripts included in your project are, your code might get executed before Microsoft’s script is loaded, and it will cause nasty script errors. This occurs only on Chrome on PC.

Continue ReadingCareful with Microsoft.Dynamics.NAV JavaScript object

Client Extensibility Demos

  • Reading time:2 mins read

On Monday, June 15th I have delivered another session in Microsoft’s Road to Repeatability series of online demos about technical NAV features, this time covering Client Extensibility. The session went through both the .NET and JavaScript aspects of client extensibility, and again – I promised to post all of the demos and content from the session on my blog.

So, here it is, given as-is, with no guarantees or strings attached, just the plain content for you to see if you can make any sense out of it.

Now my to-do list has grown quite big with the stuff that I want to blog, and it includes presenting and explaining most of the concepts I showed in my presentation. So, keep your fingers crossed that I find just enough time to blog about all those small things that have found their way into my presentation, but never into real blog posts that take them inside out and explain in-depth what they are and how really they work.

Of course, you are still free to use any of this in any real, or unreal life scenarios.

Continue ReadingClient Extensibility Demos

Server Extensibility Demos

  • Reading time:1 min read

Yesterday, as a part of Microsoft’s Road To Repeatability program, I delivered a live meeting session about server extensibility in NAV in which I focused on certain areas of .NET Interoperability and Web Services that in my opinion align well with the R2R message.

As promised, here are the materials from the presentation:

I provide this as-is, with no comments, documentation or anything – you are free to use any of these materials in your projects, and I welcome your questions here about presentation content and demos. I’ll do my best to answer them on my earliest convenience.

I hope you enjoyed the presentation yesterday (if you were attending) and that you find these materials useful.

Continue ReadingServer Extensibility Demos

Automatically Confirm cmdlets

  • Reading time:1 min read

Some NAV PowerShell cmdlets (such as Import-NAVApplicationObject) don’t have the -Force switch, and always ask for confirmation regardless of whether you include the -Confirm switch or not.

To work around this, append the –Confirm:$false switch to such command. That sets the ConfirmPreference to none for an individual command, and confirms its confirmation dialogs.

Continue ReadingAutomatically Confirm cmdlets