Master Class Application Architecture & Design Patterns coming to UK
2015-6-21 13:31

Did you read about this master class already? You should, so continue as it is really worthwhile as it discusses Dynamics NAV at a meta level bringing more structure to your understanding of it. And yes, even for those who have been working with NAV for ages already. We're never too old to learn!

After successful performances in Canada, Netherlands, Belgium, Japan and Romania (and Iceland to go) the Dynamics NAV Master Class Application Architecture & Design Patterns is now coming to the UK.

Hosted by The NAV People and performed by Dynamics NAV MVP Luc van Vugt this 2 days training, initiated by Dynamics NAV MVP Mark Brummel, will be held on August 20 and 21, 2015.

I think this should be a mandatory class … developers who have the knowledge of design patterns and common coding practices inherently develop stronger, cleaner code.
Michael Hollinger, Harbor Wholesale Foods
An awesome course that covers the best practices of NAV development and application architecture.
Sukeev Kailayapathy, Second Foundation

During the workshop, we will reveal all the secrets that are hidden in the Dynamics NAV Source Code. You will get answers to questions like…

  • How is Dynamics NAV architected and how do the modules communicate?
  • What are Design Patterns and Anti Patterns and how do they apply to Dynamics NAV?
  • How can I avoid conflicts during my object merge?
  • Why does Dynamics NAV have so much Code Cloning?
  • Are the coding standard documented and how can apply them?
  • Can I implement Object Oriented concepts such as MVVM, overloading and reflection?
  • Best Practices such as Encapsulation and Natural Language Programming?
  • Be familiar with over 30 most used Design Patterns in Dynamics NAV?
  • What does a perfect UI look like to be repeatable in the cloud?
  • ...

Registration & Cost

To register for this training send a mail to masterclass@fluxxus.nl.
2 days workshop for £ 650 / € 900, incl. lunch and training material (excl. VAT).

Prerequisites

  • 1+ year development on Dynamics NAV (level Solution Developer), or
  • 5+ years development on similar ERP platform, or
  • 5+ years .NET development

Course Outline

The course has four, iterative blocks that explain the elements for good software architecture using Design Patterns – Repeatable User Interface, Coding Guidelines, Architectural Principles and Exercises.

Introduction 
  • Introduction to Application Architecture
  • Rollup update & Upgrade Strategies
  • Design Patterns & Anti Patterns
  • Meta Data Driven Software Development

Object Architecture

  • Define Object Hierarchy
  • Enhance the use of the Symbol Menu
  • Interfaces
  • Function Libraries
  • Natural Language Programming
  • Encapsulation
  • Arguments & Overloading
  • Façade & Hooks

Coding Guidelines

  • Design
  • Internationalization
  • Localizability
  • Readability
  • Data Dictionary
  • Hungarian Notation
  • User Interface
Design Patterns 
  • Singleton, Multi Level Setup & Rules Pattern
  • Master Data, Entity State & Compound
  • Documents, Copy, Posting & Archiving
  • Test Near, Test Far, Do It, Clean Up

Code Cloning

  • Fundamentals
  • Transaction Mirroring
  • Forking, Templating, Customize & Exact Match

Modern UI for Repeatable Software

  • Instructions in the User Interface
  • Transaction Data Update
  • Hiding Fields & Fast tabs
  • Totals on Sub Pages
  • Create Data from Templates

Model View View Model

  • Working with Temporary Tables
  • MVVM Pages
  • Reports based on data in memory
  • Query data on Pages
Let's clean up NAV - Proost! Santé! Cheers! Noroc! Skål! Evviva! Sundhed!
2015-6-18 18:16

A Small Celebration with a virtual beer for the team! And I will buy you at least one in Antwerp. Beer Beer Beer Beer Beer Beer Beer

       

Why? Well this is why: Microsoft Dynamics NAV Experts Get Together On Cleanup Effort. While we were cleaning Jason Gumpert clearly (or should it be cleanly?) got impressed. Big Smile

Proost! Santé! Cheers! Noroc! Skål! Evviva! Sundhed! ...

by Luc van Vugt | with no comments
Filed under: ,
Let's clean up NAV #15 - Post/Check Line Boat Anchors
2015-6-15 13:23

