Danjo's two cents NAV, Powershell, Android, C#, Lync, Win8, …

9Feb/160

Report Design in Visual Studio – Versionen

Hier eine Auflistung der benötigten Versionen und die Links zu den Anleitungen von Clausl.

 

NAV Version Visual Studio
 2009  2005 & 2008 (ab SP1 stabil)
2009 R2 2008
2013 2010 SP1
2013 R2 2012
2013 R2 > CU2 2013
2015 2013
2016 2013

 

Free Visual Studio Designer for editing Reports in Dynamics NAV 2013 and other options

Free Visual Studio designer for NAV 2015 and NAV 2013 R2

27Jan/150

Systemindikator

Der mit NAV 2009 eingeführte Systemindikator kann neun verschiedene Akzente annehmen.

Wobei Akzente lediglich für die Farbgestaltung steht. Der Standard entspricht "Accent9".

Da das Wechseln des Akzentes nur nach dem Neustart des RTC zu sehen ist, dauert das durchprobieren immer etwas.

Um mir das zu ersparen habe ich einmal alle Akzente in einer Grafik abgespeichert.

SI_Total

Viel Spaß damit Cheeze

25Jan/150

NAV 2013 (R2) – Benutzer los werden

In NAV gibt es seit Jahr und Tag eine feste Regel:

Gibt es keine Benutzer darf jeder die Applikation benutzen.

Das ist besonders dann hilfreich, wenn man gerade vom Kunden eine Datenbank bekommen hat, zu der man keinen Login kennt.

Und dank SQL haben wir auch dann noch die Möglichkeit die Benutzer los zu werden, wenn wir gar keinen der angelegten Benutzer kennen.

Am schnellsten geht das über ein paar SQL-Befehle:

Anschliessend muss nur noch das Service-Tier neu gestartet werden.

27Okt/140

NAV Ein paar Grundfunktionen Teil 2

Eine weitere immer wieder auftauchende Anforderung ist das automatische Splitten von Kommentaren.

Hier allerdings doch bitte nicht alle X Zeichen, sondern zwischen den Wörtern.

Eine Funktion hierfür kann z.B. so aussehen (Beispiel mit Sales Comment Line).

 

veröffentlicht unter: Uncategorized keine Kommentare
24Okt/140

NAV 2013 R2 – Änderungen werden erst nach Neustart des ServiceTiers aktiv

Diese Woche bin ich auf ein eher störendes Phänomen bei der Entwicklung in einer NAV 2013 R2 CU12 Datenbank gestosen. (Das verhalten konnte ich inzwischen auch in älteren Build-Versionen nachstellen)

Ich lege eine neue Tabelle an, erzeuge eine Page dazu und klicke auf RUN.

SQL-Fehler: Tabelle kann nicht gefunden werden.

Kurzer Blick auf dem Server, die Tabelle fehlt tatsächlich.

Export -> Lösche -> Import -> Tabelle fehlt

Sync-NAVTenant im Powershell aufrufen -> kein Fehler -> Tabelle fehlt

Neustart NST -> Tabelle fehlt -> Start RTC -> Tabelle wird angelegt

 

Diese Verhalten war Problemlos jederzeit reproduzierbar. Doch wo kam es her? An CU12 scheint es nicht zu liegen.

Fragen wir doch mal das Internet: Keine der üblichen Suchen bringt etwas das helfen könnte.

Dann hat es mir doch noch gedämmert: Es sieht so aus als ob der Trigger in der Object Metadata Tabelle fehlt.

Kurzer Blick: Stimmt, der ist nicht da.

 

Wie habe ich das den geschafft?

Mein Vorgehen war so:

- Neue Datenbank über SQL anlegen

- Import einer NAVDATA-Sicherung inkl. aller Objekte und Daten

 

In der Dev-Enviroment sieht alles gut aus. Der RTC läuft auch stabil.

 

Zum Schluß dann noch wie das ganze zu korrigieren ist:

Der Trigger lässt sich über SQL anlegen:

/****** Object: Trigger [dbo].[$ndo$objecttracking] Script Date: 23.10.2014 08:38:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [dbo].[$ndo$objecttracking] ON [dbo].[Object Metadata] FOR DELETE, INSERT, UPDATE AS SET NOCOUNT ON DECLARE @delCount INTEGER, @insCount INTEGER, @updatedRows INTEGER, @currentDBTS BIGINT SELECT @delCount = COUNT(*) FROM DELETED SELECT @insCount = COUNT(*) FROM INSERTED SELECT @updatedRows = 0 SELECT @currentDBTS = CAST(@@DBTS AS BIGINT) IF (@insCount > 0) BEGIN UPDATE [dbo].[Object Tracking] SET [Object Timestamp] = @currentDBTS FROM INSERTED AS I JOIN [dbo].[Object Tracking] AS T ON (T.[Object Type] = I.[Object Type] AND T.[Object ID] = I.[Object ID] AND T.[Change Type] = 0) SELECT @updatedRows = @@ROWCOUNT IF (@updatedRows < @insCount) BEGIN INSERT INTO [dbo].[Object Tracking] ([Object Type], [Object ID], [Change Type], [Object Timestamp]) SELECT I.[Object Type], I.[Object ID], 0, @currentDBTS FROM INSERTED AS I LEFT OUTER JOIN [dbo].[Object Tracking] AS T ON (I.[Object Type] = T.[Object Type] AND I.[Object ID] = T.[Object ID] AND T.[Change Type] = 0) WHERE T.[Object Type] IS NULL AND T.[Object ID] IS NULL END END IF (@delCount > 0) BEGIN IF (@updatedRows = 0) BEGIN UPDATE [dbo].[Object Tracking] SET [Object Timestamp] = @currentDBTS FROM DELETED AS D JOIN [dbo].[Object Tracking] AS T ON (T.[Object Type] = D.[Object Type] AND T.[Object ID] = D.[Object ID] AND T.[Change Type] = 0) SELECT @updatedRows = @@ROWCOUNT END IF (@updatedRows < @delCount) BEGIN INSERT INTO [dbo].[Object Tracking] ([Object Type], [Object ID], [Change Type], [Object Timestamp]) SELECT D.[Object Type], D.[Object ID], 0, @currentDBTS FROM DELETED AS D LEFT OUTER JOIN [dbo].[Object Tracking] AS T ON (D.[Object Type] = T.[Object Type] AND D.[Object ID] = T.[Object ID] AND T.[Change Type] = 0) WHERE T.[Object Type] IS NULL AND T.[Object ID] IS NULL END END GO

%d Bloggern gefällt das: