How to: Create an automation for usage in Navision

The development of a COM component with .Net for usage in Navision needs a special approach. Start with a new C# project, project type Class Library. Set the project to “Make assembly com-visible”. The simple automation provides a string property and a method to show a .net message box.

// a sample codeusing System;using System.Runtime.InteropServices;using System.Windows.Forms;namespace SampleAutom{ // the interface, so that the methods and properties are shown in Nav // needed attributes InterfaceType and Guid [InterfaceType(ComInterfaceType.InterfaceIsDual)] // create a new Guid [Guid("9304DD04-5EF0-498E-893E-CB644CD34656")]  interface IMyInterface {  // set a DispId for each method/property  [DispId(1)]  int MsgBox(string message);  [DispId(2)]  string Title { get; set; } } // class attributes [ClassInterface(ClassInterfaceType.AutoDual)] [Guid("D9E556F3-4D85-45C9-965A-DB3D918528CD")] // implement the interface public class TestCom : IMyInterface {  string _title = "Dynamics Nav";  public TestCom()  { }  // with property Title you can set/read the title of the msgbox  public string Title  {get{ return _title; }  set{ _title = value; }  }// method msgbox returns an integer value according the clicked button  // Yes = 6, No = 7, Cancel = 2  public int MsgBox(string message)  {var result = MessageBox.Show(message, Title,MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);return (int)result;  } }}

To install the new automation run visual studio in admin mode. after restart and loading the project build/compile the project.

Now start Navision and create a new codeunit. In the OnRun trigger add following code:

// TestCom, Automation, 'SampleAutom'.TestCom // RetVal, Integer CREATE(TestCom);TestCom.Title := '.Net Msgbox run in Navision';RetVal := TestCom.MsgBox('Your message text ...');MESSAGE(FORMAT(RetVal));CLEAR(TestCom);

Now run the codeunit. It results in:

    

cheers