Microsoft Dynamics NAV

Team Blog

  • Microsoft Dynamics NAV Team Blog

    Let NAV Speak (with a Simple and Useful Client Add-in)

    • 8 Comments

    In this blog you will find the source code (below) to “let NAV speak.” You would have a wide range of possibilities to use this simple Add-in and enlarge this project.

    If you want to know more about Client Add-ins you can refer to this MSDN link:

    Extending the RoleTailored Client Using Control Add-ins and Microsoft Dynamics NAV 2009 SP1

    This simple Client Add-In is based on System.Speech namespace:

    Microsoft.Speech.Synthesis Namespace

    Step by step creation of the NSpeech Add-In

    (Remember the ‘DodgeBall’ rules: Develop, Sign, Place, Register and Develop)

    1. DEVELOP your add-in (in Visual Studio)
    2. Strong SIGN and build
    3. PLACE DLLs into Add-ins folder
    4. REGISTER the add-in in Table 2000000069, Client Add-in
    5. DEVELOP your C/AL code (in Object Designer)

    A. Create a New Class Project

    1. Open Visual Studio (in this example I am using Visual Studio 2010)
    2. Create a New Project (CTRL+SHIFT+N) with these parameters
      • Visual C# – Windows
      • Class library
      • .NET Framework 3.5
      • Name: NSpeech
      • Location: C:\TMP (or whatever location you like)
      • Solution Name: NSpeech
      • Create directory for solution

    NSpeechVS

    B. Create a Strong Name Key (SNK)

    1. Go to Project > Properties (NSpeech Properties…)
    2. From the Project Properties form go to the Signing tab
    3. Tick the Sign the assembly option
    4. Create a New SNK (e.g. TestSpeechNav.snk)

    NSpeechSign

    C. Add References to the Project

    1. Click on the Class1.cs tab (return to the project)
    2. In the Solution Explorer window select Reference, right Click, Add Reference
    3. Add reference to
      • Microsoft.Dynamics.Framework.UI.Extensibility (Version 1.3.0.0) (By default, the path to the assembly is C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client)
      • System.Drawing (Version 2.0.0.0)
      • System.Speech (Version 3.0.0.0)
      • System.Windows.Forms (Version 2.0.0.0)

    NSpeechRef

    D. Develop your NSpeech Project

    (You can simply copy and paste this code into your Class project.)

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.ComponentModel;

    //Add a reference to the Add-in API (see the solution explorer) and all relevant references

    //Use all relevant references

    using System.Drawing;

    using System.Windows.Forms;

    using Microsoft.Dynamics.Framework.UI.Extensibility;

    using Microsoft.Dynamics.Framework.UI.Extensibility.WinForms;

    //this is to let this add-in speech

    //http://msdn.microsoft.com/en-us/library/dd146744(v=office.13).aspx

    using System.Speech;

    using System.Speech.Synthesis;

    namespace NSpeech

    {

        //Develop the control add-in class.

        //Assign a name to the control add-in (MyCompany.MyProduct.MyAddIn)

        [ControlAddInExport("Cronus.DynamicsNAV.NSpeech")]

        [Description("Let this Add-in Speak")]

      

        //Select a base class as a starting point.

        //Select interfaces to implement features, such as data binding or event handling.

        public class Class1 : StringControlAddInBase

        {

            //Implement control creation

            protected override Control CreateControl()

            {

                //Create a brand new TextBox

                TextBox control = new TextBox();

               

                //Define TextBox size

                control.MinimumSize = new Size(50, 0);

                control.MaximumSize = new Size(500, Int32.MaxValue);

               

                //Add a DoubleClick event for the TextBox

                control.DoubleClick += new EventHandler(control_DoubleClick);

                return control;

            }

            //Define a voice synth

            private SpeechSynthesizer synth;

            private void control_DoubleClick(object sender, EventArgs e)

            {

                //create a new speech synth and set default audio device

                synth = new SpeechSynthesizer();

                synth.SetOutputToDefaultAudioDevice();

               

                //Pass TextBox content in a string variable

                string data = this.Control.Text;

              

                //... and let NAV speak it!

                synth.SpeakAsync(data);

            }

        }

    }

    E. Build the NSpeech.dll

    1. Once you have all setup, you are ready to build your Client Add-In. Go to Build > Build NSpeech

    F. Place DLL into Add-in folder

    1. Locate/copy/paste NSpeech.dll (should be in your C:\TMP\NSpeech\NSpeech\bin\Debug folder) to the Add-ins folder of a machine where the RoleTailored client has been installed

    (typically the Add-ins folder is here: C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins)

    G. Determine the PKT (Public Key Token) of NSpeech

    1. Launch the Visual Studio Command Prompt
    2. In the VSCP:

    Sn –T “C:\TMP\NSpeech\NSpeech\bin\Debug\NSpeech.dll”

    In the following example, 250f71f35a467631 is the PKT (Public Key Token) needed to register the Add-in into NAV. (You will have another value.)

    NSpeechSn

    H. Register the NSpeech dll

    1. Open Classic Client
    2. Open Object Designer (SHIFT+F12)
    3. Select Table object (ALT+B)
    4. Run Table 2000000069 Client Add-in
    5. Insert a new line with these values:
    Field Value
    Control Add-in Name Cronus.DynamicsNAV.NSpeech
    Public Key Token 250f71f35a467631 (this is an example)
    Version 1.0.0.0
    Description Let this Add-in Speak

    How to Use This Add-in

    As an example, you can just let NAV speak the content of the field “Name” in Customer Card page (Page 21).

    1. Open Classic Client
    2. Go to Object Designer (SHIFT+F12)
    3. Select Page object (ALT+G)
    4. Design Page 21 Customer Card
    5. Go to Name Field and Edit properties (SHIFT+F4)
    6. Fill the ControlAddIn property with this value Cronus.DynamicsNAV.NSpeech;PublicKeyToken=250f71f35a467631 (change the PublickKeyToken value to the one that you have determined at step G.)
    7. Save and compile the page (CTRL+S)

    Now…you are ready to let NAV speak the Customer Name from the customer card by simply double clicking on on the Name!

    This simple Client Add-in project may be used in, e.g.

    • Speak an alert if the availability of an Item is lower than expected in a document page (e.g. sales quote)
    • Speak an alert if a Customer exceeds assigned Credit Limit
    • Speak internal comments for an item, a vendor, a customer, wherever this is needed
    • … and many more

    This simple Client Add-in project may be enlarged, e.g.

    • It could be possible to set the volume of the voice
    • It could be possible to set the rate of the voice
    • It could be possible to select another voice instead of “Microsoft Anne” default in order to speak words with proper accent language
    • It could be possible to save a .wav file instead of speaking it or even perform both activities
    • … and many more

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

    Best Regards,

    Duilio Tacconi (dtacconi)

    Microsoft Dynamics Italy

    Microsoft Customer Service and Support (CSS) EMEA

  • Microsoft Dynamics NAV Team Blog

    Making a Page or Report Available from Search in the RoleTailored Client

    • 0 Comments

    In the RoleTailored client, the Search feature finds only pages and reports that are accessible from the navigation pane, which includes the Home button, Activity buttons, and Departments. So if you want to make a page or report available from search, then add it to the Home button, an Activity button, or Departments.

    For information about adding pages and reports to the Home Button and Activity buttons, see Home Button Overview and Creating Activity Buttons for the Navigation Pane in the MSDN library.

    To add a page or report to Departments, you add it to the MenuSuite object that is used by the RoleTailored client. For more information, see How to: Create and Modify a MenuSuite Object in the MSDN Library.

     

  • Microsoft Dynamics NAV Team Blog

    How to Transform a ListPlus Page Into a FactBox

    • 0 Comments

    In several places in NAV 2009 SP1, it has been used ListPlus pages in order to display two-dimension matrix. Those ListPlus Pages may be customized in order to be arranged as FactBoxes directly inside a main page (Document, Worksheet, etc.).

    The main concept of those kind of two-dimensional matrix pages is that they have a Page Part with a List that is updated every time a value is changed in the analysis parameter bounded to fields and/or variables that belongs directly to the ListPlus.

    This post will provide the basics on how to integrate the Item Availability by Location directly as FactBoxes instead of being called from RTC actions. The same concept may be applied to Item Availability by Period and Item Availability by Variant (and/or all of them together). In the example, the Planning Worksheet page is used as the main page.

    listplus1

    The next step will guide you through the modifications that need to be performed in order to arrange Page 492 “Item Availability By Location” as a FactBox. (In the standard Cronus this is called from an action present in the Related Information action group.)

    1. Rearrange Matrix Lines and configure Style property
      1. Design page 515 “Item Avail. by Location Lines”
      2. Below the Container line, add a new line of Field type. Fill in a name (e.g. “ItemNo”), a caption (e.g. “Item”) and populate SourceExpr property with Item.”No.” + ‘ ‘ + Item.Description
      3. Add some Style management: for this line change the Style property to “Favorable” and StyleExpr to TRUE

        listplus2

      4. In order to display in bold Matrix cells that contain values different from 0, add the following Boolean global variables (one for every possible Matrix Column). It is very important that for every Boolean variable, you also set the property (SHIFT+F4) “IncludeInDataset” to Yes.

        GRBool (for GrossRequirement StyleExpr)

        SRBool (for ScheduledReceipt StyleExpr)

        PORBool (for PlannedOrderReceipt StyleExpr)

        PABBool (for ProjAvailBalance StyleExpr)

        InvBool (for Item.Inventory StyleExpr)

        QPOBool (for Item."Qty. on Purch. Order" StyleExpr)

        QSOBool (for Item.”Qty. on Sales Order” StyleExpr)

        TOSQBool (for Item.”Trans. Ord. Shipment (Qty.)” StyleExpr)

        QTBool (for Item.”Qty. in Transit” StyleExpr)

        TORQBool (for Item.”Trans. Ord. Receipt(Qty.)” StyleExpr)

        EIBool (for ExpectedInventory StyleExpr)

        AvInvBool (for QtyAvailable StyleExpr)

        SRQBool (for Item.”Scheduled Receipt(Qty.)” StyleExpr)

        SNQBool (for Item.”Scheduled Need (Qty.)” StyleExpr)

        PORLBool (for PlannedOrderReleases StyleExpr)

        NetChBool (for Item.”Net Change” StyleExpr)

        listplus3 

      5. Create a new Function called “InitBoolean” and add this code:

        GRBool := GrossRequirement <> 0;

        SrBool := ScheduledReceipt <> 0;

        PORBool := PlannedOrderReceipt <> 0;

        PABBool := ProjAvailBalance <> 0;

        InvBool := Item.Inventory <> 0;

        QPOBool := Item."Qty. on Purch. Order" <> 0;

        QSOBool := Item."Qty. on Sales Order" <> 0;

        TOSQBool := Item."Trans. Ord. Shipment (Qty.)" <> 0;

        QTBool := Item."Qty. in Transit" <> 0;

        TORQBool := Item."Trans. Ord. Receipt (Qty.)" <> 0;

        EIBool := ExpectedInventory <> 0;

        AvInvBool := QtyAvailable <> 0;

        SRQBool := Item."Scheduled Receipt (Qty.)" <> 0;

        SNQBool := Item."Scheduled Need (Qty.)" <> 0;

        PORLBool := PlannedOrderReleases <> 0 ;

        NetChBool := Item."Net Change" <> 0;

      6. Add the Boolean value initialization in the OnAfterGetRecord() trigger at the bottom

        ExpectedInventory := AvailabilityMgt.ExpectedQtyOnHand(Item,TRUE,0,QtyAvailable,31129999D);

        END;

        InitBoolean; //Add this line

      7. For last, let this code work. In Page Designer, on each field for which you created a Boolean variable, change the Style property to “Strong” and in the StyleExpr property add the respective Boolean variable that you created in step d.
      8. Save and Compile the page.

       

    2. Add Availability by Location FactBox to Planning Worksheet.
      1. Design page 99000852 Planning Worksheet
      2. Go to last line and add a new Part type. Give this a name (e.g. IALL) and a caption (e.g. Availability By Location) and in the Properties for the line, fill in the PagePartID with “Item Avail. by Location Lines”
      3. Save and compile the page.

       

    3. Add the controls and code to update dynamically the Availability by Location FactBox
      1. Design page 99000852 Planning Worksheet
      2. Add these global variables
        Name DataType Subtype Length Option String
        ItemForIALL Record Item    
        Calendar Record Date    
        ItemPeriodLength Option     Day,Week,Month,Quarter,Year,Period
        AmountType Option     Net Change,Balance at Date
        ItemNo Code   30  
        DescDateFilter Text   30  
      3. Add the controls to manage the options for the Availability by Location FactBox by inserting those lines below the Container

        listplus4

        Type: Group, SubType: Group, Caption: Availability Options

        Type: Field, Caption: View by, SourceExpr: ItemPeriodLength, Style: Unfavorable, StyleExpr: TRUE

        Type: Field, Caption: View as, SourceExpr: AmountType, Style: Unfavorable, StyleExpr: TRUE

        Type: Field, Caption: Period, SourceExpr: DescDateFilter, Editable: FALSE

      4. Create a new Function called UpdateSubForm() and add this code

        ..

        IF ItemForIALL.GET(ItemNo) THEN BEGIN

          FindPeriod('',ItemForIALL);

          CurrPage.IALL.FORM.Set(ItemForIALL,ItemPeriodLength,AmountType);

        END;

      5. Create a new Function called FindPeriod() with these values:

        FindPeriod(SearchText : Code[10];VAR ItemRec : Record Item)

        On the FindPeriod function, add a local variable:

        Name DataType Subtype
        PeroidFormMgt Codeunit PeriodFormManagement

        And add this code to the FindPeriod function:

        IF ItemRec.GETFILTER("Date Filter") <> '' THEN BEGIN

          Calendar.SETFILTER("Period Start",ItemRec.GETFILTER("Date Filter"));

          IF NOT PeriodFormMgt.FindDate('+',Calendar,ItemPeriodLength) THEN

            PeriodFormMgt.FindDate('+',Calendar,ItemPeriodLength::Day);

          Calendar.SETRANGE("Period Start");

        END;

        PeriodFormMgt.FindDate(SearchText,Calendar,ItemPeriodLength);

        IF AmountType = AmountType::"Net Change" THEN BEGIN

          ItemRec.SETRANGE("Date Filter",Calendar."Period Start",Calendar."Period End");

          IF ItemRec.GETRANGEMIN("Date Filter") = ItemRec.GETRANGEMAX("Date Filter") THEN

            ItemRec.SETRANGE("Date Filter",ItemRec.GETRANGEMIN("Date Filter"));

        END ELSE

          ItemRec.SETRANGE("Date Filter",0D,Calendar."Period End");

        DescDateFilter := ItemRec.GETFILTER("Date Filter");

      6. Now you only need to add the code to let the Availability by location FactBox act like the original ListPlus page. To do so, you just have to copy paste those functions (and obviously code inside) from Page 492 “Item Availability by Location” and paste them into the functions of the Planning Worksheet page.

        PeriodItemPeriodLengthOnPush

        YearItemPeriodLengthOnPush

        QuarterItemPeriodLengthOnPush

        MonthItemPeriodLengthOnPush

        WeekItemPeriodLengthOnPush

        DayItemPeriodLengthOnPush

        NetChangeAmountTypeOnPush

        BalanceatDateAmountTypeOnPush

        DayItemPeriodLengthOnValidate

        WeekItemPeriodLengthOnValidate

        MonthItemPeriodLengthOnValidat

        QuarterItemPeriodLengthOnValid

        YearItemPeriodLengthOnValidate

        PeriodItemPeriodLengthOnValida

        NetChangeAmountTypeOnValidate

        BalanceatDateAmountTypeOnValid

      7. Once you have copied all this function, it’s needed to substitute all the FindPeriod(‘’); statement with FindPeriod(‘’,ItemForIALL); (You can simply use CTRL+H, Replace build in function).
      8. For refinement, you need to add in the OnOpenPage() trigger, in the bottom, this code

        ...

          ERROR('');

        ReqJnlManagement.OpenJnl(CurrentWkshBatchName,Rec);

        FindPeriod('',ItemForIALL); //Add this line

        And in the OnAfterGetRecord(); trigger, in the bottom, this code

        PlanningWarningLevel1OnFormat;

        ItemNo := "No."; //Add this line

        UpdateSubForm; //Add this line

      9. Save and compile the page.

       

    4. Add the Period Actions to browse through Periods in the Availability by Location FactBox
      1. Design page 99000852 Planning Worksheet
      2. Go to Last line(the first blank line) of the page and click SHIFT+F4 (edit Properties of the page)
      3. Change the property PromotedActionCategoriesML into ENU=New,Process,Reports,Availability Periods
      4. Close the Page properties window
      5. Go to last line of the page and click on View > Actions
      6. Go to last line and add one action group and two actions like these

        listplus5

        Type: ActionGroup, Caption: Availability

        Type: Action, Caption: Previous Period, Image: PreviousRecord, Promoted: Yes, PromotedCategory: Category4, ShortCutKey: CTRL+Q

        Type: Action, Caption: Next Period, Image: NextRecord, Promoted: Yes, PromotedCategory: Category4, ShortCutKey: CTRL+W

      7. Save and compile the page.

    Right now you have completed all the steps necessary to create a FactBox for Item Availability by Location.

    Attached you will find a .txt file with the example above, extended to Item availability by Location, by Period and by Variant too. Captions have been added for ENU and ITA.

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

    Best Regards,

    Duilio Tacconi (dtacconi)

    Microsoft Dynamics Italy

    Microsoft Customer Service and Support (CSS) EMEA

  • Microsoft Dynamics NAV Team Blog

    New Release of the Application Test Toolset

    • 0 Comments

    A new release of the Application Test Toolset for Microsoft Dynamics NAV 2009 SP1 is available on PartnerSource. This toolset builds on top of the testability features that were released with Microsoft Dynamics NAV 2009 SP1. These features add test capabilities to the development environment, the C/AL language, and the runtime platform. They enable the adoption of a test-driven development style and the development of automated test suites that execute fast and reliably.

    The main theme of this new release is the addition of a significant body of C/AL tests. Overall, it includes:

    • 226 application tests (covering areas such as service management, sales, purchasing, inventory management, jobs, and finance)
    • Application-specific test libraries (e.g., creation functions)
    • Generic test libraries (e.g., assertions, logging)
    • Backup management
    • Test case management

    Keep an eye on this blog for more posts on testing NAV solutions in the coming weeks.

     

    Bas Graaf

  • Microsoft Dynamics NAV Team Blog

    Now Available: Microsoft Dynamics NAV How Do I videos on MSDN

    • 2 Comments

    Check out the new videos on MSDN. http://msdn.microsoft.com/bb629407.aspx. These videos target the developer audience for Microsoft Dynamics NAV 2009 SP1. The current offerings include:

    • Outlook Synchronization Configuration
    • Warranty Lots in Warehouse Management
    • Revaluation Journal Process for Inventory
    • Expiration Lots in Warehouse Management
    • Exact Cost Reversal

    More videos are in the works and will target both the platform and the application, so check back often to see what's been added. All videos are in English.

     

  • Microsoft Dynamics NAV Team Blog

    Synchronizing Company contacts and Person contacts to one dedicated Contacts folder using a new Outlook Synch. Entity

    • 4 Comments

    There have been many requests for some weeks if it is possible to synchronize contacts of Company type and contacts of Person type in Dynamics NAV to one single folder in Outlook. The answer is: Yes, this is possible. The question is: How should we do this? This blog posting will describe how this can be done. It is not difficult, but some steps needs to be done very careful.

    First of all, ensure the Outlook Synch User Setup form is empty. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. User Setup
    • Select all rows and press F4 to delete the lines
    • Press Yes to confirm deletion

    Second, I would reset all demo entities to default values. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. Entities
    • Select Code and press F5
    • Select CONT_SP
    • Press Sync. Entity button and select Reset to defaults
    • Select Microsoft Dynamics NAV Salespeople
    • Press OK
    • Repeat the above steps for the other entities taking the following order into account: CONT_COMP, CONT_PERS, TASK and finally repeat the steps for APP entity

    Now it is time to create a new entity. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. Entities
    • Select Code and press F3
    • Type a name in the Code field, e.g.: CONT_ALL
    • Press Sync. Entity button and select Reset to defaults
    • Select Microsoft Dynamics NAV Contacts of the Company type
    • Press OK
    • Select Description and remove Microsoft Dynamics NAV Contacts of the Company type
    • Type in a new name, e.g.: Microsoft Dynamics NAV Contacts

    Another step that needs to be done is to create the correct dependencies for the TASK entity. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. Entities
    • Select Code and press F5
    • Select TASK
    • Select No. of Dependencies next to the Outlook Collection Links and press F6

    The following will be shown:

    • Select a new line to add CONT_ALL as a new Depend. Synch. Entity Code
    • Select Table Relation for CONT_ALL and press F6
    • Ensure the following line is added  WHERE(No.=FIELD(Contact No.))
    • Close the Outlook Synch. Entity Element Task 10000 - Outlook Synch. Dependencies form

    Similar steps that need to be done are to create the correct dependencies for the APP entity. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. Entities
    • Select Code and press F5
    • Select APP
    • Select No. of Dependencies next to Recipients and press F6

    The following will be shown:

    • Select a new line to add CONT_ALL as a new Depend. Synch. Entity Code
    • Select Condition for CONT_ALL and press F6
    • Ensure the following line is added  WHERE(Attendee Type=CONST(Contact))
    • Select Table Relation for CONT_ALL and press F6
    • Ensure the following line is added  WHERE(No.=FIELD(Contact No.))
    • Close the Outlook Synch. Entity Element APP 20000 - Outlook Synch. Dependencies form
    • Select No. of Dependencies next to Links and press F6

    The following will be shown:

     

    • Select a new line to add CONT_ALL as a new Depend. Synch. Entity Code
    • Select Condition for CONT_ALL and press F6
    • Ensure the following line is added  WHERE(Attendee Type=CONST(Contact))
    • Select Table Relation for CONT_ALL and press F6
    • Ensure the following line is added  WHERE(No.=FIELD(Contact No.))
    • Close the Outlook Synch. Entity Element APP 30000 - Outlook Synch. Dependencies form

    Now, it is time to delete the original demo entities. To do so, follow steps below:

    • Go to Administration, Application Setup, Microsoft Office Outlook Integration
    • Select Outlook Synch. Entities
    • Select Code and press F5
    • Select CONT_COMP
    • Press F4 to delete the entity
    • Press Yes twice to confirm deletion
    • Select Code and press F5
    • Select CONT_PERS
    • Press F4 to delete the entity
    • Press Yes twice to confirm deletion

    The entity list now looks like this:

    Last but not least, the Outlook Synch. User Setup form will have to be filled in with correct date.

    The following could be setup in Dynamics NAV:

    The following could be setup in Microsoft Outlook:

    Regards,

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

  • Microsoft Dynamics NAV Team Blog

    Books! Five Options for Learning More About How to Create RoleTailored Solutions with Microsoft Dynamics NAV (Updated!)

    • 1 Comments

    [Updated with a fifth book!]

    This month the fourth fifth English-language book on Microsoft Dynamics NAV 2009 is being released. For those of us working on Dynamics NAV, it is exciting to see that partners are so invested in our product that they eagerly spend months writing a book to help other partners be more productive when creating Dynamics NAV solutions. The latest book is Microsoft Dynamics NAV 2009 Application Design by Mark Brummel, whom I recently met at Directions EMEA.

    Here's the list of all four five books:

    • Microsoft Dynamics NAV 2009 Application Design, by Mark Brummel. Mark walks the reader through the Microsoft Dynamics NAV application architecture, and explains in detail how a Dynamics NAV partner can customize and extend the application, particularly for industry verticals. Using an extended tutorial, he demonstrates how a partner would create a custom RoleTailored implementation. Finally, Mark provides some guidance on the full software development lifecycle, from requirements gathering to development, deployment, and on-going support.
    • Programming Microsoft Dynamics NAV 2009, by David Studebaker. After the Microsoft Dynamics NAV developer documentation (see MSDN), this book is the bible on how to program Dynamics NAV. While his previous book (Programming Microsoft Dynamics NAV) focused on the Classic client, this book is devoted to developing for the RoleTailored client. Dave explains in detail the C/AL language; how to debug your application; and how to create objects, use triggers, add business logic, and design pages and reports. If you are a Dynamics NAV developer, or a consultant who wants insight into Dynamics NAV design and development, you should read this book.
    • Implementing Microsoft Dynamics NAV 2009, by David Roys and Vjekoslav Babić. David and Vjekoslav introduce the reader to the new RoleTailored client and the power of RoleTailored solutions. They then provide guidance on how to implement a custom solution across the full software development lifecycle. They also cover extending Microsoft Dynamics NAV with web services and .NET-based add-ins. Finally, they provide a real-world tutorial on how to create a Dynamics NAV add-in. The book comes with a companion website: http://www.teachmenav.com/.
    • The NAV/SQL Performance Field Guide, by Jörg Stryk. Now that the Classic database is going away in NAV "7", it is more important than ever to understand how to administer and optimize performance in Microsoft SQL Server for Microsoft Dynamics NAV. Jörg provides specific guidance on how to tune both SQL Server and your Dynamics NAV code to increase application performance.
    • [UPDATE] ERP and Business Processes, illustrated with Microsoft Dynamics NAV 2009, by Hans van der Hoeven. In his primer on the processes that small and medium-sized companies use to run their business, Hans uses Microsoft Dynamics NAV 2009 to demonstrate how these business processes might be expressed in an ERP software package. While this is not a book about Dynamics NAV, consultants and business managers may find it useful to learn ERP concepts and processes by using the context of Microsoft Dynamics NAV.

    If you want to increase your skills on developing a Microsoft Dynamics NAV solution—particularly if you want to better understand how to create a RoleTailored solution—I recommend that you get your hands on one, or even all four five, of these books.

    — Paul Chapman

  • Microsoft Dynamics NAV Team Blog

    Outlook Synchronization: working with conditions in several scenario's

    • 0 Comments

    To limit the synchronized data and for simplicity reasons, we usually recommend to create conditions like the following:

    mmels APP                  WHERE(Salesperson Code=CONST(MME))               1
    mmels CONT_COMP WHERE(Salesperson Code=CONST(MME))
    mmels CONT_PERS  WHERE(Salesperson Code=CONST(MME))
    mmels CONT_SP       WHERE(Salesperson Code=CONST(MME))
    mmels TASK               WHERE(Salesperson Code=CONST(MME))               1

    Only contacts that have an assigned salesperson (MME in this example), will be synchronized. This is a good way to limit the data. For the contact entities, other suggestions are also possible. E.g.:

    mmels APP                  WHERE(Salesperson Code=CONST(MME))               1
    mmels CONT_COMP WHERE(Country/Region Code=CONST(EMEA))
    mmels CONT_PERS  WHERE(Country/Region Code=CONST(EMEA))
    mmels CONT_SP       WHERE(Salesperson Code=CONST(MME))
    mmels TASK               WHERE(Salesperson Code=CONST(MME))               1

    In this example above, only company and person contacts in EMEA will be synchronized. It would be nice to have the other regions synched as well, wouldn't it? In the Outlook Synch. Entities, we can easily create new entities and have them reset to default values. In the example below, company contacts in Latin America needs to be synched as well. You can of course do the same for any other region, company and/or person, etc.
    1. select Administration, Microsoft Office Outlook Integration, Outlook Synch. Entities
    2. select Code and press F3
    3. in the Code field type in CONT_LATAM
    4. press button Synch. Entity
    5. select Reset to Defaults, select "Microsoft Dynamics NAV Contacts of the Company type", press OK
    6. press button Synch. Entity, select Register in Change Log Setup

    Now for the Outlook Synch User, add the newly created entity and create a condition for Latin America, etc. The result would be like this:

    mmels APP                    WHERE(Salesperson Code=CONST(MME))               1
    mmels CONT_COMP   WHERE(Country/Region Code=CONST(EMEA))
    mmels CONT_PERS    WHERE(Country/Region Code=CONST(EMEA))
    mmels CONT_SP         WHERE(Salesperson Code=CONST(MME))
    mmels CONT_LATAM WHERE(Country/Region Code=CONST(LATAM))
    mmels TASK                 WHERE(Salesperson Code=CONST(MME))               1

    In this example, company and person contacts in EMEA will be synchronized but also company contacts in Latin America. Remember that per entity a folder in Outlook should be created and assigned via the Outlook Addin. In a later posting, I will describe how to create one entity that will synch company and person contacts to one folder. That is a really a nice to have.

    When working with TASK and APP, the conditions given in the example above are mandatory. A task in Outlook must contain an owner and an appointment in Outlook must contain an organizer.

    For the CONT_SP entity there is some flexibility. In the above example, only one salesperson would be synchronized for the Outlook Synch User called mmels.Let's assume a ToDo must be created in Dynamics NAV for a given contact and the required attendees are two salespersons / Outlook Synch Users. The manual tells us that when working with tasks and appointments in an Exchange Server environment, the E-mail field must be populated from the Exchange Address Book. Also see earlier blog and the relevant whitepaper:
    http://blogs.msdn.com/b/nav/archive/2008/11/04/tip-1-the-related-item-for-the-synchronized-outlook-item-is-not-found-in-the-specified-folders-the-following-values-were-expected.aspx
    After first full synchronization, the existing salespersons can be populated with an E-mail address and then synchronized back to Dynamics NAV via a normal synchronization.

    To avoid the situation that in this scenario only one salesperson is synchronized correctly and populated with the required E-mail field, we now recommend to remove the condition from the CONT_SP entity, The example above would now look like this:

    mmels APP                  WHERE(Salesperson Code=CONST(MME))               1
    mmels CONT_COMP WHERE(Salesperson Code=CONST(MME))
    mmels CONT_PERS  WHERE(Salesperson Code=CONST(MME))
    mmels CONT_SP     
    mmels TASK               WHERE(Salesperson Code=CONST(MME))               1

    Regards,

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

  • Microsoft Dynamics NAV Team Blog

    Useful, Usable, and Desirable

    • 5 Comments

    Today, I would like to tell you how the User Experience team for Microsoft Dynamics NAV does research to validate that our products are indeed Useful, Usable, and Desirable.

    My name is Arne de Booij and I am a so-called User Experience Researcher working with the Microsoft Dynamics NAV team. That means that I need to understand on a personal level what your relationship to our product is. I support various development teams by answering their user related questions through performing all kinds of research activities with current and future users. Questions I get asked a lot are, for example:

    • Can people actually figure out what to do here?
    • What is someone trying to accomplish when they do this?
    • Does someone really want or need this functionality?

    There are various ways to answer these questions, depending on, for example, whether we are getting ready to make software and therefore are looking at an early sketch of the user interface or whether we are out at a customer site where our product has been installed and have direct access to the users that this particular user interface has been designed for. The answers that we get from this research will help make our product better for our users by answering their needs and helping them work more efficiently.

    Recently, we completed a quite extensive research project to answer some questions about the RoleTailored Client (RTC) that we shipped with Microsoft Dynamics NAV 2009. This new client enables our users to “tailor” the software to their own unique needs in their own unique role. Delivering the product was the result of a very long design and development process and we wanted to know how our users are using this new client so that we can assess what adjustments, if any, we should make as we continue down the path of RoleTailored applications. We wanted to know things like:

    • Which new features of the RTC are people using?
    • Which aren’t they using and why?
    • How do users perceive the impact of the RTC on their productivity?

    During late 2009 and early 2010, we conducted research with the help of companies that were using the Microsoft Dynamics NAV 2009 RTC product to run their businesses. We visited each company for an entire day. During the visits, we started with a 1- 1½ hour interview with a company representative, usually someone from the IT department, to get more information about the company and their setup of Microsoft Dynamics NAV 2009. After that, we sat down at the desks of the people who actually use the RTC for their daily work. We asked them to show us how they performed their most important day-to-day tasks. During this time, we took photographs, asked follow up questions and of course, took a lot of notes. For each task they showed us, we also asked a few questions to help us measure the satisfaction they had performing that task in the RTC. After the visit, we continued to gather information by sending participants a link to a post-visit survey used to measure the level of productivity a participant experienced with the RTC. Let’s look at the results.

    In total, 53 participants, working for 16 different companies, participated in this research project. The companies were located in the United States, Canada, the United Kingdom and Germany. The companies where the participants worked were active in, for example, the Software industry, Wholesale and Manufacturing (19%), Distribution and Professional Services (13%), Charity, Retail and as a Dynamics Partner (6%).

    62% of participants had not used a previous version of Microsoft Dynamics NAV before they started using Microsoft Dynamics NAV 2009. 38% had used a previous version of Microsoft Dynamics NAV before.

    Most participants (42%) were working in the Finance department of their company. Other main departments were Warehouse (13%), Customer Service (9%), Purchasing (8%), IT (8%), Sales (6%) and Operations (6%). Participants had used Dynamics NAV 2009 for an average of 5.4 months (range 1-24 months) and were using Dynamics NAV 2009 for an average of 5.7 hours per day (with a range spanning 2 – 8 hours).

    Like any good research study, we learned a lot!

    The results told us that there a lot of good things our users are experiencing when they use the RoleTailored client. For example, people on the product reported high satisfaction and productivity while performing the tasks that are most important to them.

    But the results also shed a light on some things we need to improve. For example, there are still some tasks that require too many clicks or areas where finding the right information is still not immediately clear.

    But the biggest takeaway for us, by far, was that a lot of companies and their users were not taking full advantage of the many ways they can configure and personalize their own experience. For example, for things that our users do every day—like accessing a customer record or taking an order—we have enabled them to add those actions directly to the Action Pane. Because our users weren’t doing that, they have to perform unnecessary actions every time they needed that functionality, which decreases their level of productivity. Same holds true for not having all of the lists a user needs ready and loaded into their navigation pane--a very simple personalization to do. That means that users are forced to go to Departments to find that information.

    So what did we learn? We’ve still got work to do. Job security--they call it. Seriously though, there could be a lot of reasons that some users are not taking full advantage of the features in the product that allow them to tailor the solution to their specific needs, so we are continuing to investigate this.

    Which brings me to you… if you are reading this and have seen something similar in your company, please help us help you! Feel free to leave a comment with your thoughts on why this is the case and what we can do to help you get the most from your user experience.

    To learn more about RoleTailoring, try out these links:

    - Thinking RoleTailored Presentation at Microsoft Convergence 2010

    - Microsoft Dynamics is familiar to your people

  • Microsoft Dynamics NAV Team Blog

    Web services crash after first web service call

    • 4 Comments

    If you are testing out NAV Web services and find that you cannot make any calls beyond your initial and then find that the NST is no longer running, please try the following:

    Compile the following:

    Type

    ID

    Name

    CU

    6810

    EP Request Handler

    CU

    8700

    Mobile Document Dispatcher

    CU

    99008528

    BizTalk Appln. Srv. Startup


    The error commonly occurs because one or more of these three codeunits do not have an entry in table 2000000071 - Object Metadata. They are all called in codeunit 1 on CompanyClose(). This then means that the call itself will run fine, but the closing of the connection will cause the failure and the NST to crash.

     

     

    Lars Thomsen
    Support Engineer
    Microsoft Support

  • Microsoft Dynamics NAV Team Blog

    Style Sheet Tool Extended

    • 4 Comments

    For those that have not used this before, the Style Sheet Tool is a free code sample used as an addition to standard Dynamics NAV application, for enhancing send-to Word functionality on Dynamics NAV by allowing simple and user-friendly style sheet customization. After lots of feedback form partners, I have added an extra dimension to this tool: the ability to export several tables with multiple records. Up to now, any number of tables was allowed provided they all show one record each, in addition to one table showing multiple records.

    This ’constraint’ is now removed, or rather, the design is adjusted to allow several tables showing multiple records each, to be included in merge document design.

    To align the tool with this extension, the following code needs to be replaced:

    Codeunit 680 : Style Sheet Management

    Global variables: add following two variables to the list of global variables of this codeunit

    Name                                            DataType

    NoOfMultiLineTables                     Integer

    MLCounter                                    Integer

    ManageMultiLineChanges trigger   (this code change applies to all versions of the tool)

    Old Code: 

    ...

    RemoveEndOfMultiLine(NodeTextValue);

    EXIT(Return);

    ...

    New Code:

    ...

    RemoveEndOfMultiLine(NodeTextValue);

    // EXIT(Return);                           //changed line

    ...

    CreateMultilLineSection trigger (the code marked as old code here differs a bit in different versions of the tool. The essence of the change is still the same, MLCounter is to be 'started' at the beginning of this trigger)

    Old Code:

    // Create section for Multi-Lines

    ChildNode := IOChildNode.parentNode;

    ...

    New Code:

    // Counter for multiple multiline sections //added line

    MLCounter +=1;                             //added line

    // Create section for Multi-Lines

    ChildNode := IOChildNode.parentNode;

    ...

    CreateMultiLineBody trigger

    Local variables: the following local variable is added to the trigger

    Name

    DataType

    MultilineEnd

    Boolean

    (the code marked as old code below differs a bit in different versions of the tool, and this line is called in several triggers in some versions of the tool. The essence of the change is though the same:

    EACH references to  multiline-section-properties (contained within this line: LoadAttributes(1,'name','multiline-section-properties');)

    should be replaced with  LoadAttributes(1,'name','multiline-section-properties'+FORMAT(MLCounter)) as that creates unique references to different multi-line sections by adding a counter to the end of each, where there previously was only ONE, called multiline-section-properties

    The example below is from version 1.1

    Old Code:

    ...

    ParentNode := ChildNode.parentNode;

    LoadAttributes(1,'name','multiline-section-properties');

    AddElement(ParentNode,NewChildNode,Text043,1);

    ...

    New Code:

    ...

    ParentNode := ChildNode.parentNode;

    // Add counter to multiline section name, for unique reference         // added line

    LoadAttributes(1,'name','multiline-section-properties'+FORMAT(MLCounter)); //changed line

    AddElement(ParentNode,NewChildNode,Text043,1);

    ...

    The following code change applies to all versions fo the tool:

    Old Code:

    ...

    ChildNodeList := ParentNode.childNodes;

    FOR NodeCount := 1 TO ChildNodeList.length DO BEGIN

      ChildNode := ChildNodeList.item(NodeCount - 1);

      TempNodeName := ChildNode.nodeName;

      IF TempNodeName = Text043 THEN

        MultiLineNodeCount[1] := NodeCount;

      TempNodeValue := GetTextNodeValue(ChildNode);

      IF TempNodeValue <> '' THEN

        MultiLineNodeCount[2] := NodeCount - 1;

    END;

    // If MULTILINE_END is not found then set end to number of nodes.

    IF MultiLineNodeCount[2] = 0 THEN

      MultiLineNodeCount[2] := NodeCount;

    ...

    New Code:

    ...

    ChildNodeList := ParentNode.childNodes;

    NodeCount := 1;                                            //added line

    WHILE (NodeCount <= ChildNodeList.length) AND

          (NOT MultilineEnd) DO BEGIN                          //changed line

    // exit the loop when next multiline end is found          //added line

      ChildNode := ChildNodeList.item(NodeCount - 1);

      TempNodeName := ChildNode.nodeName;

      IF TempNodeName = Text043 THEN BEGIN                     //changed line

        MultiLineNodeCount[1] := NodeCount;

      END;

      TempNodeValue := GetTextNodeValue(ChildNode);

      IF TempNodeValue <> '' THEN BEGIN                        //changed line

        IF STRPOS(TempNodeValue,Text021) <> 0 THEN

          MultilineEnd := TRUE;                                //added line

        MultiLineNodeCount[2] := NodeCount - 1;

      END;                                                     //added line

      NodeCount +=1;                                           //added line

    END;

    IF NodeCount <= ChildNodeList.length THEN

      NodeCount := NodeCount -1;                               //added line

    MultilineEnd := FALSE;                                     //added line

    // If MULTILINE_END is not found then set end to number of nodes.

    IF MultiLineNodeCount[2] = 0 THEN

      MultiLineNodeCount[2] := NodeCount;

    ...

    The following code change applies to all versions fo the tool:

    RemoveEndOfMultiline Trigger

    Old Code:

    // Remove end node of Multi-Lines

    ChildNodeList := XMLDoc.getElementsByTagName('w:r');

    FOR NodeCount := 1 TO ChildNodeList.length DO BEGIN

      ChildNode := ChildNodeList.item(NodeCount - 1);

      ParentNode := ChildNode.parentNode;

      IF STRPOS(GetTextNodeValue(ChildNode),Text021) <> 0 THEN BEGIN

        ParentNode.removeChild(ChildNode);

        EXIT;

      END;

    END;

    New Code:

    Add the following parameter to this trigger:

    Name                        DataType    Length

    NodeTextValue  Text     250    

    // Remove end node of Multi-Lines

    // nodetextvalue = multiline_begin_tablename

    NodeTextValue := COPYSTR(NodeTextValue,17,MAXSTRLEN(NodeTextValue));  //added line

    ChildNodeList := XMLDoc.getElementsByTagName('w:r');

    FOR NodeCount := 1 TO ChildNodeList.length DO BEGIN

      ChildNode := ChildNodeList.item(NodeCount - 1);

      ParentNode := ChildNode.parentNode;

      IF STRPOS(GetTextNodeValue(ChildNode),Text021) <> 0 THEN BEGIN

      //Check if this is the right MULTILINE_END to remove                // added line

        IF STRPOS(GetTextNodeValue(ChildNode),Text021+'_'+NodeTextValue) <>0 THEN //added line

          ParentNode.removeChild(ChildNode);

      // EXIT; // remove all ends                                        //changed line

      END;

    END;

    Replace all occurences of the call to this trigger in the code:

    RemoveEndOfMultiline;

     with

    RemoveEndOfMultiline(NodeTextValue);

    The extended codeunit 680 object is also attached.

    Note: Code changes described apply to all versions of the tool, the codeunit attached applies to version 1.1 

    You can direct your questions or feedback to jthunes@microsoft.com

  • Microsoft Dynamics NAV Team Blog

    Outlook Addin generates an error: This attendee already exists

    • 0 Comments

    There are two ways to create meetings in Outlook:
    1. directly from the Calendar folder
    2. directly from the Contact, right click on the contact, press Create and then select Meeting

    The latter would open a new form where you can enter the required data, etc. Not a big deal but after synchronization from Outlook to Dynamics NAV, the Outlook Addin gives an error:

      This attendee already exists

    When creating a meeting by right clicking a contact, a link is added to a meeting for that contact. In order to see the linked contacts, go to Tools, Options, Contact Options, Show Linking on all forms. It is then visible at the bottom of a meeting form.

    Linked contacts are synchronized as to-do antendees (tab5199) with a flag attendance type (field 3) set to false. While normal contacts have this flag set to true. If there is the same contact present as a meeting attendee in Outlook and as a linked contact, the error occurs when synching, "This attendee already exists".

    It is not supported to have multiple attendees with the same email in outlook, added as recipients or as links since this prevents a correct synchronization to Dynamisc NAV.  As a workaround, Links should be removed from the APP entity, alternatively a duplicate attendee or a link should be removed from a meeting in Oultook before synchronizing the meeting.

    To remove the Links from the APP entity, the following needs to be done:
    - go to Administration, Application Setup, Microsoft Office Outlook Integration, Outlook Synch. User Setup
    - select the APP entity, select No. of Elements and press F6
    - select Links and press F4, Yes to delete the Links Outlook Collection from the APP entity in the Outlook Synch. Entity APP - Outlook Synch. Setup Details form

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

  • Microsoft Dynamics NAV Team Blog

    Outlook Addin error: The related item for the synchronized Outlook item is not found in the specified folders. The following values were expected:.

    • 6 Comments

    When working with tasks and appointments, the following error could show up:

      The related item for the synchronized Outlook item is not found in the specified folders. The following values were expected:.

    It took us a while to find out why this error occurred. Let me first describe how this can be reproduced:

    First of all, create two contacts in the Contacts table in Dynamics NAV and use the following data:

    First Contact:
    John Doe
    Downingstreet 10
    1234 XX NL
    johndoe@dummy.nl

    Second Contact:
    John Doe
    Johningstreet 12
    5678 XX NL
    doejohn@123.nl

    - then install Demo installation of Dynamics NAV 2009 SP1 using domain user account called DOMAIN\Administrator
    - install NAS of Dynamics NAV 2009 Sp1 and populate it with the correct values
    - go to Administration / Application Setup / General / Change Log Setup
    - enable Change Log Activated
    - go to Sales & Marketing / Sales / Salespeople
    - press F3 and use the following data to create a salesperson

    MME
    Marco Mels

    - go to Administration / Microsoft Office Outlook Integration / Outlook Synch. User Setup
    - add the following to the Outlook Synch. User Setup window (Bidirectional):

    mmels CONT_SP        
    mmels CONT_COMP WHERE(Salesperson Code=CONST(MME))
    mmels CONT_PERS WHERE(Salesperson Code=CONST(MME))
    mmels TASK WHERE(Salesperson Code=CONST(MME))             1
    mmels APP WHERE(Salesperson Code=CONST(MME))               1

    - press Setup, select Register in Change Log Setup for CONT_SP, CONT_COMP, CONT_PERS, TASK and APP
    - start up Outlook and configure the Outlook profile with the correct settings for Mailbox enabled user account called Marco Mels
    - configure the Outlook Addin with the following folders:

    CONT_SP: Mailbox - Marco Mels\Contacts\Salespeople
    CONT_COMP: Mailbox - Marco Mels\Contacts\Company Contacts
    CONT_PERS: Mailbox - Marco Mels\Contacts\Person Contacts
    TASK: Mailbox - Marco Mels\Task
    APP: Mailbox - Marco Mels\Calendar

    - perform a Full Synchronization
    - go to the synchronized contact Marco Mels and populate it with an E-mail address
    - perform a normal Synchronization
    - go to Sales & Marketing / Sales / Salespeople
    - create a ToDo of Meeting type for salesperson Marco Mels
    - add a Contact attendee called John Doe (
    johndoe@dummy.nl) and finish the meeting creation
    - go to Sales & Marketing / Sales / Salespeople 
    - create a ToDo of Meeting type for salesperson Marco Mels
    - add a Contact attendee called John Doe (
    doejohn@123,nl) and finish the meeting creation
    - synchronize the ToDo's

    Result:
    The ToDo is created as a meeting in Outlook
    The Outlook Addin contains a red light showing an error for the created meeting:

    The related item for the synchronized Outlook item is not found in the specified folders. The following values were expected:.

    The Scheduling tab of the synchronized meeting contains one underlined entry:
    Marco Mels: underlined
    John Doe: not underlined

    - press CTRL+K and select the correct John Doe and press OK
    - synchronize the meeting requests, etc.

    Result:
    The ToDo is created as a meeting in Outlook.
    The Outlook Addin now does not contain a red light showing an error for the created meeting:

    In the beginning of the analysis we thought that this behavior was only seen if you had contacts with the same name, but with different email addresses. Then it would be natural Outlook behavior and the error message would just indicate that the user should verify the meeting and ensure the right contacts. The proposed solution to prevent the error message when it is not needed. The suggested fix now also ensures the the email address is being used in the attendee field. Combining the two fields name and email address would ensure that Outlook has enough information to actually resolve who is the contact.

    A hot fix exists for this issue and is described in KB article:
    983614 The related item for the synchronized Outlook item is not found in the specified folders. The following values were expected:.
    https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;EN-US;983614

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

  • Microsoft Dynamics NAV Team Blog

    Outlook Addin invisible or inactive with error in debug log Dump of exception type 'System.IO.FileLoadException'

    • 0 Comments

    Sometimes the Outlook Addin, especially after a reinstall, becomes inactive or the Outlook Addin does not show up at all. The reason behind this is that the two below mentioned files have different build releases which causes the assemblies not to be loaded. After enabling the debug log file, the following error log can be seen:

    Error: 23.04.2009 11:51:47 [1] Dump of exception type 'System.IO.FileLoadException'
    Message: Could not load file or assembly 'Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn.resources, Version=5.0.26084.0, Culture=nb-NO, PublicKeyToken=4d69abd5d321bc2b' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
    Stack trace: at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
    at System.Reflection.Assembly.InternalGetSatelliteAssembly(CultureInfo culture, Version version, Boolean throwOnFileNotFound)
    at System.Resources.ResourceManager.GetSatelliteAssembly(CultureInfo lookForCulture)
    at Microsoft.Office.Core.CommandBarsClass.get_Item(Object Index)
    at Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn.Connect.OnStartupComplete(Array& custom)
    Inner exception: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn.resources, Version=5.0.26084.0, Culture=nb-NO, PublicKeyToken=4d69abd5d321bc2b' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
    File name: 'Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn.resources, Version=5.0.26084.0, Culture=nb-NO, PublicKeyToken=4d69abd5d321bc2b'

    The following two files have different build releases:
    - Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn.resources.dll 5.0.25791.0
    - Microsoft.Dynamics.NAV.OLSync.NAVSyncAddIn .dll 5.0.26084.0

    A hot fix exists for this issue and is described in KB article:
    974581 The Microsoft Dynamics NAV Sync Add-in is not displayed or unavailable in Outlook and an error message is logged in the debug log: "Could not load file or assembly"
    https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;EN-US;974581

    Marco Mels
    CSS EMEA

    This posting is provided "AS IS" with no warranties, and confers no rights

     

  • Microsoft Dynamics NAV Team Blog

    Understanding RoleTailored Client Terminology

    • 1 Comments

    The RoleTailored client in Microsoft Dynamics NAV 2009 is designed to help users focus on their tasks by tailoring their application experience to the needs of their role. To help our customers better understand this new paradigm, and to help partners more easily create RoleTailored solutions, we’ve released an overview of terminology used in the RoleTailored client user interface. Customers can download the slide deck from the Microsoft Download Center. Partners can also read more information on PartnerSource (LINK).

    This terminology overview complements the User Experience Guidelines. These UX Guide provides guidance to partners on how to design user-friendly RoleTailored solutions. You can download the UX Guide from the Microsoft Download Center.

Page 34 of 52 (769 items) «3233343536»