Manifest Overview

For a control add-in to work on all display targets there has to be a manifest. The manifest contains a declarative description of the control add-in and is written in XML. The manifest is added together with any resource files in a .zip file and registered with the control add-in resources in the Client Add-in page. This topic explains the structure of a manifest by going through an example of the manifest for the Bing Maps control add-in. For more information about the implementation of the Bing Maps control add-in, see Walkthrough: Creating and Using a Client Control Add-in.

Example of a Manifest

The syntax of a manifest file is illustrated in the example below. All tags inside the <manifest> tag are optional. Inside the <Manifest> tag, the <ScriptUrls> tag references other JavaScripts from the manifest. In this case the <ScriptUrls> tag points to online map controls. Inside the <Resources> tag, all of the resources such as the script, stylesheet, and images needed to display the Bing Maps control add-in are listed.

The <Script> tag contains the actual initialization code for the control add-in. The code must be written inside a <![CDATA[]]> tag to be parsed as code. The Microsoft.Dynamics.NAV.InvokeExtensibilityMethod is described in more detail in the reference documentation. For more information, see InvokeExtensibilityMethod Method.

Inside the <Manifest> tag, at the end of the script, the <RequestedHeight> and the <RequestedWidth> tags are set to definite sizes. It is recommended to apply some size to the add-in using these tags. The properties <VerticalStretch> and <HorizontalStretch> determine how the control add-in behaves in the client when the window it is displayed in is resized. The default value is false which means that the control add-in is not resized vertically, or horizontally. The value true means that the control add-in is resized vertically, or horizontally. The values in <RequestedHeight> and <RequestedWidth> determine the minimum resize value of the control add-in.

<?xml version="1.0" encoding="utf-8"?>
<Manifest>
    <Resources>
        <Script>Script.js</Script>
    </Resources>
    <ScriptUrls>
        <ScriptUrl>https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js</ScriptUrl>
        <ScriptUrl>http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3</ScriptUrl>
    </ScriptUrls>
    
    <Script>
        <![CDATA[
        $(document).ready(function() 
        { 
            InitializeMap('controlAddIn');
            Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('ControlAddInReady', null);
        });
        ]]>
    </Script>
    
    <RequestedHeight>300</RequestedHeight>
    <RequestedWidth>700</RequestedWidth>
    <VerticalStretch>false</VerticalStretch>
    <HorizontalStretch>false</HorizontalStretch>
</Manifest>

C/AL Code in Separate File

Code that is called from C/AL code must be placed in a separate file under the \Script folder. The code below is called from the manifest file and initializes and loads the map.

var map = null;
        function InitializeMap(controlId) {
            map = new VEMap(controlId);
            map.HideScalebar();
            map.onLoadMap = function () {
                Microsoft.Dynamics.NAV.InvokeExtensiblityMethod('MapLoaded', null);
            };
        }
        function LoadMap(latitude, longiture) {
            var mapOptions = new VEMapOptions();
            mapOptions.DashboardColor = "black";
            mapOptions.EnableSearchLogo = false;
            map.LoadMap(
                new VELatLong(latitude, longiture), // Center
                1,                                  // Zoom level 1-19
                VEMapStyle.Birdseye,                // Map style
                false,                              // Fixed map
                VEMapMode.Mode2D,                   // Map mode
                true,                               // Map mode switch
                0,                                  // Tile buffer
                mapOptions                          // Options
            );
        }        
        function ShowMiniMap(show) {
            if (show)
                map.ShowMiniMap();
            else
                map.HideMiniMap();
        }
        function ShowPushpin(title, imageName) {
            map.Clear(); 
            if (title != '') {
                var point = map.GetCenter();
                var pushpin = map.AddPushpin(point);
                pushpin.SetTitle(title);
            }
        }

Control Add-in HTML Element

When the control add-in is loaded into the Web browser one HTML element is provided for the control add-in to host its content. This HTML element is a DIV element and it is always named controlAddIn.

<div id='controlAddIn'>
    control add-in script code can add content here...
</div>

The following is an example of the script code for a control add-in

function initializeControlAddIn() {
    var controlAddIn = document.getElementById('controlAddIn');
    controlAddIn.innerHTML = "Hello World";
}

See Also

Tasks

Walkthrough: Creating and Using a Client Control Add-in

Concepts

Extending Microsoft Dynamics NAV Using Control Add-ins
Extending the Windows Client Using Control Add-ins
Extending Any Microsoft Dynamics NAV Client Using Control Add-ins