Time is flying while we're cleaning up. Way before Soren started cleaning in Canada and even before Jeremy Vyska joined the team, Mark Brummel gave me his consent Geeked that we should be putting some our of cleaning effort on some piece of old code that has been hanging around for too long, totally obsolete, and we surely could make use of his expert hands. So even though you we're not in the known we stopped the dust collection here.

       

Thumbs up another MVP fellow joining our Clean TeamYes

And to be fair: we owe Mark some big thumps up any way as he, as you might recall, started to set the pace.

Now you might wonder: what are you guys now going to clean up? And right you are, I haven't mentioned it yet, apart from the title of this post.

Some months ago Mark asked me to join his Master Class Application Design initiative, make it happen in the Netherlands and take part in the Master Class so I could learn and become one of the next trainers on this too. You might have been reading about it already. If not make sure you do and be nice to yourself: subscribe to it. It is really worthwhile as the master class discusses NAV at a meta level bringing more structure to your understanding. And yes, even for those who have been working with NAV for ages already. We're never to old to learn.

The attendants are challenged to rethink on there knowledge in various ways using, for example, the concept of design patters. You're not only challenged by the lecturer itself, but also by applying matters discussed by means of exercises. One of them was to remove the boat anchor from the Post Line codeunit provided to us.

Long story short: next to the one Mark was hinting at, there clearly is another boat anchor collecting dust. Or should I say: collecting rust? And it's not only to be found in an Post Line codeunit, but also in a Check Line codeunit.

Did you ever wonder what the OnRun trigger of the Post Line and Check Line codeunits is used for? I know various students in my Solution Development class did while coloring the code with markers. You know, bluntly said: it is not used at all! We have this code still as a remnant from the past, that hasn't been cleaned away, probably for backwards compatibility. And so we're stuck with these boat anchors.

Taking the Res. Jnl.-Check Line (211) and Res. Jnl.-Post Line (212) as examples we see (more or less) the same code pattern:

Res. Jnl.-Check Line (211)

OnRun(VAR Rec : Record "Res. Journal Line")
GetGLSetup;
RunCheck(Rec);

Res. Jnl.-Post Line (212)

OnRun(VAR Rec : Record "Res. Journal Line")
GetGLSetup;
RunWithCheck(Rec);

These are also to be found in all the other Post Line and Check Line codeunits:

Note that I left out both FA Jnl.-Check Line (5631) and FA Jnl.-Post Line (5632) as these deviate from this pattern.

OK, so Vedbaek can actually clean the OnRun trigger from the listed Post Line and Check Line codeunits?

Wel ....... to be honest I hoped we could just do that: CLEAN IT UP. However, we found two exceptions: the OnRun trigger of both Gen. Jnl.-Post Line (12) and Item Jnl.-Post Line (22) is being called from a number of objects. So let's clean them next time as we will have a close look at why the OnRun trigger is called instead of the the RunWithCheck or RunWithoutCheck function. Feel free to help the Clean Team, or ... Join the Clean Team!

Object Object Name Function/Trigger Code
COD393 Reminder-Issue OnRun GenJnlPostLine.RUN(GenJnlLine2);
COD5407 Prod. Order Status Management FlushProdOrder ItemJnlPostLine.RUN(ItemJnlLine);
COD5815 Undo Sales Shipment Line PostItemJnlLine ItemJnlPostLine.RUN(ItemJnlLine);
COD5816 Undo Return Receipt Line PostItemJnlLine ItemJnlPostLine.RUN(ItemJnlLine);
COD5817 Undo Posting Management PostItemJnlLineAppliedToList ItemJnlPostLine.RUN(ItemJnlLine);
COD5817 Undo Posting Management PostItemJnlLine ItemJnlPostLine.RUN(ItemJnlLine);
COD5818 Undo Service Shipment Line PostItemJnlLine ItemJnlPostLine.RUN(ItemJnlLine);
REP20 Calc. and Post VAT Settlement PostGenJnlLine GenJnlPostLine.RUN(GenJnlLine);
REP94 Close Income Statement HandleGenJnlLine GenJnlPostLine.RUN(GenJnlLine);
REP595 Adjust Exchange Rates PostGenJnlLine GenJnlPostLine.RUN(GenJnlLine);
REP6032 Post Prepaid Contract Entries PostGenJnlLine GenJnlPostLine.RUN(GenJnlLine);

