Monday, December 26, 2011

Implementing Nmbering Series

Number series is feature in NAV that allows usage of numbering methods and also allows the application to work the same everythere.

This tutorial will explain how to implement Number Series in a new table or add them to existing table. First part of tutorial is focused on creating No. Series columns in tables, middle part of tutorial is focused on coding auomatization of No. Series and last part of tutorial is focused on creating function which will be used to drill down to numbering series line of our specific numbering series.

Another thing, best way for designing and developing NAV is using existing functions and code because they're already tested and probably working without bugs.

Step 1: Creating numbering series columns in a table


In our new / existing table You need to create this two columns (fields) which will be used for storing number series. First field (No.) needs to be created as primary key field.

Please name columns as in next table because of copying functions from other tables, and also this is standard naming policy for No. Columns and Number Series columns in NAV.

To create this fields, go to the object designer and create a new Table / design existing table.


Now our table should look like this.

Step 2: Compile table and add C/AL code


When implementing number series automation, there are some required pieces of code that you must include in your table:

  1. OnInsert() trigger,
  2. OnValidate() trigger for No. field,
  3. AssistEdit function.

Whithout writing New code You can paste it from Sales Header Table and modify it, or decide to write you own code. It's up to you.

Before writing Code You need to create Function AssistEdit in Table C/AL Globals with return value Boolean, which you enter in Locals parameters of function.


After function is created you need to create link to No. Series Setup table for your table and NoSeriesManagement codeunit for automatization of number series which will be explained later in this article.


After table C/AL globals are created, compile table, close it and reopen it in design view.

NOTE: Reason for compiling table is because Rec and xRec still aren't validated by compiler and table data so you need to do so in order to write and compile table later. In case you forget this you need to save your new table without Compiled option, and compile it later through object designer.

Now you can start writing your code and when you're deone with modifying your code your new table should look like this.


Now, lets through every trigger and AssistEdit function and explain what they are going to do:
  • OnInsert() trigger. Basicly here we write code which tests value in No. Field and if it's empty it calls our rcdSetup record (C/AL Global variable that links our table with table where we're choosing number series for our table nad form) and test if there is value in field „Br. serija za RC“ which is field developed for setting up number series for this project. If we have previously choosed number series we are calling codeunit NoSeriesManagement (C/AL global NoSeriesMgt) which is inserting next value from No. Series Lines table into No. Series and No. fields.
  • No. – On Validate () trigger. Here we write function which tests if value in No. field is equal as one in No. Series Lines table. If it is not, then it sets value of No.Series to blank because of insert automation which is dependent on No. Series fields.
  • AssistEdit function. This function is developed for purposes of DrillUp to form of No. Series form based on No. Series data of No. Series field of our table. Basicly it calls for NoSeriesManagement function to validate No. Series. Later, when developing forms and pages, this function will enable us to call No. series window with exact No. series value un field of No. of our form.

Step 3: Creating own numbering series


In our table we have added existing No. Series settings whtough rcdSetup C/AL Global parameter. If yuo want to create new number series setting which will be added to Purchase & Payables Setup. Ofcourse you can add number series setup to any other form.

First step is to create new table field which will be used for our purpose. Best thing is to copy and paste existing field for number series.


Now go to last row of table and paste selected column.


Rewrite Field No. to to match row order.

After modifying row of table be sure to check properties of table and TableRelation parameter which needs to be set to „No. Series“ because we used this value in our based table as value for No. Series relation.

If you decide to change this to another value than you need to update our first table with this value – only in C/AL code.


Step 4: Update C/AL code and C/AL globals in first table


After modification of table, you need to go back to our table and change Record parameter in C/AL globals and in C/AL code replace "Br. serija za RC" with „Implementing Nos.“.

Now our C/AL globals need to look like this:


And C/AL code needs to look like this:


Save the table.

Step 5: Create user interface


