• 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

    • 8 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

    • 3 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

    • 4 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.

  • Microsoft Dynamics NAV Team Blog

    Merging Application Objects using Windows PowerShell in Microsoft Dynamics NAV 2015

    • 5 Comments

    Upgrading a Microsoft Dynamics NAV solution is time consuming. You have to identify which changes you have to make, you have to upgrade the application objects and the application code, and you might have to move the existing data around so that it fits the new database schema. In Microsoft Dynamics NAV 2013 R2 Cumulative Update 9, we introduced a new set of Windows PowerShell cmdlets that can help you through the code upgrade. In Microsoft Dynamics NAV 2015, the functionality and sample scripts have been further improved.

    You can use the new cmdlets to modify application object source files in the Microsoft Dynamics NAV 2015 Development Shell, or by importing the Microsoft.Dynamics.NAV.Model.Tools.psd1 module into the Windows PowerShell Integrated Scripting Environment (ISE). The new application merge utilities install when you choose the Developer option in Microsoft Dynamics NAV 2015 Setup, or if you add the development environment to another installation option.

    The application merge utilities include the following Windows PowerShell cmdlets:

    Name

    Description

    Merge-NAVApplicationObject

    Compares the changes that have been made between two sets of Microsoft Dynamics NAV application objects, and applies the difference to a third set of application objects. The result of the merge is a number of text files with the merged application objects. Any conflicts that the cmdlet cannot merge are identified in conflict files.

    Compare-NAVApplicationObject

    Compares text files that contain Microsoft Dynamics NAV application objects, and then calculates the delta between the two versions. The result of the comparison is a number of text files with the calculated delta.

    Update-NAVApplicationObject

    Applies a set of deltas to the specified application objects. The files that describe the delta are generated by the Compare-NAVApplicationObject cmdlet.

    Join-NAVApplicationObjectFile

    Combines multiple application object files into one text file

    Split-NAVApplicationObjectFile

    Splits a text file that contains two or more application objects into separate text files for each application object.

    Get-NAVApplicationObjectProperty

    Gets Microsoft Dynamics NAV application object properties from the specified application object text files.

    Set-NAVApplicationObjectProperty

    Sets Microsoft Dynamics NAV application object properties in the specified application object text files.

    Export-NAVApplicationObjectLanguage

    Exports captions from the specified text files with Microsoft Dynamics NAV application objects. The captions are exported to text files.

    Import-NAVApplicationObjectLanguage

    Imports strings in the specified language into text files that contain Microsoft Dynamics NAV application objects.

    Join-NAVApplicationObjectLanguageFile

    Combines multiple text files with captions for Microsoft Dynamics NAV application objects into one text file.

    Remove-NAVApplicationObjectLanguage

    Deletes captions in the specified language from Microsoft Dynamics NAV application objects.

    Split-NAVApplicationObjectLanguageFile

    Splits a text file that contains multilanguage captions for two or more application objects into separate text files for each application object.

    Test-NAVApplicationObjectLanguageFile

    Tests captions in Microsoft Dynamics NAV application objects to test to validate if they have translated strings for the specified languages.

     Getting started

    You can read more about the cmdlets and how to use them in the MSDN Library, but you can also type Get-Help "NAV" in the Windows PowerShell ISE or the Microsoft Dynamics NAV Development Shell.

    If you don’t want to use the Microsoft Dynamics NAV Development Shell, use the Windows PowerShell ISE. But before you can access the cmdlets, you must import the Microsoft.Dynamics.Nav.Model.Tools.psd1 module. Here is an example of the command you can type:

    Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -force

    Get-Help "NAV"

    Now you can see the Help for the cmdlets and take a closer look at the examples for how to use them.

    Now you can see the Help for the cmdlets and take a closer look at the examples for how to use them. You can also see detailed Help for each cmdlet by typing the following command:

    Get-Help cmdletname -detailed

    And you can concentrate on the examples by typing the following command:

    Get-Help cmdletname -examples

     For all of the new cmdlets, the starting point is 3 versions of application objects that you want to merge. The following table describes the three versions of the Microsoft Dynamics NAV application that you want to compare and merge.

    Version

    Description

    Original

    The baseline of the application merge. For example, the Microsoft release of Microsoft Dynamics NAV 2013 R2.

    Modified

    The updated version of the original. For example, this can be your add-on.

    In many cases, the modified application is the version that contains fewer changes to the original than the version that is the target of the merge. This is because you want to apply fewer changes to a large application rather than applying a large change to a small application.

    Target

    The version of the application that you want to apply the difference between the original and the modified application to. For example, this can be the new major release from Microsoft of Microsoft Dynamics NAV 2015 that you want to apply your modified solution to.

    Each of these versions can be any version that you want to do a three-way merge between. ORIGINAL can be your add-on, MODIFIED can be a customization of your add-on, and TARGET can be a new release of Microsoft Dynamics NAV from Microsoft. But for the purposes of this blog post, we'll keep the definitions as described in the table above.

    As input to the cmdlets, you can provide a text file, a list of text files, or a folder with text files. So you need to export the relevant application objects as text files. Optionally, you can use the development environment command ExportObjects. You can export each application object to a separate text file, or you can export all objects to a single text file. Optionally, you can use the Join-NAVApplicationObjectFile and Split-NAVApplicationObjectFile cmdlets to structure the text files in the way that works better for you. Also, depending on your scenario, you can work with a subset of your application, such as all codeunits, objects within an ID range, or a specific group of objects. Use the tools to get the text files that you need, and take a look at the sample scripts for inspiration.

    The Windows PowerShell sample scripts are available on the product media. Start by opening the HowTo-Start-Import-NAV-Module.ps1 script in the Windows PowerShell IDE, navigate the command prompt to the folder where you placed the samples, and then run the script. Then open one of the other scripts, such as HowTo-Merge-1-General.ps1, and follow the guidance in the script.

    We suggest that you open each of the sample scripts in the Windows PowerShell IDE and read through them to get acquainted with the new cmdlets. Then, set up a small test environment of your own where you can safely use the cmdlets on your own application objects to upgrade your solution to Microsoft Dynamics NAV 2015.

     

  • Microsoft Dynamics NAV Team Blog

    Improvements to Bank Reconciliation in the North American Versions

    • 0 Comments

    Optimization of the processes for payment registration and bank reconciliation has been a focus area in recent releases of Microsoft Dynamics NAV. We have improved the capabilities for handling electronic payments and bank statement import substantially in the generic version of the product.

    NAV 2013 R2 enabled basic cash management with enhanced electronic payment integration focused on SEPA credit transfers and SEPA bank statement import. It also enhanced the usability of the bank reconciliation process with a new and more intuitive user interface.

    NAV 2015 further enhances the electronic payment and payment reconciliation capabilities by adding more bank formats through the Bank Data Conversion Service feature and simplifying payment reconciliation further by importing bank statement files and automatically applying payments to their related open entries on the new Payment Reconciliation Journal page.

    These improvements also enhance the usage of electronic banking features in local versions that do not follow the SEPA standard, such as US, Mexico, and Canada. With Microsoft Dynamics NAV 2015, customers and partners in North America can choose to use either the existing, North American Bank Rec. Worksheet feature for manual processes or the new, generic Bank Acc. Reconciliation feature that provides statement file import and automatic matching.

    We recommend that our customers and partners in the above markets investigate the two different features and choose the one that fits their needs. To help decide, this document highlights the differences between the two and describes how to make the change. It is very simple to start using the new feature, but it is important that you do so based on a conscious decision.

    Benefits of the New, Generic Bank Reconciliation Feature

    To give a better understanding of the benefits of using the new capabilities, this document will walk through the differences in the process and show how the new pages support a more efficient cash management flow in many scenarios.

    Benefit: Import of bank statement data combined with automatic matching against posted bank ledger entries eliminates trivial, repetitive, and time-consuming tasks. Combined with a new and more intuitive user interface, the feature makes bank account reconciliation fast and easy to do.

    Benefit: The user interface on the Bank Acc. Reconciliation page is simpler and provides a good way to get an overview. Filtering and sorting on the bank ledger entries ensure that the controller is able to identify the entries more efficiently. Note that there are efficiency gains in using the generic Bank Acc. Reconciliation feature even if the process does not involve bank file import. The simplified UI will make the bank reconciliation process simpler and less error-prone.

    Benefit: Adding the capabilities of the Payment Reconciliation Journal page, such as importing and automatically reconciling payments with related open entries, will lead to increased efficiency in the payment registration process, which in turn makes it easier to stay up to date with the company’s cash situation. In addition, good and accurate control of the payment registrations makes the periodic bank reconciliation process easier.

    For more information about the Bank Acc. Reconciliation feature, which was released with Microsoft Dynamics NAV 2013 R2, see, for example, the How to: Match Bank Statement Lines with Bank Account Ledger Entries topic in Application Help on MSDN. For more information about Bank Reconciliation features in Microsoft Dynamics NAV 2015, see, for example, Microsoft Dynamics NAV 2015 Readiness Library.

    Differences from the North American Bank Reconciliation Feature

    Historically, North America, Mexico, and Canada have different requirements for registration of payments and bank account reconciliation than what is required in other countries/regions. The North American bank account reconciliation process has extensive use of checks and deposits as well as a tight relationship with general ledger entries. Therefore, import of electronic bank statements was not implemented in NAV 2013 R2 North America, nor was the export of payment files implemented due to the limitation to SEPA formats, an EU standard. With the new, generic capabilities for electronic payments and bank statement import, it is time to give access to all the new features.

    To be specific, we are comparing two different pages and the processes that they support:

    • In Microsoft Dynamics NAV 2013 R2 North America: The Bank Rec. Worksheet page (10120), hereafter referred to as “NA Bank Rec. feature”
    • In Microsoft Dynamics NAV 2015 W1 (the generic version): The Bank Acc. Reconciliation page (379), hereafter referred to as “Bank Recon. with Auto. Match feature”

    Both the NA Bank Rec. feature and the Bank Recon. With Auto. Match feature compare the open payments registered per bank account in the system with the transactions on the actual bank account.

    To help the user compare the actual transactions, it now possible to import the bank statement as a file. This is only possible with the Bank Recon. With Auto. Match feature, but the paper-based process is possible with both pages. If there is no electronic bank statement to import, the reconciliation can be done by using a suggestion of lines.

    For both pages, the registered payments are either generated automatically when documents are posted, or they are registered through the payment journal or cash receipt journal. In Dynamics NAV 2015, incoming and outgoing payments can also be registered through the Payment Reconciliation Journal page by first importing the bank statement file that represents the payments to your bank.

    Summary of the NA Bank Rec. Feature

    The NA Bank Rec. feature uses the registered payments as a suggestion to what transactions should be cleared in the system. This works well for the paper-based bank statement that the controller typically works with. Payments are categorized in three types: Transaction, Check, and Adjustment. Each line must be manually controlled and cleared, and any necessary adjustments must be created before the bank account reconciliation can be posted.

    The Suggest Lines function generates a proposal of what should be cleared. Transactions that are not marked as cleared when the bank reconciliation is posted are considered outstanding and will appear on the next bank reconciliation worksheet.

    Example:

    In the example below, two check payments and one vendor payment are posted against the WWB-Transfer bank account.

    The lines on the Bank Rec. Worksheet page are added when the users runs the Suggest Lines function. They are automatically divided into the Check pane and the Deposit/Transfer pane. The user must go through each line and clear the amount by using the Checkmark Clear function. They can also use the Mark Lines and Clear Line functions to do bulk edits. Required adjustments are entered in the Adjustment pane and will be posted to the general ledger.

    After clearing the lines, the user must copy the sum identified in the three sub panes to the header as well as calculate the balance of the statement before posting. The feature then validates that the posting corresponds with the general ledger entries.

    The main goal of the NA Bank Rec. feature is that registered payments in the system are manually cleared and that the bank reconciliation is posted with the same amounts as in the general ledger.

    Summary of the Bank Recon. with Auto. Match Feature

    The Bank Recon. With Auto. Match feature also uses the registered payments as a suggestion to the payments that should be cleared. (Note that this feature uses the term “match” instead of “clear”.) The actual statement lines can then be generated by either importing the bank statement file or by using the Suggest Lines function. It is possible to use the automatic matching engine to reconcile as many bank statement lines with bank ledger entries as possible and then manually do the rest.

    Transactions that are not matched when the bank reconciliation is posted are considered outstanding and will appear on the next bank account reconciliation.

    Example:

    As in the example for the NA Bank Rec. feature, there are posted entries in the system, both checks, deposits, and vendor payments against the WWB-Transfer bank account. All open bank ledger entries are shown in the right pane of the Bank Acc. Reconciliation page.

    The bank statement lines that must be reconciled can be imported directly as a bank statement file or they can be manually added by using the Suggest Lines function. The Match Automatically function enables the user to easily match payments.

    If the user wants to focus only on check payments, it is simple to sort by the Check Ledger Entries field.

    Any required adjustments are made by using Transfer to General Journal function for the entries where there is a difference between the statement amount and the bank ledger entry amount (the Difference field has a value).

    The main goal of the Bank Recon. With Auto. Match feature is to register payments in the system, match them with bank statement lines, and then post the bank account reconciliation.

    As illustrated by the two summaries, the same end result is reached with the two pages, but they differ concerning usability, the capability to import a bank statement file, and the automatic matching.

    How to Match Against the General Ledger

    One big difference between the two features is that the NA bank Rec. feature only allows posting if there is exact match against the G/L account. This rule is not enforced in the Bank Recon. with Auto. Match feature unless the bank account is set up for a 1-1 relationship with the G/L account. It will only look at the bank account ledger when validating the posting. To get the same behavior in the two features, ensure that the bank account is mapped to its own G/L account and not to a group.

    How to Turn on the Bank Recon. with Auto. Match Feature

    From the General ledger Setup page, it is possible to choose if the installation should use the Bank Recon. With Auto. Match feature or the existing NA Bank Rec. feature.

    Since both of the bank reconciliation features use a report that is set up in the Report Selections table, a warning that the report will change appears when you change the Bank Recon. With Auto. Match check box. 

    Note: For new installations of Dynamics NAV 2015, the Bank Recon. With Auto Match check box will be selected by default. For upgraded installations, the check box is not selected, meaning that the existing North American feature is used.

    Note: When upgrading and changing to the Bank Recon. with Auto Match feature, the history created with NA Bank Rec. feature is stored and made available from the navigation pane.

    The Bank Acc. Reconciliations page is the same for both features. If the Bank Recon. with Auto. Match check box is selected, the Bank Acc. Reconciliation page (379) opens when the users chooses New in the Bank Acc. Reconciliations page. If the check box is not selected, the Bank Rec. Worksheet page (10120) opens.

    Depending on the Role Center, there will also be easy access to the relevant page through the Activities pane. For example, the Accounting Manager Role Center has a Bank Account Reconciliation to Post tile and an action to open a new bank account reconciliation.

    For upgraded installations, there are several access points to historical posted bank account reconciliations. For example, the Bank Account Card page contains two actions, Statements for Bank Recon. with Auto. Match and Posted Reconciliations for NA Bank Rec.

  • Microsoft Dynamics NAV Team Blog

    New Bank Data Conversion Service hosted on Windows Azure for Microsoft Dynamics NAV 2015

    • 2 Comments

    Microsoft Dynamics NAV 2015 significantly advances our offering within the area of Cash Management, specifically electronic payments and automated reconciliation.

    As part of these enhancements, we are excited to announce a new partnership with AMC Consult to provide a bank data conversion service hosted on Microsoft Azure and integrated with Microsoft Dynamics NAV 2015. The bank data conversion service will be available out of the box and without additional charge to all Microsoft Dynamics NAV customers on the new version of Microsoft Dynamics NAV.

    The bank data conversion service adds value by: 

    • Enabling users to export payment files from Microsoft Dynamics NAV in any format required by their bank to enable efficient processing of outgoing payments.
    • Enabling users to import bank statement files from any bank in the format required by Microsoft Dynamics NAV to enable efficient reconciliation of payments and their bank account.
    • Providing support for many different banks on all Microsoft localized versions of Microsoft Dynamics NAV. 

    The bank data conversion service, along with other new Cash Management features in Microsoft Dynamics NAV 2015, is a great enhancement to the Cash Management offering and represents great value to our customers and partners.

    For more information about the Bank Data Conversion Service feature, see documents under Cash Management in the Microsoft Dynamics NAV 2015 Readiness Library.    

  • Microsoft Dynamics NAV Team Blog

    General Availability of Microsoft Dynamics NAV 2015

    • 3 Comments

    We are happy to announce that Microsoft Dynamics NAV 2015 is now available for download and for requesting licenses for new customers. This release includes improved support for RapidStart code upgrade and data upgrade, ease of use with user experience enhancements and new apps for tablet devices, new document reports, and cash management.

    At Directions US, we presented Microsoft Dynamics NAV 2015 to 600 partner representatives, and we look forward to presenting to another 1100 or so at Directions EMEA next week. Visit the readiness page to access training and resources about Microsoft Dynamics NAV 2015, and download the product here. For more information, see the Microsoft Dynamics NAV Help in the MSDN Library.

    Best regards,

    The Dynamics NAV team

  • Microsoft Dynamics NAV Team Blog

    Getting a warning when new demand jeopardizes projected availability?

    • 2 Comments

    How can I get a warning when entering a sales order so I am aware that this demand jeopardizes availability for other demands? That is the Avail. Check Warning functionality. Nothing new. But, I would like to bring focus to this functionality to emphasize the relevance it has.

    There are two parameters in Company Information which are relevant here:

    • "Check Avail. Period Calc.": this defines the period from demand due date where availability calculation will take place. As an example, if this is a sales order, it will check "Shipment Date" + "Check Avail. Period Calc" to determine what is the availability within that period. If availability goes negative, a warning will then arise.
    • "Check Avail. Time Bucket": this defines the bucket of this period. As an example, if we define Month, availability will be rounded to first date of next month when determining the availability period.

    Based on this two, together with the demand due date (ie. "Shipment Date" in the Sales Order), the availability calculation is executed to determine if there would be any availability issue in the future when this new demand is entered (ie. projected inventory goes negative). If so, warning arises. This is an indication to the user for action:

    • Should we go ahead and create the demand as is?
    • Should we try to promise (ATP or CTP) this or any of the other demands ahead to remove negative projected availability?
    • ...

    This warning should be considered as a tool to anticípate issues before planning is run. If we let planning to resolve this issue we might end on these undesiderable scenarios:

    • Lead time does not allow us to react and planning shows an exception (ie. we might require to consume safety stock to address this demand)
    • Demand is now on the frozen zone and this might mean negative stock in the starting date which is shown as an emergency action

    We don't want to run into exception or emergencies in our business. Of course, it might well be the case that planning is able to provide a meaningful action line for our business (ie. this availability issue is later enough that we can react within our lead times and create new replenishment). But, I would still encourage the user to be proactive and check availability when Avail. Check Warning arises.

Page 1 of 45 (669 items) 12345»