Cleaning is a serious job, you know.

BTW ...

... do you know what other boat anchor is to be found in the Post Line and Check Line codeunits?

Let's clean up NAV #14 - RECORDLEVELLOCKING
2015-6-7 12:09

I guess it's due to my length that I often run into spots where dust seems to collect without others noticing it. On top of cabinets, doors and paintings, in corners of window frames, etc. You could mock me and say: on everything I look down on. Super Angry

It might somehow apply to today's clean up subject: the RECORDLEVELLOCKING record method. Did I only notice it's still there with no use whatsoever? A fossil of those days we had to deal with both SQL Server and the NAV proprietary database.

A fossil indeed, so let's put it in a museum and thus remove it from the development environment where it's only collecting dust. Go ahead, Vedbeak.

For sure I am glad it was removed from the help and application code.

BTW ...

... somewhat confused about the numbering of the clean up as we seem to have jumped from #11 to #14? Here are #12 and #13 to be found:

Let's clean up NAV - Canadian Branch
2015-6-6 7:22

Overseas, uhm overoceans, interest has made us decide to expand our cleaning business. We have found our MVP fellow Soren Klemmensen willing to pick up this challenge in North America and without halting he already started to do some useful cleaning efforts. Have a look yourself:

      

So welcome to another MVP fellow to our Clean Team! Clap Hands! Yes

Vedbaek, it seems we will be needing some cude and clean ERP system enabling our growing business. Stick out tongue

Let's clean up NAV #11 - Profile Owner ID
2015-6-5 15:10

I guess my previous cleanup posts were so dusty that I rouse the attention of Jeremy Vyska, one of my readers, who now volunteers for the Clean Team.

    

So a big hand to another team member!

However no time to party, apparently, as I found Jeremy busy polishing some of the msdn content. More specifically this one: How to: Create a Profile. Staring at it I could not figure out anything worthwhile cleaning up. But clearly Jerymy had it going.

Near to him I also found this one: How to: Open Microsoft Dynamics NAV in Configuration Mode. I still did not get the point of cleaning these two topics. Until ... Jeremy showed me that Owner ID field became obsolete in Dynamics NAV. Aha! Cool

Have a look Vedbaek. Clean up the obsolete parts of the help topics.

Let's clean up NAV #10 - OCX Data Type
2015-6-2 14:07

I haven't been neglecting the clean up alone. I have to shame myself and admit I also did neglect my Clean Team. Embarrassed

   

And more specifically my first hour team member Alain Krikilion.

While is was too busy to clean (and even forgot that some times) Alain did continue on his own, but I did not report his valuable effort. Meanwhile were still stuck with this useless piece of technology ... OCX. Totally obsolete since we left the classic client behind. totally neglected to be cleaned away before.

It's still there in the Development environment sitting in a corner collecting dust:

And on msdn:

Don't wait too long, Vedbaek, before moths nestle in this dust.

Let's clean up NAV #9 - Development Environment Options
2015-5-30 15:18

It's been a while and dust is collecting. Sun is shining, open windows and doors, time to do some cleaning again.

Today let's clean up the Development Environment Options Marquee Full Selection and Max. no. of XML records to send.

The first did only have a meaning when designing forms, the later is taken care of by the client setup (ClientUsersSettings.config).

No Options, uhhh, option today. Let's make our hands dirty, Vedbaek.

ShowMandatory - part 2
2015-5-30 14:36

You might recall me writing on the new ShowMandatory property. The one you can now set on a page control showing a red astrix on the left side of the control. And that it will also shown when setting the NotBlank property on a primary key field.

By mere coincidence I ran into the following.

I created the following table having set NotBlank = Yes on the Primary Key field.

And a Card Page based on this table with ShowMandatory = TRUE on all non-PK controls.

You see? No astrixes for the Amount and Reference ID fields. Even though I did not enter any value, so from my perspective they are still empty.

