One of the things we developers and consultants miss the most from the “Classic Times” is the ability to run a table to edit the data. Sure we can run a table from the Developement Environment but we are not always working with direct access to the SQL database.

My solution is to have a Page running on the object table (Table2000000001). From the page I can start Pages, Reports, Codeunits and XML Ports directly with a simple line of code, but to start a Table is more complex.

The first solution was to use HYPERLINK on the result from the GETURL function. That works fine in a local environment, but when you have installed multiple Dynamics NAV versions or running Dynamics NAV from a ClickOnce installation things start to break.

To fix this I stop using HYPERLINK and start the Dynamics NAV client with arguments to run a table. First step is to find the current client path. This path can be the usual System Drive path but it can also be a User Application Path if using ClickOnce. The function to locate the client path uses DotNet.

[code] PROCEDURE GetClientPath@1100408003() : Text;
ClientAssembly@1100408001 : DotNet "’mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089′.System.Reflection.Assembly" RUNONCLIENT;
ClientPath@1100408000 : DotNet "’mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089′.System.IO.Path" RUNONCLIENT;
ClientAssembly := ClientAssembly.GetExecutingAssembly;

And based on the client Path I look for the ClientConfiguration.config file and start the client with the GETURL results.

[code] LOCAL PROCEDURE ViewRecords@1100408000();
AddinMgt@1100408000 : Codeunit 10000207;
PathHelper@1100408008 : DotNet "’mscorlib’.System.IO.Path";
ClientFileHelper@1100408007 : DotNet "’mscorlib’.System.IO.File" RUNONCLIENT;
ClientProcess@1100408005 : DotNet "’System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089′.System.Diagnostics.Process" RUNONCLIENT;
ClientProcessWindowStyle@1100408004 : DotNet "’System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089′.System.Diagnostics.ProcessWindowStyle" RUNONCLIENT;
ClientProcessStartInfo@1100408003 : DotNet "’System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089′.System.Diagnostics.ProcessStartInfo" RUNONCLIENT;
StartCommand@1100408002 : Text;
ArgumentList@1100408006 : Text;
ClientPath@1100408001 : Text;
ClientConfigurationPath@1100408009 : Text;
ClientPath := AddinMgt.GetClientPath;
ClientConfigurationPath := PathHelper.Combine(ClientPath,’ClientUserSettings.config’);
IF ClientFileHelper.Exists(ClientConfigurationPath) THEN
ArgumentList := STRSUBSTNO(‘-settings:"%1" ‘,ClientConfigurationPath);
ClientPath := PathHelper.Combine(ClientPath,’Microsoft.Dynamics.Nav.Client.exe’);
ClientProcessStartInfo := ClientProcessStartInfo.ProcessStartInfo(ClientPath);
ClientProcessStartInfo.Arguments := ArgumentList;
ClientProcessStartInfo.WindowStyle := ClientProcessWindowStyle.Normal;
ClientProcess := ClientProcess.Start(ClientProcessStartInfo);

To repeat my last comment, just use DotNet 🙂

5 thoughts on “Run a Table in NAV

  1. Dave Machanick says:

    Your code references: AddinMgt@1100408000 : Codeunit 10000207
    I don’t have this codeunit, and nothing in its range. Is this a downloadable codeunit or is it an ISV add-on?


    1. You are correct Dave, I am referencing a codeunit that is non included, but the function that I am using from that codeunit is the one I showed as the first code part. You can put this in you own codeunit or in the same object as the main one.

  2. Dave Machanick says:

    I have it running in NAV2013R2, but put your codeunit code in a function in the page instead.
    Is there a reason for putting it into a codeunit – re-usability /style/ ?
    I was a little disappointed the GETURL command is not supported in NAV2013 – any workaround for this?
    Also, since this would be a nice tool to give some end users for viewing only, is there a way of making the table being run non-editable?

    Overall, a very nice addition to NAV.

    1. Hi Dave

      You can manually create the URL created by GETURL if you read the configuration from the instance. Here is how
      A non-editable table is not possible. You will need to create a dedicated page or make sure that the user does not have permission to modify the record.
      I grabbed the ClientPath function from a codeunit that I created to download and install add-ins, you can find that here

      Thanks for the feedback Dave.

  3. Yuriy says:

    I have same point – “..have installed multiple Dynamics NAV versions” in network. The one from this list of databases is Native database 5.0
    And I have question – may be you know way how to reach exact vendor in NAV 5.0 Native from NAV2015?

Leave a Reply

%d bloggers like this: