Please add block possibility to Permission table

Yesterday I suggested to Microsoft an enhancement to the permission functionality.  That was an informal suggestion so I logged into Microsoft Connect and added a formal suggestion.

In table 2000000005 Permission we can assign permission to objects.  In the Classic Client we had the possibility to assign permissions to objects with the type System.  This is not working in the NAV 2013 (R2) client.

This causes a problem, for example a user with SUPER (Data) permission can delete a company from the database.

I suggest that a new option be added to fields 6, 7, 8, 9, 10 in the above table.
Current option string is ” ,Yes,Indirect”
The new option string would be ” ,Yes,Indirect,Blocked”

If an access type is blocked in any permission entry the access will be blocked even if there is access in another permission set.

I would for example add a line to the Permission table for the SUPER (Data) permission set that will block Insert, Modify and Delete for table 2000000006 Company.

Please help me by voting for the suggestion.

A Table Hook to minimize the upgrade work

In a line with the methods introduced by Partner Ready Software I am now upgrading old code to NAV 2013 R2 with the goal to modify the standard objects a little as possible.

I don’t recall Mark, Waldo, Gary or Vjeko speaking about a Table Hook but I decided to go that way anyway.  As an example I have about twenty new field for the Customer Table.  Instead of creating these fields in table 18 I create a new table that I call Customer Hook.  The Hook Table must include the fields from the primary key and the primary key it self from the Master Table.

CustomerHook

The only modification I do in table 18 is a new function

GetHook

In a code where I need to access the new custom fields I use this function to get the Table Hook to work with.

In the Hook table I have a few functions.

HookFunctions

Next I created a Codeunit to hook to the global triggers in Codeunit 1.  This Codeunit forwards the triggers from Codeunit 1 to the Hook Table.

DbHookCodeunit

I need to add four lines to Codeunit 1.

Codeunit1Changes

When all this is ready I am able to create or extend the Customer Page.  Here it is easy to mix together fields from the Customer Table and the Customer Hook Table.

PageFields

For the fields from the Hook Table I can add a Table Relation and a Validate code.

CodeValidate

On the Page I create a local function

SaveFunction

and finally make sure that I get the Hook table matching the Customer on the Page.

GetHookOnPage

Is Rapid Start slow ?

In the original version of RapidStart Services, that was shipped with NAV 2013 R2, Microsoft was using the Table Information table to collect no. of records for each table.  This was very slow as soon as you added more companies to the database.  A coworker showed me this problem and I changed the functionality and sent a suggestion to Microsoft on how to change this.

And what do you know, they did exactly that.  In the Update Rollup 3 for Microsoft Dynamics NAV 2013 R2 this has been fixed.

I also sent them an error regarding a local formatted date formula.  And they fixed that to.

Good job Microsoft.

InvalidSecurity error when connecting to a NAV Server

For a few weeks I have been running an Internet facing NAV Server.  This server is using “NAVUserPassword” authentication and a SSL certificate.

Everything was working as planned until a few days ago when I was using my PowerShell scripts to install the newest knowledge base package, Update Rollup 3 for Microsoft Dynamics NAV 2013 R2 (Build 36035).

When I opened the client after the update a new version was downloaded and started.  However, I got an error.

FaultCode = „InvalidSecurity“
Reason = „An error occurred when verifying security for the message.“

I rolled back the upgrade and tried again with the same error.  This was the strangest thing.

The Web Client was working perfectly but not the Windows Client.

As I was walking and wandering the solution dropped in.  I recognized that a secure connection is established with by using the date and time of both the client and the server.  I sat back down and checked – the clock on my server was 6 minutes late!

I set the clock and retried the connection – successfully !

I then configured my server to synchronize the clock with a time source like is shown here or here.