It appears that ShowMandatory checks the content of the control itself and not the value of the field bounded to the control. Of course we could argue whether a zero Amount field is empty or not as zero is a value too.

Now if you want to have the asterix shown on these two fields you have to make sure that the control is empty.

  1. This can easily be done by setting the BlankZero or BlankNumbers property (on either the table field or the page control), but only seems to work for the numerical data types, so ...
  2. Won't work for the Reference ID field (GUID) out of the box. I recon you could do something with a control addin, but haven't tried it (yet).

 

FILTERGROUP(-1)
2015-5-30 13:59

Even though many of us are experienced developers, the FILTERGROUP record function isn't for each of us a well-known or understood concept. Because of this very reason the following question has been for years part of the quiz I start a course day with.

So get ready …

The default lookup page for MyTable is run by the following C/AL code:

MyTable.FILTERGROUP(2);
MyTable.SETFILTER("No.",’1000..5000’);
MyTable.FILTERGROUP(0);
PAGE.RUN(0,MyTable);

When the page is displayed, the user applies the table filter 6000..6500. Which records will then be shown?

a. No records because the filter will read: (1000..5000)&(6000..6500)
b. Records in the range 1000..5000 because the program ignores the filter applied by the user
c. Records in the range 1000..6500 because the filter will read (1000..6500)
d. Records in the range 6000..6500 because the filter applied by the user overrides the SETFILTER call

"OK ... a, b, c, or d?" ...

... I did ask the 13 Slovenian developers I was giving a NAV 2015 update course to the last couple of days. And yes, some knew, but most had a hard time with it.

Triggered by this question and the discussion following it, one of the attendants, Darko Grasic (he earns the credits), consulted the msdn help on FILTERGROUP and asked me about FILTERGROUP(-1).

FILTERGROUP(-1)?

Yep, FILTERGROUP(-1). Follow the link and see. Or just try the following code:

WITH Customer DO BEGIN
  FILTERGROUP(-1);
  SearchString := '@*ou*';
  SETFILTER(Name, SearchString);
  SETFILTER(Contact, SearchString);
  SETFILTER(City, SearchString);
  IF FINDSET THEN
    REPEAT
     MESSAGE(
       'Customer filtered on %1\  %2\  %3\  %4\  %5',
        SearchString,
       "No.",
       Name,
       Contact,
       City);
    UNTIL NEXT = 0;
END

Rewriting the code somewhat so it opens a page the result looks like this (including my former MS colleague Hervé):

You get it?

So with FILTERGROUP(-1) we now have and OR filter that can spread several columns! Wow.

Two things to note

  • running the page the filter didn't work straight forward. Had to mark the records to be able to show the result set in the page:

     

    WITH Customer DO BEGIN
      FILTERGROUP(-1);
      SearchString := '@*ou*';
      SETFILTER(Name, SearchString);
      SETFILTER(Contact, SearchString);
      SETFILTER(City, SearchString);
      IF FINDSET THEN
        REPEAT
         MARK(TRUE);
        UNTIL NEXT = 0;
      FILTERGROUP(0);
      MARKEDONLY(TRUE);
      PAGE.RUN(0,Customer)
    END
  •  

  • Not sure whether a balancing call FILTERGROUP(0) is needed as the filter doesn't show in the UI
Documentation or Implementation Bug? Unlimited Code Length
2015-5-26 16:58

3/4 of a year NAV 2015 is on the market and nobody so far (at least that I could trace on the Internet) seemed to have noticed. I guess we all have sleeping. Seems including MS as it hasn't been fixed.

Did you read this?

Click on the image to go to the msdn help topic.

Great, so eventually code variables are treated the same as text variables with respect to their length.

Well ... bummer ... no. Try it yourself.

Clearly a bug, but the question is: documentation or implementation bug?

I go for the latter. 

When Changing a Codeunit Subtype
2015-5-15 8:01

Since a couple of years codeunits have a property called Subtype. Selecting a specific value for this property changes the behavior of the codeunit, one of them being an extra property added to functions, i.e. FunctionType (for Test Codeunits and Upgrade Codeunits) which defaults to a specific value depending on the Subtype value (see my post NAV 2015 Glance 4: New Functions are Local by Default?).

