Microsoft Dynamics NAV

Team Blog

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 1 for Microsoft Dynamics NAV 2015 has been released

    • 46 Comments

    Cumulative Update 1 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2015. 

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find Cumulative Update 1

    You can download the cumulative update from KB 3013215  – Cumulative Update 1 for Microsoft Dynamics NAV 2015 (Build 38457). The cumulative update was temporarily unavailable for download, but it is now available again. The new set of download packages contain the DVD image and the Application folder only. The files in the new download packages have the exact same build number as the files in the original download. The new download will give you the same options for patching both new and current installations of Microsoft Dynamics NAV 2015. You can either install the new image or you can unpack the image and copy/paste files from the DVD folder structure.

    Upgrade Toolkit for Upgrading Data from Microsoft Dynamics NAV 2009 R2 or SP1 to Microsoft Dynamics NAV 2015

    The cumulative update includes an upgrade toolkit for upgrading a Microsoft Dynamics NAV 2009 R2 or Microsoft Dynamics NAV 2009 SP1 database to Microsoft Dynamics NAV 2015. The upgrade toolkit includes several application objects in FOB files that simplify the upgrade process for those of you coming from Microsoft Dynamics NAV 2009 R2 or Microsoft Dynamics NAV 2009 SP1. For more information, see the attached whitepaper.

     

    ---- This blog post was updated on 13. November 2014 ---- 

     

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 13 for Microsoft Dynamics NAV 2013 R2 has been released

    • 5 Comments

    Cumulative Update 13 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013 R2.

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find Cumulative Update 13

    You can download the cumulative update from KB 3013214  – Cumulative Update 13 for Microsoft Dynamics NAV 2013 R2 (Build 38455). 

    For a full list of all hotfixes included in cumulative updates for Microsoft Dynamics NAV 2013 R2, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource

    For more information about cumulative updates for Microsoft Dynamics NAV 2013 R2, see Announcement of update rollups for Microsoft Dynamics NAV 2013 R2.

  • Microsoft Dynamics NAV Team Blog

    Analysis by dimensions to check performance in the Manufacturing

    • 1 Comments

    This is a topic where we could benefit of analyzing our performance in the manufacturing área by using dimensions. Here, we had different inquiries where I believe it is good to explain what is our view about. As SCM individual we can benefit of using dimensions to have a different view of the Manufacturing área at an aggregated level:

    • Check variances posted to G/L
    • Analyze scrap and determine corrective actions
    • Analyze capacity or operation times posted against expected

    From a dummy level perspective, a dimension is the "label" we add to our entries so we could later analyze this at an aggregated level instead. The way we are using dimensions when we are posting is what we are trying to clarify here.

    First, let me clarify the acronyms I am using here:

    • PO – Production Order
    • POL – Production Order Line
    • POC – Production Order Component
    • POD – Production Order Dimension
    • POLD – Production Order Line Dimension
    • POCD – Production Order Component Dimension
    • ID – Item Dimension

    Now, let me clarify the different scenarios we might be facing here when analyzing manufacturing with dimensions:

    1. PO has dimensions and Refresh
      1. POL: POLD should have POD + ID. If POD and ID contain the same Dimension Code then value from POD is used.
      2. POC: POCD should have POLD + ID. If POLD and ID contain the same Dimension Code then value from POLD is used
    2. PO doesn’t have any dimension and Refresh
      1. POL: POLD should have ID.
      2. POC: POCD should have POLD + ID. If POLD and ID contain the same Dimension Code then value from POLD is used.
    3. User changes POD (value only) and gets confirmation dialog for each updated dimension, if the line(s) should be updated (POLD)
      1. POL: POLD should have POD + ID. If POD and ID contain the same Dimension Code then value from POD is used.
      2. POC: POCD should have POLD + ID. If POLD and ID contain the same Dimension Code then value from POLD is used.
    4. User changes POLD (value only) and gets confirmation dialog for each updated dimension, if the components should be updated (POCD)
      1. POC: POCD should have POLD + ID. If POLD and ID contain the same Dimension Code then value from POLD is used.
    5. User deletes POD and gets confirmation dialog for each deleted dimension, if the line(s) should be updated (POLD)
      1. POL: POLD should keep all dimensions except deleted one
      2. POC: POCD should keep all dimensions except deleted one
    6. User deletes POLD and gets confirmation dialog for each deleted dimension, if the components should be updated (POCD)
      1. POC: POCD should keep all dimensions except deleted one

     Now, what about if I have a different customer process when analyzing the performance in my Manufacturing area? You still can use Default Dimension Priorities to define your own priorities here. That is under Financial Management module.

  • Microsoft Dynamics NAV Team Blog

    Zetadocs Express support for Microsoft Dynamics NAV 2015 is here!

    • 17 Comments

    Equisys announced today, that Zetadocs Express now supports Microsoft Dynamics NAV 2015 and the new Microsoft Dynamics NAV Tablet Client.

    Take a tablet

    Microsoft Dynamics NAV 2015 adds a new touch optimised Tablet client, introduced to improve control of the user experience on various sized tablets (7” is the minimum size really), and is the preferred client for tablets compared to the Web client in a browser.

    The Tablet client is also available as an app on Apple iTunes, Google Play and the Windows Store. Functionality between tablets is largely the same, except iPads do not allow direct access to the file system. However, with Zetadocs Express on the iPad, you can still easily capture photos with the camera or the camera roll. Other tablet operating systems allow access to the tablet file system in order to choose files and other documents on the go.

    Once captured they are then stored permanently in the electronic document archive and shown in context in the Document FactBox.

     

    Works with the Microsoft Dynamics NAV you have

     

    The Tablet client now increases the number of Microsoft Dynamics NAV clients to three; with a Web client and the traditional Windows client (RTC), and Zetadocs Express has them all covered.

     

    In fact, Zetadocs Express offers broad platform support, from the very latest version of Microsoft Dynamics NAV 2015, all the way back to Microsoft Dynamics NAV 2009 SP1 and everything in between.

     

    Proven quality with CfMD

     

    Version 7 of Zetadocs for Microsoft Dynamics NAV was one of the first software solutions worldwide to be awarded Certified for Microsoft Dynamics (CfMD) for Microsoft Dynamics NAV 2015. The Certified for Microsoft Dynamics (CfMD) logo is version specific, giving Microsoft Dynamics customers the confidence that the add-on solution they have chosen has met the comprehensive testing guidelines updated with each version of Microsoft Dynamics NAV.

     

    Download Zetadocs Express now!

     

    Zetadocs Express is a no-cost downloadable document management module for Microsoft Dynamics NAV, download it now and try out mobile document management with the Microsoft Dynamics NAV 2015 tablet client today!

     

  • Microsoft Dynamics NAV Team Blog

    Report Execution Insights

    • 6 Comments

    With the release of Microsoft Dynamics NAV 2015, the way reports are executed has changed. In Microsoft Dynamics NAV 2015, reports can use a built-in RDLC layout (as before), a built-in Word layout, or a custom layout, which can be based on RDLC or Word. Built-in layouts are part of the report object, while custom layouts are stored in table 9650 Custom Report Layout of the database. The new behavior relies on a few new functions in codeunit 1. Additionally, Microsoft Dynamics NAV 2015 introduces the capability to schedule a report for execution later. This functionality also relies on codeunit 1 triggers, as well as a few new C/AL functions.

    Report Execution

    This section explains what happens behind the scenes when a report is executed. A report is executed when any of the following happen:

    • From the client, a user chooses Preview, Print, or Microsoft Excel, Microsoft Word, or PDF on the report request page.
    • C/AL code executes the following functions:
      • RUN or RUNMODAL without a request page.
      • SAVEAS, SAVEASEXCEL, SAVEASPDF, SAVEASWORD, or SAVEASXML.

    Report Execution Flow

    The following figure illustrates the sequence of interactions between the platform and codeunit 1 functions when a report is executed.

    1. The report execution calls the HASCUSTOMLAYOUT function in codeunit 1 to determine whether the particular report is currently set up to use a custom RDLC or custom Word layout.

      If the report does not use a custom layout (that is, the function result is 0), then the report will use the default built-in layout, which can be either RDLC or Word as specified by the DefaultLayout property of the report object.

      Note: This is function is called before the request page is shown to the user because some of the Print button options on the request page depend on whether the report uses and RDLC layout or Word layout.

    2. If the report is set up to use a custom Word layout or a built-in Word layout, then the MERGEDOCUMENT function is called to handle the report execution.
    3. If the report is set up to use a custom RDLC layout, then the REPORTGETCUSTOMRDLC function is called to handle the report execution. The function returns the custom RDLC in a text string as XML. 

    Word Report Layout Execution

    The execution of reports that use Word layouts consists of two parts: design time and run time.

    • Design time

    To enable the user to map report dataset fields to the Word document that defines the layout, the system must generate an XML document (schema) that can be imported into Word. This XML document is generated by the REPORT.WORDXMLPART function. You must use Word 2013 (or later) for XML mapping. However, you can use Word 2010 for basic editing of the layout, such as changing font type or size.

    • Run time

    When report is executed, the report data output is merged with the Word layout to produce the final report. The report data output is in XML format which has the same form as the output of the REPORT.SAVEASXML function. The merge operation uses the .NET Framework assembly Microsoft.Dynamics.Nav.DocumentReport. The merge operation happens on the Microsoft Dynamics NAV Server and it uses additional.NET Framework components, such as Open XML SDK 2.5. Word is not required on the computer that is running Microsoft Dynamics NAV Server. If the user has requested to view the report as a PDF document, then the Word document is converted from a .docx file type to a .pdf file type by the .NET Framework assembly Microsoft.Dynamics.Nav.PdfWriter.WordToPdf.

    The following figure illustrates the different components that are involved in the Word layout authoring and merging:

     

    As mentioned in the previous section, the Word layout documents are handled by the following function in codeunit 1:

    MergeWordLayout(

      ReportID:Integer;

      ReportAction:SaveAsPdf,SaveAsWord,SaveAsExcel,Preview,Print';

      InStrXmlData:InStream;

      FileName:Text);

    As you can see, the function has to handle all report actions, including printing. Although SaveAsExcel is included in the code, a function call with this parameter will result in an error message that states that this function is not available.

    Note: FileName is used for SaveAsPdf and SaveAsWord. However, it is also used for server-side printing, in which case, it specifies the name of the server-side printer. Client-side printing is done through Word.

    Report Scheduling

    In Microsoft Dynamics NAV 2015, a report can be scheduled for executing later from the Job Queue. This functionality relies on a new codeunit 1 function and a set of new C/AL functions that support the delayed report execution. When a report is run from the client, it can be run by calling either the RUN or RUNMODAL function. The RUNMODAL function is used when the system expects the report to be executed in the current context, in other words, when the results are needed immediately. This is the case, for example, with the Copy Document action that is invoked from a new sales order. Reports that are executed by the RUNMODAL function cannot be scheduled. The user can only schedule reports that are executed by the RUN function.

    It is important to note that most document reports are run by using the Report Selection feature, which uses the RUNMODAL command to execute reports in sequence. Therefore, when printing, for example, a Sales Invoice, the user will not see a Schedule option on the report request page. However, if the Sales Invoice report is run directly from Object Designer in the development environment, the request page will include the Schedule option, as illustrated in the following figure.

     

    When the user chooses Schedule on the request page, the report is not executed immediately. Instead, the codeunit 1 function ReportScheduler@79(ReportId:Integer;RequestPageXml:Text):Boolean is called, where the ReportId parameter specifies the report’s ID and the RequestPageXml parameter specifies the request page parameters as an XML string. This function creates a new record in table 472 Job Queue Entry where it stores the RequestPageXml parameter value (the Job Queue Category Code field is left blank). Before the function inserts the new record in the Job Queue Entry table, page 682 Schedule a Report opens in the client and enables the user to choose the report output type and when to run the report. The following figure illustrates an example of the Schedule a Report page for the report 111 Customer Top 10.

    Report Inbox

    After the Job Queue processes an entry for a report, if the output type is Word, Excel, or PDF, the Job Queue will create an entry for the report in table 477 Report Inbox table. In the client, the entry will appear in the user’s Role Center in the Report Inbox part. Because there is only one Report Inbox table, which is shared by all users, the Report Inbox part is filtered on the user’s ID.

    C/AL Functions Used by Job Queue for Reports

    When the Job Queue processes the report request, it uses on the following new C/AL functions:

    • REPORT.SAVEAS(ReportID,RequestPageXml,ReportFormat::Pdf,OutStr [,RecRef]);
      • This function is a more general version of the SAVEASPDF function, for example. The RequestPageXml parameter specifies a string of request page parameters as XML. The ReportFormat parameter specifies the output file type as PDF, Excel, Word, or XML.
      • It stores the report to an outstream, so there is no need for an intermediate file on the server.
      • It accepts an optional parameter of type RecordRef, in case you want to run the report on a specific record, such as a sales invoice header.
    • REPORT.EXECUTE(ReportID,RequestPageXml [,RecRef]);
      • This function is used to execute processing-only reports (batch jobs), which do not have an output.
    • REPORT.PRINT(ReportID,RequestPageXml,PrinterName [,RecRef]);
      • This function prints the report to a specified printer.
      • Printing reports from the Job Queue occurs on the computer that is running Microsoft Dynamics NAV Server. Any printers that you want to use for printing reports must be set up server computer for login account that is used by the Microsoft Dynamics NAV Server instance.
      • To schedule a report to print, on the Schedule a Report page, the user sets the Report Output Type field to Print, and then selects the Printer Name field to choose the printer from a list of server printers. The list includes the printers that are set up for the login account on the Microsoft Dynamics NAV Server computer. If the default printer on the user’s computer matches a printer on the server computer, then that printer is automatically selected in the list. If the Printer Name field is left blank, then the default printer on the server computer is used.

    Important: We do not recommend that you set up print-to-file drivers (such as Microsoft XPS Document Writer or PDF printer) on the server computer because using them to print reports can block the Job Queue. Microsoft Dynamics NAV cannot distinguish between print-to-file drivers and physical printers. If the user selects a print-to-file driver, the driver will open a file dialog box on the server computer, which will stop the printer job on the server and subsequently block the Job Queue. Eventually (perhaps after several hours), the Job Queue will time out and continue.

    • RequestPageXml:= REPORT.RUNREQUESTPAGE(ReportID [,RequestPageXml]).
      • This function opens the report request page that includes the OK and Cancel buttons, but does not run the report. It returns an XML string that contains the request page parameters that are entered on the request page. If you want to edit previously stored request page data, you can supply the old data as an optional parameter. 
  • Microsoft Dynamics NAV Team Blog

    ClickOnce template in Dynamics NAV 2015 still contain references to SQL Server 2012

    • 2 Comments

    When you deploy ClickOnce for Dynamics NAV 2015, there is an inconsistency related to SQL Server 2014 support tools. The product DVD does have SQL Server installation files in the Prerequisite Components folder:
    - \Microsoft Report Viewer 2014\ReportViewer.msi
    - \Microsoft Report Viewer 2014\SQLSysClrTypes.msi

    The ClickOnce template to be found in the folder \ClickOnceInstallerTools\Program Files\Microsoft Dynamics NAV\80\ClickOnce Installer Tools\TemplateFiles\NAVClientInstallation.html still refers to SQL Server 2012.

    The Microsoft Report Viewer 2014 and the CLR Types for Microsoft SQL Server 2014 will not be officially released until Visual Studio 2014 ships. Until that happens the partners have these two options for resolving this issue:

    1. Either the partner can take the .msi files from the NAV 2015 installation media and place these on a files hare and update the ClickOnce landing page accordingly
    2. Or the partner can modify the configuration file for the RTC client to load the 2012 version of the assemblies. This is done by adding the following section to the file: Microsoft.Dynamics.Nav.Client.exe.config, which is included in the ClickOnce application package. The section is:

    <dependentAssembly>
      <assemblyIdentity name="Microsoft.ReportViewer.WinForms" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
      <bindingRedirect oldVersion="12.0.0.0" newVersion="11.0.0.0"/>
    </dependentAssembly>

    For an example of how to add the dependentAssembly configuration element, please refer to this page on msdn: http://msdn.microsoft.com/en-us/library/0ash1ksb(v=vs.110).aspx

    For the time being, this is sufficient to deploy ClickOnce for Dynamics NAV 2015.

    Kindest regards,

    Marco Mels
    Support Escalation Engineer, CSS
    Microsoft

    These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use. The Netherlands

  • Microsoft Dynamics NAV Team Blog

    Adding an image to a Role Center page to fill the content area on tablets

    • 0 Comments

    With the introduction of the new Microsoft Dynamics NAV Tablet client, developers are looking for ways to create simple Role Centers that are ideal for use on small-screen mobile devices. If your Role Center has a few cues but no content, adding a company logo is one simple way to make it look great and personal! This blog post explains how that can be done in a few simple steps.

    Note that this feature is implemented only for the Role Center pages in the Microsoft Dynamics NAV Tablet client.

    Step 1: Set up the Role Center page that is used by the Microsoft Dynamics NAV Tablet client

    As an example I will modify the existing Order Processor Role Center page and remove all content parts. The modified page will now look as illustrated below.

    Note that the content page must contain either image or content parts. Cues are considered navigation elements which is why the SO Processor Activities part or any other part containing cues can only be added to the Role Center page in this particular scenario.

    When the page is opened in the Microsoft Dynamics NAV Tablet client, it should look as illustrated below.

    The page presented above does not look ideal, does it? So how do we make it more appealing? The answer is simple; by adding a company logo and make it shine.

    Step 2: Add an image to the content area of the Role Center page

    The developer needs a table, or more specifically a table field of type BLOB, to store an image. In this post, the Company Information table (79) is used because it has a Picture field that stores a company logo. In a real-life scenario, a dedicated table is a better solution. Because the Role Center page can contain only groups and parts, the second object that the developer needs is the card part page that will contain an image. The snippet below represents a sample page. Notice that the image has the ShowCaption property set to No. It indicates to the tablet client that such an image should fill the entire screen. Such behaviour is only implemented for Role Center pages in the tablet client.

    OBJECT Page [Desired Id] Company Logo

    {

      OBJECT-PROPERTIES

      {

        […]

      }

      PROPERTIES

      {

        SourceTable=Table79;

        PageType=CardPart;

      }

      CONTROLS

      {

        { 1   ;0   ;Container ;

                    ContainerType=ContentArea }

     

        { 2   ;1   ;Field     ;

                    SourceExpr=Picture;

                    ShowCaption=No }

      }

      CODE

      {

        […]

      }

    }

    The last step is to modify the selected Role Center page and add the part that hosts the page created earlier. The part must be added to the RoleCenterArea, as illustration below.

    Step 3: Upload the desired image to be used as logo

    In case the Company Information table is used to store the image, the simplest way to upload an image is to open the Company Information page (1) in edit mode and then select an image to be displayed on the Role Center page.

    Now when the Role Center page is opened, it will look like the page presented in the following picture. It is simple and looks great.

    Notes

    The image width and height is set to be 100% in CSS and that impacts how the image will look on a page. There are a few important things to be aware of:

    1. The image will scale to the available width of the content area and scale accordingly to its original ratio. That behaviour requires using an image that will look great on supported screen sizes and will not need to have vertical scrollbars.
    2. Because the image will grow or shrink, it is essential to upload an image of the desired resolution so that a user will not experience a decreased image quality caused by scaling. It is important to balance quality versus loading time.
    3. The image presented in the illustration above has size of 1800 x 1200 and fits Surface RT and iPad screens perfectly (the image is scaled down).
  • Microsoft Dynamics NAV Team Blog

    How to get Microsoft Dynamics NAV for tablets to connect using a self-signed certificate

    • 12 Comments

    Overview

    This blog post helps you connect Microsoft Dynamics NAV for tablets using a self-signed certificate. The targets for the blog post are the following apps:

    • Dynamics NAV for iPad
    • Dynamics NAV for Android
    • Dynamics NAV for modern Windows

    The Internet Information Services Manager (IIS) needs a trusted certificate that holds the private key for https. iOS and Android need the https certificate to be trusted by a root certificate.

    In this blog post, you will be creating one certificate that is used for both the IIS to enable https and to install on your device. Follow the steps below and replace the following string: <your site name> with the name of the site. You can either use a real name like www.abc.com, or use your pc name. It must match the first part of the URL that you have specified. Currently the PowerShell script New-SelfSignedCertificateEx supports Windows 8 and Windows Server 2012 and newer.

    Steps

    For the Microsoft Dynamics NAV Web server, do the following:

    1. Download and save the PowerShell script from https://gallery.technet.microsoft.com/scriptcenter/Self-signed-certificate-5920a7c6#content.
    2. Create the certificate:
      1. Open a PowerShell prompt with the option As administrator.
      2. Go to the directory where you saved the New-SelfSignedCertificateEx.ps1 file.
      3. Run the following command: Import-Module .\New-SelfSignedCertificateEx.ps1.
      4. Then run the following command: New-SelfSignedCertificateEx –Subject “CN=<your site name>” –IsCA $true –Exportable –StoreLocation LocalMachine –StoreName My.
      5. Manage the certificate:
        1. Open the mmc.exe.
        2. Go to the File menu, and then choose Add/Remove Snap-in...
        3. Select Certificates.
        4. Choose Add.
        5. Select the computer account.
        6. Choose Finish and then OK.
        7. Locate and copy the certificate you just created in the personal/certificates folder.
        8. Paste the certificate into the Trusted Root Certification Authorities/Certificates folder.
        9. Select the certificate, right-click and export the certificate.
        10. Select the No, do not export the private key option.
        11. Choose Next.
        12. Select DER encoded binary x.509 (.cer).
        13. Specify a location and filename and finish the wizard.
        14. Enable https: In IIS Manager, create a binding for https using the certificate you added.

    Next

    For iOS, do the following:

    1. Use the iPhone Configuration Utility tool from Apple http://support.apple.com/downloads/#iphone or mail the certificate you exported.
    2. Run the certificate file and install the certificate.
    3. You are now ready to start the Dynamics NAV app.

    For Windows, do the following:

    1. If you run the client on the same box as the web server, then you are all set to go.
    2. Copy the certificate you exported to the tablet, install the certificate and place the certificate in the Trusted root certification authorities folder of the local machine.

    For Android, do the following:

    1. Copy or mail the certificate that you exported.
    2. Run the certificate file and install the certificate.
    3. You are now ready to start the Dynamics NAV app.

    This should help you get up and running using self-signed certificates. Be aware that Microsoft Dynamics NAV for tablets does not support Always Ask certificates.

  • Microsoft Dynamics NAV Team Blog

    Extensibility for the Microsoft Dynamics NAV Tablet Client

    • 8 Comments

    Get in touch

    With Microsoft Dynamics NAV 2015, you will be able to run your Microsoft Dynamics NAV application on tablets. The touch interface on these devices opens for a few new cool scenarios. One of the obvious usage of touch is to allow users to write directly on the tablet, for example to sign documents.

    In this blog post, I will walk you through how to develop a client control add-in with JavaScript that you will be able to add to any Microsoft Dynamics NAV page. This add-in shows a box in which the user can write with a tablet pen or just with his finger. It also demonstrates how to save the image into a Microsoft Dynamics NAV table as a BLOB.

    If you are not familiar with JavaScript client add-ins or if you just need a refresher, take a look at this walkthrough for your classic ‘Hello World’ example.

    I am referring to this add-in as the ‘Signature Add-in’ and to the graphical data as ‘the signature’, but it could really be any type of hand-drawn graphics.

    So, let’s get started.

    Creating the C# class library

    In Visual Studio, create a new C# class library project and add a reference to the Microsoft.Dynamics.Framework.UI.Extensibility.dll assembly. You will find this assembly in a directory similar to C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client.

    If you are already familiar with Microsoft Dynamics NAV HTML/JavaScript add-ins, you know that the purpose of this class library is merely to specify the interface and make the C/AL compiler happy. It does not contain any actual executing code.

    On the server side, besides the usual AddInReady event, we will need two more events; one to write the signature data: the SaveSignature and one to read the signature from the Microsoft Dynamics NAV table to trigger an update on the page; the UpdateSignature.

    On the client side, that is in the JavaScript code, we also need a method to actually draw the graphics and we also want to be able to clear the content.

    To specify this API, create a single public interface looking like this:

     

    namespace SignatureAddIn

    {

        using Microsoft.Dynamics.Framework.UI.Extensibility;

     

        /// <summary>

        /// Interface definition for the signature add-in.

        /// </summary>

        [ControlAddInExport("SignatureControl")]

        public interface ISignatureAddIn

        {

            [ApplicationVisible]

            event ApplicationEventHandler AddInReady;

     

            [ApplicationVisible]

            event ApplicationEventHandler UpdateSignature;

           

            [ApplicationVisible]

            event SaveSignatureEventHandler SaveSignature;

     

            [ApplicationVisible]

            void ClearSignature();

     

            [ApplicationVisible]

            void PutSignature(string signatureData);

        }

     

        public delegate void SaveSignatureEventHandler(string signatureData);

    }

    Notice that the SaveSignatureEventHandler delegate takes a string parameter, which will contain the actual serialized data representing the image.

    Build your assembly to make sure you did not forget a semi-colon somewhere.

    Next, you will need to sign your assembly, obtain its public key token and copy it to the client add-ins folder. To do that, follow the steps as described in the walkthrough.

     

    Creating the manifest file

    In the manifest of an add-in, which is just regular XML file, we specify the resources that the control will use. The client side code consists of one single JavaScript file signature.js and use a single CSS file to style the HTML. We will also add a call to an initialization method in our script. The manifest is a good place to do that as the framework ensures that it gets called only when the browser is ready.

    That makes our manifest look like this:

    <?xml version="1.0" encoding="utf-8" ?>

    <Manifest>

      <Resources>

        <Script>signature.js</Script>

        <StyleSheet>signature.css</StyleSheet>

      </Resources>

      <ScriptUrls>

      </ScriptUrls>

      <Script>

          <![CDATA[

              init();

          ]]>

      </Script>

     

      <RequestedHeight>200</RequestedHeight>

      <RequestedWidth>700</RequestedWidth>

      <VerticalStretch>false</VerticalStretch>

      <HorizontalStretch>false</HorizontalStretch>

    </Manifest>

     

    Creating the CSS file

    No big deal here, just create a file named signature.css (the name needs to match the one in the manifest) with the following content:

     

    .signatureArea {

        width: 300px;

    }

     

    .signatureCanvas {

        border: solid;

        border-width: 1px;

        border-color: #777777;  

        background-color: #fff;

        width: 100%;

    }

     

    .signatureButton {

      width: 100px;

      height: 40px;

      color: white;

      background-color: #666666;

      font-size: 12pt;

      outline: 0;

      border-color: white;

    }

    Feel free to play with the styles, this will only affect your add-in and will not affect the Microsoft Dynamics NAV pages whatsoever.

    The interesting part

    All of what has been described so far is boilerplate stuff, which you will have to do for any Microsoft Dynamics NAV HTML client add-in. We are now getting to the interesting piece, which is the JavaScript code.

    Create a file named signature.js. Again here, the name has to match the one you declared in the manifest.

    Let’s start with the implementation of the interface contract that we previously defined in the C# class library:

    var signature;

     

    function init() {

     

        signature = new ns.SignatureControl();

        signature.init();

        RaiseAddInReady();

    }

     

     

    // Event will be fired when the control add-in is ready for communication through its API.

    function RaiseAddInReady() {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('AddInReady');

    }

     

    // Event raised when the update signature has been called.

    function RaiseUpdateSignature() {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('UpdateSignature');

    }

     

    // Event raised when the save signature has been called.

    function RaiseSaveSignature(signatureData) {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('SaveSignature', [signatureData]);

    }

     

     

    function PutSignature(signatureData) {

        signature.updateSignature(signatureData);

    }

     

    function ClearSignature() {

        signature.clearSignature();

    }

     

    As you can see the SignatureControl object in the ns namespace is doing all the work, so let’s take a closer look at it.

    (function (ns) {

     

        ns.SignatureControl = function () {

            var canvas,

                ctx;

     

            function init() {

                createControlElements();

                wireButtonEvents();

                wireTouchEvents();

                ctx = canvas.getContext("2d");

            }

     

         …

    Here we declare the SignatureControl class in the ns namespace and the init()method. The createControlElements() creates the various HTML elements that the control is made of.

           function createControlElements() {

                var signatureArea = document.createElement("div"),

                    canvasDiv = document.createElement("div"),

                    buttonsContainer = document.createElement("div"),

                    buttonClear = document.createElement("button"),

                    buttonAccept = document.createElement("button"),

                    buttonDraw = document.createElement("button");

     

                canvas = document.createElement("canvas"),

                canvas.id = "signatureCanvas";

                canvas.clientWidth = "100%";

                canvas.clientHeight = "100%";

                canvas.className = "signatureCanvas";

     

                buttonClear.id = "btnClear";

                buttonClear.textContent = "Clear";

                buttonClear.className = "signatureButton";

     

                buttonAccept.id = "btnAccept";

                buttonAccept.textContent = "Accept";

                buttonAccept.className = "signatureButton";

     

                buttonDraw.id = "btnDraw";

                buttonDraw.textContent = "Draw";

                buttonDraw.className = "signatureButton";

     

                canvasDiv.appendChild(canvas);

                buttonsContainer.appendChild(buttonDraw);

                buttonsContainer.appendChild(buttonAccept);

                buttonsContainer.appendChild(buttonClear);

     

                signatureArea.className = "signatureArea";

                signatureArea.appendChild(canvasDiv);

                signatureArea.appendChild(buttonsContainer);

     

                document.getElementById("controlAddIn").appendChild(signatureArea);

            }

    Besides plain old divs and buttons, the canvas is where we will actually be able to draw. Canvas has been supported in most browsers for a while and you can read more about it here.

    The control has three buttons. One to accept the signature, which will save it to the database, one to clear the field and one to redraw the signature from the database, mostly for test purposes, as you would probably not need it in most real-life scenarios. Let’s wire these buttons so do something useful:

    function wireButtonEvents() {

        var btnClear = document.getElementById("btnClear"),

            btnAccept = document.getElementById("btnAccept"),

            btnDraw = document.getElementById("btnDraw");

     

        btnClear.addEventListener("click", function () {

            ctx.clearRect(0, 0, canvas.width, canvas.height);

        }, false);

     

        btnAccept.addEventListener("click", function () {

            var signatureImage = getSignatureImage();

            ctx.clearRect(0, 0, canvas.width, canvas.height);

            RaiseSaveSignature(signatureImage);

        }, false);

     

        btnDraw.addEventListener("click", function () {

            RaiseUpdateSignature();

        }, false);

    }

    Notice that we use the drawing context ctx, that we obtained during initialization to clear the content of the canvas. We will see what the getSignatureImage() exactly does to obtain the data in a sec but before that let’s wire the touch events.

    The touch events

    In order to be able draw, we want to react to touch events. In this example, we also hook up mouse events, which is convenient if you want to test your add-in on a non-touch device with an old-fashioned mouse.

    function wireTouchEvents() {

        canvas.addEventListener("mousedown", pointerDown, false);

        canvas.addEventListener("touchstart", pointerDown, false);

        canvas.addEventListener("mouseup", pointerUp, false);

        canvas.addEventListener("touchend", pointerUp, false);

    }

    As you can see, touchstart is the equivalent of a mousedown, while a touchend is the counterpart of a mouseup.

    Once we have detected a touchstart, the trick is to start listening to touchmove and draw in the canvas to the current position of the ‘touching’. Once we get a touchend, we will then stop the listening and the drawing:

    function pointerDown(evt) {

        ctx.beginPath();

        ctx.moveTo(evt.offsetX, evt.offsetY);

        canvas.addEventListener("mousemove", paint, false);

        canvas.addEventListener("touchmove", paint, false);

    }

     

    function pointerUp(evt) {

        canvas.removeEventListener("mousemove", paint);

        canvas.removeEventListener("touchmove", paint);

        paint(evt);

    }

     

    function paint(evt) {

        ctx.lineTo(evt.offsetX, evt.offsetY);

        ctx.stroke();

    }

    Canvas image data

    We want to be able to serialize and de-serialize the image data from the canvas, so we can send it back and forth to the server in a string. The HTML canvas has built-in functionalities to do that through the context:

    function updateSignature(signatureData) {

        var img = new Image();

        img.src = signatureData;

        ctx.clearRect(0, 0, canvas.width, canvas.height);

        ctx.drawImage(img, 0, 0);

    }

     

    function getSignatureImage() {

        return canvas.toDataURL();

    }

     

    function clearSignature() {

        ctx.clearRect(0, 0, canvas.width, canvas.height);

    }

     

    return {

        init: init,

        updateSignature : updateSignature,

        getSignatureImage: getSignatureImage,

        clearSignature: clearSignature

    };

     

    The toDataURL() method converts the image into a (rather long) URL encoded string containing all the pixels. To convert it back, we only need to create an image and set its src property to this URL encoded string and pass this image to the method drawImage on the canvas context. This is pretty convenient as it allows us to use a simple string rather than more complex data structure such as arrays.

    We are now done with the JavaScript part and the entire file looks like this:

    var signature;

     

    function init() {

        signature = new ns.SignatureControl();

        signature.init();

        RaiseAddInReady();

    }

     

    // Event will be fired when the control add-in is ready for communication through its API.

    function RaiseAddInReady() {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('AddInReady');

    }

     

    // Event raised when the update signature has been called.

    function RaiseUpdateSignature() {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('UpdateSignature');

    }

     

    // Event raised when the save signature has been called.

    function RaiseSaveSignature(signatureData) {

        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('SaveSignature', [signatureData]);

    }

     

     

    function PutSignature(signatureData) {

        signature.updateSignature(signatureData);

    }

     

    function ClearSignature() {

        signature.clearSignature();

    }

     

    (function (ns) {

     

        ns.SignatureControl = function () {

            var canvas,

                ctx;

     

            function init() {

                createControlElements();

                wireButtonEvents();

                wireTouchEvents();

                ctx = canvas.getContext("2d");

            }

     

            function createControlElements() {

                var signatureArea = document.createElement("div"),

                    canvasDiv = document.createElement("div"),

                    buttonsContainer = document.createElement("div"),

                    buttonClear = document.createElement("button"),

                    buttonAccept = document.createElement("button"),

                    buttonDraw = document.createElement("button");

     

                canvas = document.createElement("canvas"),

                canvas.id = "signatureCanvas";

                canvas.clientWidth = "100%";

                canvas.clientHeight = "100%";

                canvas.className = "signatureCanvas";

     

                buttonClear.id = "btnClear";

                buttonClear.textContent = "Clear";

                buttonClear.className = "signatureButton";

     

                buttonAccept.id = "btnAccept";

                buttonAccept.textContent = "Accept";

                buttonAccept.className = "signatureButton";

     

                buttonDraw.id = "btnDraw";

                buttonDraw.textContent = "Draw";

                buttonDraw.className = "signatureButton";

     

                canvasDiv.appendChild(canvas);

                buttonsContainer.appendChild(buttonDraw);

                buttonsContainer.appendChild(buttonAccept);

                buttonsContainer.appendChild(buttonClear);

     

                signatureArea.className = "signatureArea";

                signatureArea.appendChild(canvasDiv);

                signatureArea.appendChild(buttonsContainer);

     

                document.getElementById("controlAddIn").appendChild(signatureArea);

            }

     

            function wireTouchEvents() {

                canvas.addEventListener("mousedown", pointerDown, false);

                canvas.addEventListener("touchstart", pointerDown, false);

                canvas.addEventListener("mouseup", pointerUp, false);

                canvas.addEventListener("touchend", pointerUp, false);

            }

     

     

            function pointerDown(evt) {

                ctx.beginPath();

                ctx.moveTo(evt.offsetX, evt.offsetY);

                canvas.addEventListener("mousemove", paint, false);

                canvas.addEventListener("touchmove", paint, false);

            }

     

            function pointerUp(evt) {

                canvas.removeEventListener("mousemove", paint);

                canvas.removeEventListener("touchmove", paint);

                paint(evt);

            }

     

            function paint(evt) {

                ctx.lineTo(evt.offsetX, evt.offsetY);

                ctx.stroke();

            }

     

            function wireButtonEvents() {

                var btnClear = document.getElementById("btnClear"),

                    btnAccept = document.getElementById("btnAccept"),

                    btnDraw = document.getElementById("btnDraw");

     

                btnClear.addEventListener("click", function () {

                    ctx.clearRect(0, 0, canvas.width, canvas.height);

                }, false);

     

                btnAccept.addEventListener("click", function () {

                    var signatureImage = getSignatureImage();

                    ctx.clearRect(0, 0, canvas.width, canvas.height);

                    RaiseSaveSignature(signatureImage);

                }, false);

     

                btnDraw.addEventListener("click", function () {

                    RaiseUpdateSignature();

                }, false);

            }

     

            function updateSignature(signatureData) {

                var img = new Image();

                img.src = signatureData;

                ctx.clearRect(0, 0, canvas.width, canvas.height);

                ctx.drawImage(img, 0, 0);

            }

     

            function getSignatureImage() {

                return canvas.toDataURL();

            }

     

            function clearSignature() {

                ctx.clearRect(0, 0, canvas.width, canvas.height);

            }

     

            return {

                init: init,

                updateSignature : updateSignature,

                getSignatureImage: getSignatureImage,

                clearSignature: clearSignature

            };

        };

    })(this.ns = this.ns || {});

    Packaging your add-in

    Now that we have all the parts of the component, we need to zip it together and import it in Microsoft Dynamics NAV. This is again as you would do for any other add-in.

    Create a zip file with the following structure:

     

    Put the manifest at the root, the JavaScript file in the script folder and the CSS file in the Stylesheet folder.

    Open any of the Microsoft Dynamics NAV clients (Windows, Web or Tablet) and go to the Control Add-ins page. Create a new entry named SignatureControl and enter the public key token that you saved earlier. Import the zip file.

     

    The C/SIDE side of things

    Now that our add-in is sitting comfortably within the confines of the Microsoft Dynamics NAV database, we need to add it to page. But before that, we want a place to save the signature image data. In this fabricated example, I will add the signature to the Sales Invoice card page from the Mini app (1304) which is based on the Sales Header table.

    1. In Object Designer, open the Sales Header table and add BLOB field called ‘SignatureImage’.
    2. Add the actual control page by opening page 1304 and add the control into a separate group.

    3.  

    By now you should be able to fire up this page and see how our control looks like. To do that open the client of your choice in the mini app. Navigate to the Sales Invoices and open the Sales Invoice card page.

    You should see the signature control. Try to draw in with the mouse or with your finger if you are on a touch enabled device.

    Even the clear button works already and allows you to delete your doodles.

    The last part that we are missing is to save and retrieve the pixels to the Microsoft Dynamics NAV database. To do that we need to write a bit of C/AL code.

    The C/AL code

    If you recall how we defined the add-in interface, we have three triggers to take care of: AddInReady, UpdateSignature and SignatureSaved.

    Nothing surprising here. The really interesting methods are SaveSignature and GetDataUriFromImage.

    This is where the conversion from between the URL encoded image string and a Microsoft Dynamics NAV BLOB occurs.

    The most convenient way to do this is to use the power of .NET for regular expressions matching and memory streams.

    So, let’s create a SaveSignature method and add the following .NET type variables to the locals:

    The URL encoded representation of the image contains some goo around the actual pixel information. With .NET regular expressions, we strip the header by matching it and preserving the rest.

    What is left is a base 64 encoded string, which we can convert to a byte array using the .net Convert utility class. We then pass it to the memory stream and save it to the Microsoft Dynamics NAV table as a BLOB.

    Obtaining the encoded URI is obviously the reverse operation. This is somewhat simpler; after reading the BLOB, we just need to re-add the header.

    Finally, we want to update the drawing, when we navigate the records:

    That’s it!

    Now you should be able to save the graphics and when you close and re-open the page or navigate through the Sales Invoices, the picture gets updated accordingly.

    Even though the most obvious usage scenarios are on the tablet, this add-in works on all three clients (Windows, Web and Tablet). 

    NOTE: To copy the code samples, see Extensibility for the Microsoft Dynamics NAV Tablet Client on MSDN.

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 19 for Microsoft Dynamics NAV 2013 has been released

    • 0 Comments

    Cumulative update 19 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013.

    The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions: 

    • AU - Australia
    • AT - Austria
    • BE - Belgium
    • CH - Switzerland
    • DE - Germany
    • DK - Denmark
    • ES - Spain
    • FI - Finland
    • FR - France
    • IS - Iceland
    • IT - Italy
    • NA - North America
    • NL - Netherlands
    • NO - Norway
    • NZ - New Zealand
    • SE - Sweden
    • UK - United Kingdom

    Where to find cumulative update 19

    You can download the cumulative update from KB 3000200 - Cumulative Update 19 for Microsoft Dynamics NAV 2013 (Build 38052).

    For a full list of all hotfixes included in cumulative updates for Microsoft Dynamics NAV 2013, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource:

    More Information

    For a list of all released cumulative updates, see Released Cumulative Updates for Microsoft Dynamics NAV 2013.

  • Microsoft Dynamics NAV Team Blog

    Cumulative Update 12 for Microsoft Dynamics NAV 2013 R2 has been released

    • 6 Comments

    Cumulative update 12 includes all application and platform hotfixes and regulatory features that have been released for Microsoft Dynamics NAV 2013 R2.

     The cumulative update includes hotfixes that apply to all countries and hotfixes specific to the following local versions:

    •   AU - Australia
    •   AT - Austria
    •   BE - Belgium
    •   CH – Switzerland
    •   CZ – Czech Republic
    •   DE - Germany
    •   DK - Denmark
    •   ES - Spain
    •   FI  - Finland
    •   FR - France
    •   IS - Iceland
    •   IT - Italy
    •   NA - North America
    •   NL - Netherlands
    •   NO - Norway
    •   NZ - New Zealand
    •   RU – Russia
    •   SE - Sweden
    •   UK - United Kingdom

    Where to find cumulative update 12

    You can download the cumulative update from KB 3000199  – Cumulative Update 12 for Microsoft Dynamics NAV 2013 R2 (Build 38053). 

    For a full list of all hotfixes included in cumulative updates for Microsoft Dynamics NAV 2013 R2, see the following CustomerSource and PartnerSource pages:

    CustomerSource:

    PartnerSource

    More Information

     For more information about cumulative updates for Microsoft Dynamics NAV 2013 R2, see Announcement of update rollups for Microsoft Dynamics NAV 2013 R2.

  • Microsoft Dynamics NAV Team Blog

    Writing a welcome mail to users of Microsoft Dynamics NAV for tablets

    • 4 Comments

    To use Microsoft Dynamics NAV on their tablet, users must first install and then later connect the app to a Microsoft Dynamics NAV installation. Discovering that the app is available in an app store, however, and getting started with the app can be hard.

    So to help them get started, we will create an email to send to users of Microsoft Dynamics NAV with instructions on how to install the right app, on the right device, and how to connect to the right server, tenant, and company. All of it in a simple format so everyone can succeed. 

    Prerequisites

    First, we need to gather some information from the current Microsoft Dynamics NAV installation. In this setup, there are three web server instances in three different languages. 

    What to collect

    Collected value

    Notes

    Web server host name

    mynavwebserver.mycompany.com

    The server is configured with https.

    Web server instance name, Danish

    da

    Language = da

    Web server instance name, German

    de

    Language = de

    Web server instance name, English

    en

    Language = en

    Tenant name

    default

    This is not a multi-tenant setup.

    Company name

    My company

     

    Construct the template

    Let's start by creating the template for the email. Open your favorite HTML mail editor and create a new email with the following content:

    Subject: Getting started with Microsoft Dynamics NAV on your tablet.
    Body:
    Dear Microsoft Dynamics NAV User,

    To use Microsoft Dynamics NAV, open this email on your tablet and perform the following three easy steps:

    1. Install the Dynamics NAV app: 

        

    Google Play is a trademark of Google Inc.
    Apple and the Apple logo are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.

    Please note that due to technical limitations, this blog post cannot apply hyperlinks to the graphics for the three stores. In your email, we recommend that you make the graphics clickable to give your customers an easy way to get to the app. You can see the links to each store in an earlier blog post.   

    2. Open the app in your language:

    Åbn på dansk

    Auf Deutsch öffnen

    Open in English

    3. Enter your username and password.

    You are now ready to use Microsoft Dynamics NAV on your device.

    Best regards,
    [your signature]

    Links to install the app

    Each of the store icons has to link to the right app in each store. Do this by finding the app in each store and copying the link to the store icon in the mail.

    Windows Store

    The Windows Store can be accessed from your browser by visiting http://apps.microsoft.com/windows.
    From here you can search for the app. The link to copy is the address of the app details page.

    Example, OneNote app: http://apps.microsoft.com/windows/en-us/app/f022389f-f3a6-417e-ad23-704fbdf57117.

    App Store

    The iOS App Store can be accessed from your browser by visiting https://itunes.apple.com.
    From here you can search for the app. The link to copy is the address of the app details page.

    Example, Microsoft Office Mobile for iOS: https://itunes.apple.com/us/app/microsoft-office-mobile/id541164041.

    Google Play

    The Google Play store can be accessed from your browser by visiting https://play.google.com/store.
    From here you can search for the app. The link to copy is the address of the app details page.

    Example, Microsoft Office Mobile for Android: https://play.google.com/store/apps/details?id=com.microsoft.office.officehub.

    Links to open the app

    The Microsoft Dynamics NAV app registers the protocol scheme ms-dynamicsnav on your device and this can be used to activate the app on the device.

    Each of the links to open the app can be constructed as follows: ms-dynamicsnav://<Server>[:<Port>]/<Instance>[?company=<Company>&tenant=<Tenant>]

    Replace each part with the relevant value collected earlier for each Microsoft Dynamics NAV Web server instance. The port, company, and tenant parameters are optional; if not provided, as we do here in this example, the default port (443), company, and tenant for that instance will be selected.

    This means that our document contains the following links:

    Åbn på dansk
    ms-dynamicsnav://mynavwebserver.mycompany.com/da?Company=My%20Company

    Auf Deutsch öffnen
    ms-dynamicsnav://mynavwebserver.mycompany.com/de?Company=My%20Company

    Open in English
    ms-dynamicsnav://mynavwebserver.mycompany.com/en?Company=My%20Company

    Note that some email clients, especially browser-based clients, will disable or block URLs which do not use well-known protocols. If you are unsure which email client your users typically use to read mail, you should consider adding a note to the welcome mail so that users are instructed to activate the app and can then easily copy the service URL from the mail and paste it into the app to get connected. For example, for the English web server instance, you would provide the link https://mynavwebserver.mycompany.com/en

    Finish the email

    We started by creating the template for the email. Open your favorite HTML mail editor and edit the mail so that it looks like this:

    Subject: Get started with Microsoft Dynamics NAV on your device.
    Body:
    Dear Microsoft Dynamics NAV User,

    To use Microsoft Dynamics NAV, open this email on your tablet and perform the following three easy steps:

    1. Install the Microsoft Dynamics NAV app: 

        

    Google Play is a trademark of Google Inc.
    Apple and the Apple logo are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.

    2. Open the app in your language:

    Åbn på dansk.

    Auf Deutsch öffnen.

    Open in English.

    3. Enter your username and password.

    You are now ready to use Microsoft Dynamics NAV on your device.

    Best regards,
    [your signature]

  • Microsoft Dynamics NAV Team Blog

    Announcing Microsoft Dynamics NAV for Tablets

    • 8 Comments

    You can now experience the power and simplicity of Dynamics NAV on your tablet, whether you own an iPad, Android or Windows device!

    For Customers

    Download and install the Dynamics NAV app from the Windows Store, App Store or Google Play. You sign in using your usual credentials and the app connects to your Dynamics NAV 2015 server, on premise or in the cloud.

    Navigate your business data using a fast and fluid interface which leverages design concepts from modern Windows and Office 365, whilst remaining distinctly Dynamics NAV. Do more on the go with capabilities such as send to Excel or Office 365, up-to-date charts and KPIs, emailing of sales quotes and invoices, and shoot and attach pictures with your camera.

    Your executives, sales field, service technicians, warehouse workers and many more can now get access to the data they need from the device they prefer. Microsoft Dynamics NAV 2015 comes ready for small businesses with the Small Business for Tablets role. For midsized businesses seeking custom solutions for various roles, talk to your Partner.

    For Partners

    Almost all content within the app consists of application pages coming from your Dynamics NAV 2015 server, and they are rendered using our new Tablet client, designed exclusively for touch. 

    This makes development for tablets similar to development for any other Microsoft Dynamics NAV client! Create new pages or customize existing pages in the Microsoft Dynamics NAV Development Environment on your workstation, and it is ready for iOS, Android, and Windows. Test your role-tailored solution directly on your workstation using the Tablet client running in the browser. You don’t even need to go out and purchase a bunch of tablets of different sizes, versions and platforms. 

    Since the Tablet client is based on Web client technology, you get to reuse your investments in application objects, business logic, and modern client add-ins, and you administer, license, secure, and maintain it in precisely the same way.

    Learn More

    Get the app today

     

    Download on the App Store
    Download from Windows Store
      Get in on Google Play

    Google Play is a trademark of Google Inc.
    Apple and the Apple logo are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.

    Best regards,
    The Dynamics NAV team

  • Microsoft Dynamics NAV Team Blog

    NEW document reporting tool for Microsoft Dynamics NAV 2015

    • 0 Comments

    Microsoft Dynamics NAV has a great business insight story – Dynamics NAV 2015 makes it even better!

    With Microsoft Dynamics NAV 2015 endusers can now customize and create their own document reports in familiar Microsoft Word.

    Building on this capability, Microsoft has announced the upcoming availability of the Microsoft Word reporting add-in – Jet Reports Express for Microsoft Word for Microsoft Dynamics NAV 2015.

    Through a simple and intuitive interface in Microsoft Word endusers can easily change the Microsoft Dynamics NAV dataset in a Microsoft Word document report template to allow endusers to create their own design and save the template into Dynamics NAV.

    Combined with Microsoft Dynamics NAV 2015 its a powerful and very enduser friendly document reporting solution.

    Along with the Microsoft Word add-in the solution also comes with a set of predefined templates that endusers can either use or modify to fit their needs.

    The add-in is available at no charge to customers on Microsoft Dynamics NAV 2015.

    Learn more about conditions and availability on Partner Source and Customer Source

  • Microsoft Dynamics NAV Team Blog

    Importing and Exporting Data in Microsoft Dynamics NAV 2015

    • 6 Comments

    In earlier versions of Microsoft Dynamics NAV, you could move or copy all or part of the data in a database by using the Microsoft Dynamics NAV backup functionality. In Microsoft Dynamics NAV 2013 R2, the support for the .fbk files was removed, but in Cumulative Update 8 for Microsoft Dynamics NAV 2013 R2, we introduced Windows PowerShell cmdlets so you can export data from a Microsoft Dynamics NAV database and import it into another Microsoft Dynamics NAV database. You can also export and import data in the Microsoft Dynamics NAV Windows client. This functionality is also included in Microsoft Dynamics NAV 2015.

    You can export and import a single company or all companies in a database, and you can export and import other types of data such as global data, application data, and application objects. When you export data from a Microsoft Dynamics NAV database, the data is stored in a file with the extension .navdata, which is a new file format that is proprietary to Microsoft Dynamics NAV data. You cannot edit the .navdata files in other tools.

    The data that you export is not deleted from the original database. So that means that you can use the functionality to essentially take a copy of your customer’s live data, leave them to continue working, while you import the data into an offline database back at your office for further debugging or other investigation. You can also use the .navdata files to move data to a new database, such as moving a company to a new database when you want to deprecate a database, for example.

    Exporting and Importing Data in the Microsoft Dynamics NAV Windows Client

    To export or import data, in the Search box, enter Data File, and then choose the related link.

    To export data, you specify the type of data that you want to export, and when you choose the OK button, you specify where you want to save the file.

    To import data, you specify the .navdata file to import data from, but you can't import an application if the .navdata file contains an application. This is because you can't overwrite the application that is currently open in the Microsoft Dynamics NAV Windows client. So the window has one less type of data that you can choose to import:

    If you want to import an application into a Microsoft Dynamics NAV database, you must use the Import-NAVData Windows PowerShell cmdlet.

    Windows PowerShell Cmdlets

    The following table describes the Windows PowerShell cmdlets.

    Name

    Description

    Export-NAVData

    Exports data from a Microsoft Dynamics NAV database. You can export company-specific data, and you can choose to include global data, application data, or application objects.

    Import-NAVData

    Imports data into a Microsoft Dynamics NAV database from a file. You can import all data in the file, or you can choose to include specific companies, global data, application data, or application objects.

    You can only import an application into an empty database.

    Get-NAVDataFile

    Gets information from a file that has been exported from a Microsoft Dynamics NAV database.

    The extracted information includes the types of data that the file contains and any company names.

    The cmdlets take different parameter sets depending on how you connect to the database that you want to export data from or import data into. You can access the database through the Microsoft Dynamics NAV Server instance, or you can access the database directly as described in the following table.

    Access

    Description

    Through the Microsoft Dynamics NAV Server instance.

    Use parameter sets that include –ServerInstance when the database that you want to access is mounted against a Microsoft Dynamics NAV Server instance.

    The user account for the Microsoft Dynamics NAV Server instance must have access to write to the location that is specified by the –FileName parameter.

    Through a direct connection to the database.

    Use parameter sets that include –DatabaseServer and –DatabaseName when the Microsoft Dynamics NAV Server instance is stopped or not available. For example, if you want to import an updated application into a database, you stop the service so that users cannot access the database.

    You must have access to write to the location that is specified by the –FileName parameter.

    You can find more information about this functionality in the MSDN Library.

Page 3 of 47 (704 items) 12345»