Monday, April 8, 2019

Workaround to new error during import of security setup

As a new feature to the security setup export and import, Microsoft has added information about objects being disabled/deleted, so the receiving system is able to pick that up too.

But if you both update an object and then disable it, you have created a combination of actions that cannot be imported. This is the error you'll get during import:

The technical reason reason is that the import deals with deleting/disabling objects before it deals with the updates. So when it gets to the update part, it cannot find the object.

The workaround is to pull out your best scissor software and cut out the update part of the XML. Here is an example where I have tried this with the TestEssentialsRole role:

Surprisingly to me is that this, according to MS support, works exactly as designed.

Thursday, April 4, 2019

Missing articles from

Microsoft is apparently doing some spring cleaning and streamlining of their different blogs, so you'll probably notice articles being removed from

Some articles are moved to another blog platform over the spring, and some are just gone.

Well, not totally gone. The Wayback Machine project has been able to help me out with a couple of articles I was missing.

For example this one:

Wednesday, April 3, 2019

Debug external assemblies

Recently I have had the need to understand what was going on inside one of the exchange rate import providers and also the security settings import. Both are only delivered as dll's, which you can find in the bin folder.

To see a decompilation of the code in the assembly, there are several different tools you can use to load it. These are the ones I have some experience with:

They all have that in common that you open the tool, select the dll of the assembly and let the tool decompile it. Here is an example of how that could look for the exchange rate provider I was looking into:

You can also use these tools to look into compiled label files. I sometimes use that when I need to find a particular translation. That could look like this (the language is danish if you wonder):

For the security settings import issue I had a need to debug it to figure what was going on, and in the following I'll try to explain how to do that in the most simple terms as possible.

To be able to debug you need to a have some symbol files. The .NET Reflector Visual Studio integration has a tool for generating these from the compiled dll:

In the following dialog you choose the assembly:

When the PDB's are generated, you can see that a new symbol location has been added to the debugger options:

A few other properties in the debugger options needs to set in a particular way:

Now just add a breakpoint to wherever X++ calls out to the assembly, and you are all set.

Here is a screen clip from a session:

The experience it not totally perfect. The watch windows has problems with some variables and objects because of some "optimization" going on. Check the last link in this article, for a suggestion on how to deal with that.

You must be an administrator to install these tools on the developer box. That means the box must be cloud hosted and not Microsoft hosted.

As an MVP I have been offered a free license of .NET Reflector from Redgate. That is why I'm able to use this particular product for the example.

And I got great value from reading these blog posts, to figure how to setup .NET Reflector debugging:
Disabling Optimizations when Debugging .NET Framework Source Code