Now what happens when you change the Subtype of a codeunit? As FunctionType values depend on the codeunits Subtype C/SIDE cannot just leave the FunctionType as is. Let's try and see.

Scenario 1 - Changing a Test Codeunit to Normal

So we create a test codeunit with a test function:

And change the Subtype to Normal:

Now C/SIDE removes any test artifacts that do make sense in a normal codeunit:

Scenario 2 - Changing a Upgrade Codeunit to Normal

Let's do the same with a Upgrade codeunit:

I.e. change the Subtype to Normal:

Logically as the in previous case, C/SIDE removes any upgrade artifacts that do make sense in a normal codeunit:

This perfectly makes sense ... but for one fact: why aren't the functions set to local as is the default behavior in NAV 2015? I would prefer that as I wouldn't want any previous test or upgrade function being exposed outside of this codeunit by default.

What do you think?

BTW

Never observed this before, but this looks somehow awkward, doesn't it: Subtype v.s. FunctionType? Why is the first having a low cap t and the second upper cap T?

Hunting 'Mr. X' ... uhhh ... '0x1C'
2015-4-18 13:23

The other day I was assigned the job of installing a couple of NAV 2009 (web) servers, which included setting up delegations. Lucky me. Sad

I ran into an issue that kept me busy for almost 2 days which eventually ended in a, as so often, very simple fix. Huh?

Of course to prevent you and myself from having to do this 2 days endeavor I'll share my findings below. If you can't hold your nerves just jump to my Long Story Short.

But maybe even more I am writing this story as an homage to all my fellow NAV pros that have consciously and, all but one, unconsciously contributed to the solution. Every workday I am grateful to all of you that share your findings on fora like mibuso, dynamics user and Microsoft Dynamics NAV Community even if you pose them as questions.

So here we go with my Short Story Long.

Short Story Long - A Homage

Here I am, setting up NAV 2009 (web) servers and delegations. Typically a task that I do not perform on a regular base and which often is a nuisance due to these delegations. But every time again I happen to get it working with valuable help of one of my IT colleagues, and so I am guaranteeing I will be the chosen the next time. Cool

BTW: needless to say that this all about a 3-box setup as described here.

This time the main goal was to get a NAV web server running to enable an external party to access our Dynamics back-end. Although we use web services heavily, our main installation is being accessed still by means of classic clients. But in the not too far future we will start running RTC and therefor, having installed the new web service, I wanted, in one go, to get the application service tiers running on our test and acceptance environments.

Easy said then done as it appeared.

Here starts the hunt for 'Mr. X'. Or actually '0x1C', as we will see. Even though we will not be using buses, taxis or the London Underground, we will hunt him down like the detectives in the Scotland Yard board game. We lay out the board and distribute the tokens and other accessories and confront the ...

Initial Enigma

Where did 'Mr. X' go?

After having installed the right RTC and Service Tier builds, and configuring the service, starting up RTC threw the following error.

A first sign of live from Mr. X. Speaking Dutch, by the way.

ENU: The server net.tcp://<Server>:<ServicePort>/<ServerInstance>/Service is either unavailable or your connection has been lost. Do you want to attempt to reconnect?
[Note that I have replaced the server, port and instance names by generic terms.]

Clicking either Yes or No resulted in a follow-up message:

ENU: Lost connection with the server. The application is closed.

First thing ...

... to check was whether the service was still running or not: it appeared to be running.

No sign of Mr. X. Where did he go?

Luckily I always install a full demo version on any NAV environment, be it development, test, acceptance or production. On the default port (7046) the application service for the demo database is running, while on another port (for example 7066) I can access development, test, acceptance or production database. Would I be able to access it? In order to check that the ...

Second thing ...

... was to change the ClientUserSettings.config so that my RTC would be looking at the demo service tier (<Server>:7046/DynamicsNAV/Service) and run RTC.

Splash screen, as always slow, keeping me waiting ... and ... keeping me waiting ... and ... keeping me waiting ... and ...

Alive and kicking! Clear that delegations were not blurring things. Although I still had to check whether using a fully qualified DNS would also work OK.

Entering the fully qualified DNS in the Select Server window and pressing TAB showed the available companies in the demo database. Clicking OK resulted in a perfectly normal start-up of my RTC.

