A blast from the past – Meet FINSWEEP

I just stumbled over a little thing we made back in 1996. This is from the period when Navision Financials was being introduced. During a developer workshop, the teacher was trying to describe how powerful the new forms designer was (compared to the character based Navision 3.56a), he talked about the stuff he made, and ended with something like this: “I tried to make a minesweeper game, but that was beyond the limits of the designer”…

Challenge Accepted !

So the rest of the workshop was dedicated to creating a mine sweeper game, the result:
finsweep1

Some of the stuff with controls on top of each other, that when clicked on became invisible was never envisioned by Navision, and I do remember that most of the stuff was actually created in a text-editor to get around the fact that there are 64+64 controls sitting on top of each other.

The game is dated Marts 6th 1996 – and the sound about right, the object file is dated October 24 1996 – I think the difference, is that the first version of Financials did not a random function, so a psudorandom generator was created in C/AL, but since replaced with the built in random function.

finsweep2

All text are in danish, when loosing the game, you are mocked with a “Lad os håbe du er bedre til bogføring!” translated into “Lets hope you’re better at bookkeeping!”.

The “TAB …” is because I worked for a company called “TAB – The Absolut Businesspartner” – Not sure we where able to remove the leaderdots in Financials 0.99/1.00

It actually ended up in a bunch of customer installations, more or less as an Easter egg – typical hidden on the main menu, so if you clicked on the green/blue circle the game would start.
navision_financials

You can downloaded here and import and run it directly in any version up to 2009R2:
FINSWEEP

Could it be made in RTC ….

Wysiwyg Editing Control for Dynamics NAV 2013 and 2015

In Dynamics NAV 2013 R2 and 2015 there is a new format for control add-ins.  This control add-in is actually done in HTML/Javascript so it will work in both clients.

When running in the Role Tailored Client, a WebBrowser Controls is created for the control, one of the main challenges, is that the WebBrowser Control insist on being a Internet Explorer 7 browser, witch reduces the level of JavaScript that can be used and excludes all HTML5 based controls.

The control here, is a modified version of the Tiny Editor presented here:
http://www.scriptiny.com/2010/02/javascript-wysiwyg-editor/
Download the ZIP here:

HTMLedit

Inside the ZIP file you wil find:
EriksTinyEditorControl.zip (ZIP file to import into the Control Add-ins page.
TinyEditor_NAV.DLL (DLL file that need to be placed in the Addins folder, both in the client and on the server).
HTML Editor 2013R2 Demo.fob – A couple of demo objects to show the functionality

This is how it looks in the Role Tailored Client:

html-09 html-10

Install the interface in the addins folder

Unzip the TinyEditor_NAV.DLL into the Addins folder in the service tier, and on the development client (Not nessesary in 2015)

Register the controll add-in

You need to register the ZIP file in the  control add-ins register, if you fail to do this, you will get an error looking like this when starting a page with the control add-in.

 

Open page 9820 or search for control. It will looks like this, with a list over the controls you currently have installed in the database.

html-01

Create a new, give it EriksTinyEditorControl as name and c87fd1af2bffc7dc as public token.

After creating the line, you must import the  ZIP file – press import and select the EriksTinyEditorControl.zip file.

Now your database is ready to use the control add in.

Use the control in a Page

Create a simple field in a page, and select the control in the properties (In the ControlAddIn property)

html-03 html-02

Give the field a name (“Editor”)

To load a value into the editor, use the CurrPage.Editor.LoadHtml(Txt) method.
html-04

To get the value back from the editor is a bit more complicated since a javascript control is controlled asynchronous, so you must use the CurrPage.Editor.RequestSave() method, and the use the Editor::SaveCompleted(HTML : Text) event. In the example objects, the “Save button will trigger the Editor::SaveCompleted event.