Last step in implementing our Number series functionality is to set user interface. This is done with OnAssistEdit() trigger on No. field. This will add new button in form field which will open form with No. seris of our setup table.

Create new card form with form wizzard or page with page wizzard.



Now enter C/AL code to trigger


When developing page change CurrForm with CurrPage and you're set.

Now let's test our form.


Enjoy..

Thursday, December 22, 2011

Deleting Rows from FA Journal Page

Working with new Dynamics NAV 2009 pages can be very frustrating, especially if you are used to using keyboard shortcuts in your work.

Other thing that, in my opinion, is nature of pages which is almost opposite of old classic NAV forms. This is what I've encountered during testing of NAV pages.
In classic NAV lists it was easy to mark rows (selecting rows (CTRL+a) and marking feature which is removed from Pages), but on pages it isn't so.
Despite easy of use and windows features, marking was more or less - the same. But I've encountered some strange issues with deleting marked rows in Fixed Asset Journals.

I've marked all of rows (with keyboard) and tried to delete them, but nothing happened.


In picture above you can see that when I selected all rows cursor came to last row and last column and positioned itself in field as if I'm going to enter data into it.

After some testing I still didn't found root of problem and fixed this issue.

I tried changing type of field and even set Edit parameter of last field to , but it didn't work.
Next I tried to mark them with mouse and then tried to delete rows and this time it worked.

Tuesday, October 25, 2011

CRM 2011 Installing Issues

Installing CRM 2011 Server sometimes can be frustrated and requires mining through Active Directory and manipulating users and user groups. First thing that installer needs to take in consideration are administrative rights.

User who is going to install CRM needs to be member of Administrator group on CRM server

Lets assume that this is considered by default. Next thing you need to have is same user set up as SQL SysAdmin. If this is done, this isn't all that needs to be done. There are more issues that pop-up during CRM installation.

microsoft.crm.setup.server.addaspnetserviceaccounttosqlaccessgroupaction failed. Access is denied

To reslove this issue user needs to be member of the following Acrive Directory groups:
  • PrivUserGroup
  • PrivReportingGroup
  • ReportingGroup
  • SQLAccessGroup
  • UserGroup

One more thing which you need to point your attention to is type of permission user is granted through Active Directory which must be set up as Read/Write and must be applied to This object and all dependent obects.


And, here is a Microsoft's KB article which explains how to install CRM with minimum permissions. Article is written for CRM 4.0 but requirements are the same.

http://support.microsoft.com/kb/946677

Wednesday, August 3, 2011

NAV 2009 RTC MenuSuite and Action pane itmes relation

Let's talk about how smart RTC is when designing action menu items (Home items).

When designing Menu action (Home items) You want Your users to have on-eye ability to use most user NAV funcionalities. So naturally You'll add actions that represent those form (or card) NAV items.
NAV RTC has programmed logic that sounds something like this:


When designing action cues use those drop down forms as home items because it is big probability that user will use those forms often!


In short this means that all forms or cards used when developing cues those forms will automatically show in home items and you don't need to manually add them on Page actions.

Of course there is a little bit problem if you want to remove those items from home acitons. This is still RTC built in funciontality and it is depended on Microsoft's will to make this RTC modification.

NAV 2009 RTC Blank MenuSuite Items

When creating / converting menusuites from Classic client to RTC client there is one thing, besides menu structure and permissions, that You need to think about and that is multilanguage options.

RTC handles multilanguage items drastically harder than classic client. This means that you must specify menusuite item captions for every item and for evey language used. If You don't populate Caption ML those itmes won't show in RTC departmets for language that wasn't specified on seperate items.
Of course Your items will show when viewing RTC using default language.

Saturday, July 30, 2011

Date error when starting RTC report

Microsoft Dynamics NAV 2009 is in many ways depending on Microsoft Windows OS.
One of dependencies we're going to talk about is date formating.

NAV 2009 RTC has issue with interpretation of date formating and displaying reports if date format isn't set up according to RTC liking. In my experience when trying to run RTC reports with standard date formating You'll get following error::