Would I be able to do the same with the fully qualified DNS for our test database?

And get closer to my Mr. X?

Didn't halter too long and did the ...

Third thing ....

..., i.e. entering the fully qualified DNS for our test database and pressing TAB. Wow, connected to the service tier!

Mr. X, we feel somewhat close to you, but are we? And how to get closer now that I ran out of my first options. What were you actually saying?

Clicking however, threw the next error.

The server net.tcp://<Server>:<ServicePort>/<ServerInstance>/Service is either unavailable or your connection has been lost. Do you want to attempt to reconnect?

Help can be quite close ...

... if you can find it. Well, let's at least attempt to. Google is your Friend, isn't he? Straight around the corner.

Google, let's frame Mr. X.

Google: http://dynamicsuser.net/forums/p/39925/204742.aspx

What did you say? Trying to solve one riddle, getting another in turn? Huh?

Google: The server net.tcp://<Server>:<ServicePort>/<ServerInstance>/Service is either unavailable or your connection has been lost. Do you want to attempt to reconnect?

OK, makes more sense. Let's click on it. Aha, my dynamicsuser friend Manish found a solution to this error. Indeed my default RTC profile was set to PAG50175 (part of our customization), so I changed it to one of the standard pages: PAG9006. No luck. Still getting the same error. To be sure I even removed all the records in the User Personalization (TAB2000000073), but to no avail.

Google: RTC Error “The server <address> is currently not available”

Next hint, you mean?

Well, glad you lead me to my dear fellow MVP Arend-Jan Kaufmann. Always providing valuable, and often technically detailed information. But no, this is not the issue. I know by heart we have the same build running on all machines. OK, I check it once more ...

... maybe I accidentally run into Mr. X. Cool

Back again, Google, and no, found nothing valuable.

And surely no Mr. X.

Got some more riddles for me?

Error: '┴' invalid character

Nope, doesn't seem what I am looking for. No clear cut fix.

In hindsight it was more or less what I was looking for. I was actually sitting next to Mr. X!

It surely pointed out me to have a look at the Event Log; as with the next as with Google's next hint:

metadata error

As with the previous hint it was too much info in that error message. However this had some clear suggestions which at least I could give a try haven't succeeded so far. But before continuing my search I decided to ask Arend-Jan for help by sending him a mail with the event log file. If I wouldn't find a solution over time he might.

I recon meanwhile Mr. X was laughing in his sleeve making sure I could not hear it.

So based on Google's last hint decided to remove all records form the Object Metadata table and recompile all objects. I guess I was somewhat overreacting by removing all records. Just tired of searching and really getting closer to a solution. Starting RTC again I was welcomed by the next error of which I totally forgot to make a screen shot:

---------------------------
Object of type Table with id 2000000045 could not be found.
---------------------------

Mr. X has left the room!

Ouch, I am drifting away.

Half an hour later I found myself back on track, again getting some help from another of my fellow MVPs, Saurav Dhyani, on rebuilding the metadata. Don't know why, but this however lead to a Change Listener issue. After solving this and again compiling all objects ... I found myself having a deja vu: I was looking at the initial error again. Angry

This suggestion from again a fellow MVP, Natalie Karolak, also didn't help me out either unfortunately even though it might prove valuable in the future.

And then I received an answer form Arend-Jan actually not doing much more then focusing on the invalid character as already mentioned above.

Long Story Short

Arend-Jan Kauffmann out pointed that this was the crucial clue in the Event Log. He wrote:

Apparently the XML data, that is generated by the NAV server and sent to the RTC, contains a character that is not supported by the RTC. Probably some strange character in a caption or so. Or something else in the data.

Actually seeing our Mr. X almost straight in the eyes, but at the other site of the river Thames.

Within reach, but not ready to grab.

Mr. X, or, as mentioned before, Mr. 0x1C, being an invalid XML character, made the start-up sequence of the sequence of the RTC stop, resulting in this useless message:

The server net.tcp://<Server>:<ServicePort>/<ServerInstance>/Service is either unavailable or your connection has been lost. Do you want to attempt to reconnect?

