IntelliSense unter Navision Classic Client/Cside

Na ja, nicht wirklich „Intelli“ wie in „Intelli“gent. Aber trotzdem sehr schnell und sehr hilfreich.
Wenn Sie bereits auf meiner Seite hier etwas gestöbert haben, stellen Sie schnell fest, das ich noch ein unverändert großer Fan der C/Side-Entwicklungsumgebung bin, auch der des Classic Clients von navision.
Und, im ernst: Ich vermisse sowohl beim Report-generator (den müssen Sie mal gesehen haben! Kein Vergleich mit dem RDLC-gemurkse von heute) wie auch bei der eigentlichen Programmierung in CSide (C/Side) praktisch nichts. Strg+f12 um im Programmcode zum Funktionsziel zu gelangen? Geht! Syntax Highlighting in C/Side? Geht! Komfortables Auswählen von Variablen & Befehlen? Geht! Nun… nicht so ganz. Die Objektauswahl im Classic Client war für mich schon immer ganz cool und auch ganz schnell, aber Autovervollständigen („Intellisense“) von C/Side der neueren Navision-versionen vermisse ich nun doch schon ein wenig in der alten Version… Geht alles trotzdem noch welten schneller als in AL, allem voran der unglaubliche Report-Generator von damals! Außer farbiger Schrift vermisse ich an dem bis heute nichts! Zum Glück kann man sich auch hier das Leben etwas vereinfachen!

Ac’tivAid (Active Aid) für das automatisierungstool AutoHotKey für C/Side!

Nutzen Sie einfach Hot Strings aus der ac’tiv Aid Toolbox! Die von mir genutzte Version finden Sie hier:
Ac’tive Aid Entwicklerversion von ?Michael Telgkamp?
Wenn Sie noch mehr Informationen zu dem Tool Autohotkey suchen, finden Sie hier interessante Anlaufstellen:
Neue Autohokey-Version mit Qt
Einen guten Einstieg bringt der C’t Artikel

Was ist ac’tive Aid (ac’tivAid, Active Aid, ActiveAid) oder Auto-Hotkey? In sehr kurz: Eine einfach zu programmierende Scriptumgebung für eigene Tools. Kommt Ihnen bekannt vor? Genau! Das passt perfekt zu unserer geliebten, einfach zu programmierenden Skriptumgebung Navision und Business Central! 🙂

Screenshotfunktion in ac’tivAid/AutoHotKey

Ich liebe auch die Screenshot-Funktion von ac’tivAid. Bei mir ist sie so eingestellt, dass Sie einfach das aktuelle Window kopiert, und mir dieses direkt in IrfanView öffnet. Dort kann ich dann kinderleicht den gewünschten Ausschnitt in voller Auflösung ziehen, oder mir mit F12 die Zeichenfunktion holen und schnell ein rotes Kästchen um den interessanten Bereich zu markieren. Praktisch alle Screenshots auf dieser Homepage hier wurden damit gemacht. Ich habe bis heute kein einfacheres und schnelleres Tool gefunden… . Und ich habe viele Probiert. Ein bisschen wie bei Navision / Business Central 🙂

Navision bzw. Business Central Hotstrings in ac’tivAid