Just for information (You probably won't get same error as I did) this error is displayed in Croatian language (from NAV 2009 R2 Croatian localization) and it means: Date isn't valid.

Solution for this problem is to set up Microsoft Windows Regional Settings and change date formating. Path to date formating set up is:


Control Panel > Regional Settings > Formats > Additional settings... > Date > Date formats.

Here you need to change two fields:
  • Short date,
  • Long date.


Yuo need to change current values to:
  • Short date: d.M.yyyy
  • Long date: dd.MMMM.YYYY
Notice that only thing that is different is full stop mark (".") at the end of date formatting.
After change (close RTC if you opened it) start NAV 2009 RTC.

Thursday, July 28, 2011

RTC Connection to SQL Server

Have you ever had problems with NAV upgrade and RTC connection?

Today we've just finished wih upgrade from NAV 4.0 SP4 to NAV 2006 R2 and had wierdes problem. After upgrade, testing classic client functionalities and RTC functionalities we decided that it's time to upload ugraded database to client server.

After setting up server, installing new clients and testing of classic functionalities we moved on to RTC testing. Of course we thought that we aren't going to experience any problems because of previous hard RTC tesing. And we were wrong.

We got our first error and eaven didn't start RTC on client side. Even we installed Demo database (Cronus International Ltd.) and showed it to he users and modified connection string to our database we  got this error:



And then we started mining for solution. This is what we tried:
  • deleting user personalization table (2000000071),
  • restarted NAV services,
  • restarted Windows server,
  • deleted and updated object medatada table (2000000071) from Cronus databas for common objects.

Last thing that we tried (and that did the trick) was deleting Object metadata table and compiling all objects from Object designer.

CodeGenius for RTC

Open CodeGenius Studio (Configurations) and add a "Third Party" shortcut. You'll open this form:












In command line, select the exe of the RoleTailored client. Here's default location:

C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Microsoft.Dynamics.Nav.Client.exe

In the "Arguments" section, you can use the DynamicsNAV://... type of notation. For example:

DynamicsNAV://LocalHost:7046/DynamicsNav/"CRONUS Hrvatska d.o.o."

Or, go a little bit further and include the Role that you want to start as well:

DynamicsNAV://LocalHost:7046/DynamicsNav/"CRONUS Hrvatska d.o.o." -profile:"ORDER PROCESSOR"

Or, if you want to take it a little bit further, you can include the configuration-mode option:

DynamicsNAV://LocalHost:7046/DynamicsNav/"CRONUS Hrvatska d.o.o." -profile:"ORDER PROCESSOR" -configure

Bottom line, with CodeGenius you can control all RTC's available options that can be used from command line.

Thursday, July 21, 2011

NAV 2009 feature: Substitute posting groups

New feature: Substitute posting groups.

Every functionality in Sales and Marketing, that has any relevance to Posting groups, has new functionality which backs-up original posting group setting.
This functionality enables users to set up substitute posting groups thus disabling users to change posting groups as they please. Substitute Posting Groups option needs a little more effort to set-up, you'll extend NAV's security features to new level.
Standard NAV 2009 feature copies Posting groups directly from customer or vendor cards directly in form field which is dedicated to Posting group (ex. Customer Posting Group). NAV 2009 requires user to set-up rights for changing posting groups, or to enable substitute posting groups.
Setup Path: Financial Management > Receivables > Setup > Sales and Receivables Setup.

This setup form has Boolean field Allow Alter Posting Groups which enables changing of posting groups.
After enabing change of Posting Groups fill in substitute posting groups. This is done in Posting Groups SubForm

Customers Vendors
Form ID: 110 Form ID: 111
SubForm ID: 26504 SubForm ID: 26505

Path for customers: Financial management > Setup > Posting Groups > Customer > Posting Group > Substitutions.
















Path for vendors: Financial management > Setup > Posting Groups > Vendor > Posting Group > Substitutions
















Here are some pointer for consultants and implementators:
  1. When entering posting groups through NAV forms you'll get error when trying to enter same substitute posting group as upper (normal) posting group.
  2. When trying to choose posting group from Posting group flow field, and you choose same posting group you'll get error:

Tuesday, July 19, 2011

RTC vs Classic MenuSuite

In the Classic client, accessing forms and reports is done from the navigation pane, which displays menus that are contained in a MenuSuite object. In the RTC client, navigation to pages and reports is done with:
  • Role Centers
  • Departments
MenuSuite object that is useed in the Classic client can be transofmed to a Departments page that is used in the RoleTailored client.
The Departments page contains entire suite of functionality available to the company. In this way, the Departments page in the RTC is similar to the navigation pane in the Classic client. The Departments page is also a MenuSuite object with layered item structure but is designed specifically for RTC.
When creating a new MenuSuite object, you must select either the Classic client or the RoleTailored client as the target.

The ID of a MenuSuite object for the RTC will be the Classic client ID plus 1000, as shown in the following table.

MenuSuite object in the Classic client MenuSuite object in the RoleTailored client
10 MBS 1010 Dept - MBS
51 Add-on 1 1051 Dept - Add-on 1

MenuSuite object is transformed by using the Transformation Input File (TIF) Editor. The MenuSuite transformation creates a suggestion for a Departments page that is based on the navigation pane, transformation rules, and input.
After MenuSuite object transform ation, you must verify whether you need to make additional updates to the transformed Departments page. The RoleTailored client has different functionality and different user experience (UX) requirements than the navigation pane in the Classic client. The additional updates that you make to the transformed Departments page can take advantage of the new functionality.
To reduce the number of these manual updates that you have to make after transformation, verify that you meet the following conditions before transforming a MenuSuite object.

Condition Reason
PageType is assigned to all form objects. Form objects will be placed in a Department Category based on PageType.
CardFormID is assigned to all list form objects with a card. Card Form IDs in MenuSuite will be replaced with the related list.
Microsoft Dynamics NAV Developer Toolkit is installed to provide data about which reports are ProcessingOnly reports. ProcessingOnly reports are placed in the Tasks category on department pages. Other reports are placed in the Reports and Analysis category on department pages.

Wednesday, July 13, 2011

Running Transformation Tool

To run transformation tool witf TIF 1.21.700 editor and convert form to page follow there steps:
  1. Navigate to Transformation tool: Transformation > Transform forms 
  2. Start funkction: Setup > Get Forms to add forms to transformation tool.
  3. Enter ID of form you would like to transform (best view from object designer)
  4. PageType: choose Card or List or whatever option of form best suites your conversion
  5. Function > Create transformation input > Transform pages. This creates TransformPages.xml which is exported form from transformation tool.
  6. Export form from Object designer in XML form and name it Forms (forms.xml).
  7. Run Form transform tool by double clicking on Microsoft.Dynamics.Nav.Tools.FormTransformation.exe which must be located in folder entered on Setup > Transformation card setup.
  8. Open object designer and import created Pages.XML.
  9. Compile imported object in Object Designer.
  10. Edit menu (RTC menu usually named with „Dept –„) and add created page to menusuite.

Transformation Tool MenuSuite

When importing Transformation tool it creates seperate MenuSuite "TIFPM Transformation" with ID 52 and updates Company menusuite with new menu item "Transformation".

Problem with this menusuite is that users cann't see it in their normal view because menusuite created in Company menusuite has no itmes, just tree structure.

Sollution to this problem is to open two clients and copy/paste Transformation menuitems from "TIFPM Transformation" menusuite from one client to Company menusuite in other client. This copy/paste operation is done in design function of menusuite.

After copy / paste is completed you can simply delete TIFPM Transformation menusuite because all items are in Company menusuite.

Be advised to close and compile LAST one menusuite that you did paste operation.