Mr. 0x1C was clearly misleading us.

Fix

But still needing to find Mr. X.

How was I at long last able to grab him "by the collar"?

Using the Visual Studio Find in Files feature with the following regular expression [\x00-\x08\x0B\x0C\x0E-\x1F] being the illegal XML characters one object file popped up: MEN90.

It thus eventually turned out that Mr. 0x1C had been unconsciously and unintended placed in the Name property of one of the MenuSuite items the week before. Waiting to get out and get me busy for 2 days trying to trace him down ... by talking plainly nonsense.

A big thanx to all my fellow NAV pros that have consciously and unconsciously contributed to the solution. Of course one special thanx to Arend-Jan.

Hope you can profit form my findings as already one of you did.

Note

Oh, one note to be made before I go: the most time consuming part of this endeavor was having to restart the RTC over and over again. Well actually not just restarting but needing to revert the ClientUserSettings.config ... Can't this be made somewhat simpler, MS?

Cancelled or Canceled, that's the question
2015-4-16 19:42

I don't know. Maybe it's just me. Every once in a while, when writing, I get lost in spelling out right the word(s) I am writing. My mind somehow blocks and doesn't do what it normally does automatically. Just like this week, when I needed to translate some captions. More precisely a number of options that were only provided in NLD. So I had to translate them to ENU. It happened with one of the options, namely Geannuleerd.

Geannuleerd is the NLD word for Cancel... Wait ... [Halter] ... Geannuleerd is the NLD word for Canceled ...  Or is it Cancelled? I never had thought about, i.e. I never had haltered over, this one before. While writing this right now I actually wonder why I haltered, but I clearly did. If I would have been doing this task now I would have written Canceled straight away.

The funny thing is that, instead of using Google translate, which I do by default and would surely give me the ENU translation, I took a total different approach. I used NAV to help me out. True, this wasn't the first time, but it revealed something totally new to me. No, not really earthshaking, but nevertheless a funny insight.

As you might know by now I am a big TFS user, so I always have (a copy of) the NAV code I am working on/with stored on my laptop in text files. So I took the approach of searching through these text files by means of the search box in the explorer, assuming that this search would tell me which of the two would be right. Cancelled or Canceled.

Well, have a look.

Huh?

Cancelled or Canceled, that's the question!

Even NAV won't tell me. OK, statistically it would be canceled (110 occurrences) and not cancelled (45 occurrences). So that's what I used right then, not spending more time on it thinking somewhat vague that this might have to do with ENU against ENG.

Now elaborating somewhat more on it here I found Google suggesting me canceled which then probably is ENU. Searching the Internet I also ran into this, which doesn't put a clear cut between the two, but surely eases my mind. But  ...

... find myself still wondering why NAV utilizes not just one of them.

by Luc van Vugt | with no comments
Filed under: , ,
Welcome to the Dynamics blog-o-sphere! #12
2015-4-3 4:46

While performing a C/SIDE development training - like I am doing right now at Housing in Ljubljana, Slovenia - I am always searching the internet for articles. To provide my students with articles that complement the standard resources and training material. But often, and not in the least, as an answer to the never drying out source of questions students seem to draw from.

Doing so, I often run into the same resources: the still improving help of NAV, NAV Team blog, mibuso, dynamicsuser, fellow MVP blogs, etc. But every now and then I am taken by surprise, like this early morning. Browsing around regarding dimensions, I stumbled over this post: NAV Dimensions - The Theory by Gemma Warren. She made me smile. Thanx, Gemma.

Until this morning, you were totally unknown to me even though your blog has been around somewhat over a year already. Maybe because I am primarily a technical guy and you a functional ... girl. Only God knows, I guess. Nevertheless, it's surely worthwhile reading.

So: Welcome to the Dynamics blog-o-sphere!

But before I stop ...

  • Haven't written a post since October ... Did your source dry out?
  • I am not claiming I am the most creative guy, but your blog header and theme ... aren't for sure (sorry to say so)
More Posts Next page »

Recent Posts

Search

Email Notifications

This Blog

Tags

Favorite BLOGS

MS BLOGS

Team Foundation Server BLOGS

NAV & TFS BLOGS

Syndication

Archives