Zurück zu HotStrings und „IntelliSense“ unter Navision oder Business Central:
Ich habe mir die schlimmsten Fingerbrecher von C/Side (CSide), wie z.B.
createdatetime(workdate,time),
strsubstno(‚,
If rec.findset then repeat […] until rec.next = 0;
einfach auf ein Kürzel gelegt.

Das sieht dann z.B. bei createdatetime(workdate,time) so aus:

Screenshot vom Ac'tivAid für Navision / Business Central am Beispiel Creadedatetime in C/Side
Screenshot vom Ac’tivAid für Business Central und Navision am Beispiel Createdatetime

In der Folge kann ich nun in jedem (!) Business Central & Navision, sogar in der DOS-Version von Navision (3.53 und 3.56) einfach das Kürzel eintippen cdt( eintippen, und ac’tivAid macht daraus createdatetime(workdate,time). Natürlich funktioniert konkret der Befehl cdt unter Navision 3.5x nicht, da gibt es das noch nicht. Aber wer das DOS-Navision einsetzt, braucht sowieso andere Befehle, z.B. dbFINDSET statt rec.findset usw. Funfact: Wussten Sie, dass die Entwicklungssprache im uralten DOS Navision 3.53/3.56 auch bereits CAL bezeichnet wurde, also praktisch das AL (Application Language) von heute in Visual Studio Code?
Das Prinzip ist aber bei beiden gleich und funktioniert daher in jedem Navision oder Business Central.

Diese Textbausteine habe ich mir jeweils in der am meisten genutzten Variante gespeichert. So ist z.B. bei createdatetime(workdate,time) kein Semikolon am Ende. Findfirst benutze ich meistens in der Variante If findfirst then…, daher habe ich mir findfirst then abgespeichert. Bei den meisten Befehlen nutze ich die öffnende Klammer mit dabei, auch wenn Sie z.B. bei FindFirst gar nicht vorkommt. Ich tippe also if rec.ff( und activAid macht daraus in C/Side if rec.findfirst then : die öffnende Klammer wird also gleich wieder gelöscht.

Noch spezieller ist dabei das tausendfach genutzte Konstrukt:
if rec.findset then repeat
until rec.next = 0;

Hier benutzt man ja nun praktisch nie rec. Davon aber abgesehen hat praktisch jeder Navision oder Business Central C/Side Entwickler diese Schleife schon tausendfach eingetippt, z.B. in dieser Form:
if Cust.findset then repeat
until Cust.next = 0;

(natürlich mit irgendetwas dazwischen. Und etwas abgekürzt, natürlich müsste es Customer heißen, aber „Damals“ wurden Variablen in CSide gerne noch abgekürzt. Man hatte ja nur 128, später 132 Zeichen Zeilenlänge!)

Scriptfunktionen für Business Central & Navision Hotstrings

Hier benutze ich dann die Scriptfunktionen von HotString aus der Scriptsammlung ac’tivAid für die Runtime AutoHotKey:

Send ^{left}
Send {CTRLDOWN}{SHIFTDOWN}{RIGHT}
Send ^c
Send {CTRLUP}{SHIFTUP}{End}
Send findset then repeat
Send {Enter 2}
Send until ^v
Send .next = 0;
Send {Home}{Up}{Space}{Space}

Was bringt das?
Ich tippe in Navision bzw. Business Central z.B.
if cust.fs( – sonst nichts.
Das Script löscht erst einmal von sich aus den Teil fs(, (wegen der Option „Direkt ersetzen (sonst bei Leerzeichen, Enter…)), macht dann einen Sprung nach links, kopiert mir den RecordTeil Cust., springt wieder nach rechts, tippt findset then repeat, macht eine Zeilenschaltung, und fügt dann teils als text, teils als Inhalt der vorher gefüllten Zwischenablage until Cust.next = 0; ein.
Weil der Recordteil selber per Copy aus der C/Side Eingabe gezogen wird, ist es egal, ob ich in diesem Fall Cust eingetippt habe, es per F5 aus dem Objektmenü geholt habe oder per STRG+V aus der Zwischenablage hole.

Das obige Script passt genau auf den C/side Client bis zur Version 2009R2. Danach hat sich das Springen bei dem Sonderzeichen . verändert, für die C/Side Nachfolgeversionen von Navision und Business Central, z.B. NAV 2013 oder NAV 2016, muss es also ein bisschen angepasst werden. Über die ac’tivAid Option „Nur“ oder „Nicht“ für Programm könnte das sogar so weit automatisiert werden, das man das gleiche Kürzel sowohl im Classic C/Side Client wie auch im RTC C/Side client nutzen kann.

Animation für das ac'tivAid Script "Findset" mit automatisch eingefügtem Records in C/Side in beide Statements für Navision / Business Central
Beispiel für das ac’tivAid Script Findset für Navision oder Business Central (C/side Entwicklungsumgebung)

So habe ich mir die gängigsten Business Central oder Navision Befehle in der am meisten genutzten Form abgespeichert:

cdt( für createdatetime(workdate,time)
ff( für findfirst then (if findfirst then)
fl( für findlast then (if findlast then)
intloop  für if Number = 1 then begin... if not rec.findset then CurrReport.BREAK end else if rec.next = 0 then CurrReport.BREAK; - unsere Lieblingsschleife beim Arbeiten mit Temporären Records in Berichten wie z.B. der Artikel Top 10 oder Debitoren Top 10.
sf( für setfilter(
sr( für setrange(
sk( für setcurrentkey(
sss( für strsubstno('
tf( für testfield(
fs( für if rec.findfirst then repeat...until rec.next = 0;

Mehr HotStrings / Hotkeys in AutoHotKey

In HotString habe ich noch mehr Textbausteine, wie z.B. meine AGB’s, automatisierte Texte für Absagen an Headhunter und verschiedenes mehr. Der Vorteil: Sie haben diese Textbausteine nicht nur in einem bestimmten Programm, wie z.B. Word oder outlook zur Verfügung, sondern in allen Programmen gleichzeitig!

In allen Versionen von Business Central oder Navision mit der klassischen Entwicklungsumgebung C/Side (CSide) hilft auch dieser Userhotstring in Ac’tiveAid / Autohotkey weiter, um sehr schnell die Caption richtig zu belegen!
Zur Erinnerung: Viele von uns nutzen sicherlich die Möglichkeit, einfach nur den Namen und die Caption eines Feldes zu beschriften. Damit ist man „an sich“ auch wirklich fertig, Navision kann dann in Deutsch die Caption anzeigen, in Englisch den Namen.
Das ist aber so nicht richtig! Spätestens so ab Navision Dynamics 2015 fällt einem diese Faulheit auf die Füße, und Navision zeigt in Englisch nix mehr an, oder weiter die deutsche Caption (hat sich zwischendurch mal geändert, meine ich). Daher gibt es nur eine Arbeitsweise: Sofort die Caption richtig füllen!!

Korrekt ausgefüllte Caption mit Enu in Navision bzw. Business Central klassische Entwicklungsumgebung (C/Side)
Ansicht der Properties: So ist es richtig mit der Caption: Enu ist ausgefüllt!

Mit diesem UserHotkeys ein Kinderspiel!

Demonstration von Ac'tive Aid beim Unterstützen von Properties (EIgenschaften) im modernen C/Side des RTC Clients

Man drückt Irgendwo (!) in den Captions Strg+F12, und Ac’tiveAid bzw. Authotkey springt ganz nach oben, dann 2 Zeilen runter auf das Property Name, kopiert dort den Value, geht 2 weiter runter, drückt 2 x F2 (um editierend an das Ende des Values zu springen), und fügt ;enu= plus die Zwischenablage dort ein. Keine Ausrede mehr für Faulheit!
Dabei ist das Send Delay:20 sehr wichtig, sonst ist Autohotkey schlicht zu schnell für Navision und das F2 geht verloren!

CaptionML automatisch mit einem Tastendruck im Classic Client oder RTC Client (beide noch C/Side (Cside) Umgebung ausfüllen
Automatisches Ausfüllen der CaptionML im Classic Client mit nur einem Tastendruck über activeAid bzw. Autohotkey. Funktioniert auch genauso in der Entwicklungsumgebung vom RTC Classic Developer Client.

Mehr Hotkeys / Abkürzungen in Navision & Business Central C/Side

Benutzen Sie aktiv die Zwischenablage

Nutzen Sie die Shortcuts Strg+G für Globals (Globale Variablen) und STRG + L für Locals (Lokale Variablen). Denken Sie auch daran, dass Sie in C/Side genauso wie im ClassicClient und in Excel durch die Registerseiten mit STRG+BILDhoch und STRG+BILDrunter durchblättern können!
Mit Strg+L (für locals) und 2 x STRG+BILDrunter wechseln Sie also ganz Mausfrei auf die lokale Variablendeklaration in C/Side. Ihr Karpaltunnelsyndrom wird es ihnen danken…
„local“ in Funktionen abschalten? STRG+ (Globals), 2 x STRG+BILDrunter (um auf die Seite Funktionen zu kommen), Funktion auswählen, Shift+F4. Shift+F4 öffnet im ganzen S/Side Client die Eigenschaften. Yes bei Local löschen, nicht mit No überschreiben!

Noch eine Funktion, welche sich durch eine Kundenanfrage ergeben hat:
Eine automatische Umschaltung der Lizenz beim Programmstart von Navision Financials/Attain. Das braucht man z.B., wenn man sich im Umstellprozess gerade zwischen Classic Client und RTC Client befindet. Modern UI ist schon wieder etwas ganz anderes, da gibt es keine lokale Lizenz mehr, die hat dann nur der Navision Service Dienst. Man könnte das gleiche Script auch benutzen, um einfacher mit einer „zugeflogenen“ Entwicklerlizenz zu arbeiten.
Zur Erinnerung: Die fin.exe und finsql.exe nimmt als Parameter keine Licence= oder Keyboxpath= mehr an.
Zur Erinnerung: Die navin.exe vom Navision DOS 3.53, 3.56 etc konnte noch mit dem Parameter Keyboxpath=c:\temp\navi_inf.dat,serialno=Lizenznummer des Datenbankservers gestartet werden, und so sofort beim Start eine abweichende (z.B. eine Entwicklerlizenz) benutzen. Mehr zum alten Navision hier und hier. Aber noch mehr Artikel auf meiner Seite beschäftigen sich mit dem genialen DOS Navision! Und ich selbst auch noch 🙂
Mit Ac’tiveAid hilft dieses Script weiter:
(folgt noch)