Bemerkungen zu Textkonstanten hinzufügen

Veröffentlicht: 22. Mai 2017 in Tipp

Hallo 🙂

Beispiel aus dem Standard:

In der Tabelle 27 gibt es die Textkonstante Text027, diese beinhaltet den Deutschen Text „muss größer 0 sein“. Schaut man nun in den „Multilanguage Editor“  findet man dort zu dieser Textkonstante eine Bemerkung:

In diesem Fall mag sie nicht viel weiter helfen. Man kann sich nun auch fragen „Wofür sollte ich das nutzen?!“. Aber es gibt einen guten Anwendungsfall den die Tabelle 27 auch für uns bereit hält:

Hier sehen wir direkt welche Platzhalter welchem Wert enthalten. Das finde ich sehr praktisch! Anlegen kann man diese, indem man die Sprache „@@@“ angibt und dann den Freitext entsprechend füllt.

In den neueren Clients, können wir sogar mit MouseHover dann erkennen, was wohin gehört ohne jedesmal genau den Kontext prüfen zu müssen 🙂

Mit freundlichen Grüßen
Matthias König

Advertisements

XML Port ohne Dateiabfrage

Veröffentlicht: 1. Juli 2016 in DotNet, How-To

Hi,

mal wieder etwas kurzes für Zwischendurch 🙂
Manchmal möchte man einen Import einer Datei ganz ohne weitere Benutzerinteraktion durchführen. Ein Klick auf Import und die Datei (die die Anwendung kennt) wird importiert.
Im Prinzip: Datei in Stream laden, Stream durch XMLPort importieren.
Hier die Variablen sowie unten der Code 🙂

Variablen

Name

DataType

Subtype

FileStream

DotNet

System.IO.FileStream.’mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′

FileMode

DotNet

System.IO.FileMode.’mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′

FileManagement

Codeunit

File Management

Code

// Um Berechtigungsprobleme aus dem Weg zu gehen. Dennoch ist es notwendig, dass das Servicetier die Berechtigung auf die Datei besitzt
tmpClientFile := FileManagement.ClientTempFileName(FileManagement.GetExtension(FileName));
FileManagement.DownloadToFile(FileName, tmpClientFile); 

CLEAR(FileStream);
FileStream := FileStream.FileStream(tmpClientFile, FileMode.Open); 

// Der XMLPort sollte auf UseRequestForm FALSE stehen
CLEAR(Port);
MyPort.SETSOURCE(FileStream);
MyPort.IMPORT;

Mit freundlichen Grüßen,
Matthias König

mal was kurzes in der Hoffnung wieder rein zukommen 😀

Heute habe ich mich mal wieder mit einem Javascript Add-In beschäftigen dürfen 🙂 Bei mir lokal funktionierte alles einwandfrei. Bis ich das Add-In im Zielsystem importiert habe. Was ist passiert? NICHTS. Das Add-In blieb einfach Grau.
Die Lösung ist denkbar einfach: Javascript ist im Internet Explorer deaktiviert.
Schaltet man dies ein…

snap0005466

…funktioniert alles wie erwartet. Ich freu mich und mein Freitag war damit gerettet.

Technischer Ablauf der Synchronisation mit NAV 2013 R2

Veröffentlicht: 3. Juli 2014 in Tipp
Schlagwörter:

Hi NAV-Anwender und Entwickler :),

seit NAV 2013 R2 (bzw. seit der Multi Tenancy Funktion) hat Microsoft die Aktualisierung einer Änderung in der Datenbank umgekrempelt. Wir waren es vorher alle gewohnt, dass man ein Objekt speichert und dies direkt in der SQL Datenbank gesichert und für alle im Zugriff ist. Dies ist nun nicht mehr so!! Nach meinen Gesprächen mit anderen Fachleuten (unter anderem MS), Tests und Analysen und lesen diverser Blogeinträge läuft die Synchronisation nun so ab:

  1. Beim kompilieren wird das Objektes in die „Object Metadata“ geschrieben. Zu diesem Zeitpunkt ist es NOCH NICHT auf dem SQL Server und somit auch nicht im Zugriff des Service Tiers.
  2. Es existiert in der „Object Metadata“ SQL Ebene ein Tabellen Trigger. Dieser füllt beim Löschen, Ändern und beim Einfügen die „Object Tracking“ Tabelle. In dieser steht das geänderte Objekt mit einem Timestamp.
  3. Während der Synchronisation der Objekte (siehe Beitrag Synchronisation via Powershell) wird mit der „Objekt Tracking“ Tabelle geprüft, ob es Änderungen gibt. Genauer gesagt überprüft die Anwendung hier mittels des Timestamps ob neue Änderungen existieren und welches Objekt übertragen werden muss (Vermute in der „Object Tracking“).
  4. Gibt es Änderungen für ein Objekt, wird dieses physikalisch in die SQL Datenbank geschrieben.
  5. Daraufhin wird der Stand in die „Object Metadata Snapshot“ übertragen.

Das bedeutet: Ist in der „Object Metadata Snapshot“ kein aktueller Datensatz des geänderten, eingefügten oder gelöschten Objektes enthalten, ist die Synchronisation nicht erfolgreich abgeschlossen worden.
Des Weiteren vermute ich, dass beim neustart des Servicetiers immer die aktuellste Version aller Objekte geladen werden und Schritt 4 und 5 durchgeführt wird.

Falls wer weitere Informationen und/oder Korrekturen diesbezüglich hat, bitte her damit. Ein sehr interessantes und wichtiges Thema.
Mit freundlichen Grüßen,
Matthias König

P.S. hier auch eine Zusammenfassung von Saurav Dhyani des MS Kommentars:  Saurav Dhyanis „NAV 2013 R2 Synchronization Paradigm.“
Dieser beschreibt nahezu den selben Ablauf wie ich hier 🙂

Hi Leute,

ich kam mal wieder dazu eine Laufendenummer in einem Report anzeigen lassen zu wollen. Bis Dato konnte/habe ich diese immer in NAV erstellt und dann in das Dataset mit übernommen. Nun aber musste dies im RDLC selber berechnen da die Sortierung im Dataset und im Layout unterschiedlich waren. Hier eine ganz simple Lösung:

1. Wir erstellen eine eigene Funktion + Variable im Custom Code Bereich des Reports

Custom Code Bereich

snap2188 snap2189

Der einzufügende Code:

Dim GroupCnt as Integer=0
Function GetGroupRownumber() as String
 GroupCnt=GroupCnt+1
 return GroupCnt.ToString()
 End Function

2. Diese sprechen wir in dem Control unserer Wahl an:

=Code.GetGroupRownumber()

3. Wir erfreuen uns an der hochzählenden, laufenden Nr. 🙂

 

Im Prinzip macht diese Funktion nichts anderes als eine integer Variable hochzuzählen. Da diese Funktion aber nur ausgeführt wird wenn sie auch angezeigt wird werden nicht eingeblendete Controls nicht mit gezählt! Werden Zeilen also aus diversen Gründen nicht angezeigt, werden diese auch nicht mit gezählt 🙂

 

Mit freundlichen Grüßen, Matthias König

Synchronisation via Powershell

Veröffentlicht: 16. April 2014 in SQL, Tipp

Hi NAV Anwender und Entwickler ;),

da wir aufgrund des Paradigmenwechsels in der Synchronisation der Tabellenänderungen (MS Blog Artikel: http://blogs.msdn.com/b/nav/archive/2014/03/27/table-synchronization-paradigm-in-microsoft-dynamics-nav-2013-r2.aspx) nun ja häufiger die Anpassungen manuell transferieren sollten, hier eine kurze Beschreibung wie man Objektänderung aus der NAV 2013 R2 Entwicklungsumgebung via Powershell auf den SQL Server übertragen kann:

1. Logge dich auf dem NST (Navision Service Tier) ein.

2. Starte die Powerstell ISE.

3. Lade das aktuelle NavAdminTool.ps1 aus dem Service Ordner des Service Tiers.

4. Starte das NavAdminTool.

5. Führe dort „set-executionpolicy unrestricted“ aus und bestätigte den Dialog.

6. Synchronisiere NST mittels Sync-NAVTenant <DeinNSTServerinstanzName>

7. Starte NST-Dienst neu

Dies ist auch der Empfohlene Weg von Microsoft selbst J
In diesem Zuge möchte ich auch auf Waldos Blogartikel bezüglich Umnummerierung von Tabellen hinweisen: http://www.waldo.be/2014/04/16/renumbering-tables-in-nav-2013-r2-be-careful/. Hier ändert sich aktuell sehr viel. Ich bin gespannt was auf uns Entwickler noch zu kommt.

Mit freundlichen Grüßen
Matthias König

Bemerkungen zu Textkonstanten hinzufügen

Veröffentlicht: 14. April 2014 in Tipp

Hallo Leute,

letzte Woche hat mir ein Kollege ein interessantes, neues (vermeintlich neu, ich kannte es nicht :D) Feature gezeigt und zwar wie man Bemerkungen für eine Textkonstante anlegen kann.

Beispiel aus dem Standard:

In der Tabelle 27 gibt es die Textkonstante Text027, diese beinhaltet den Deutschen Text „muss größer 0 sein“. Schaut man nun in den „Multilanguage Editor“ findet man dort zu dieser Textkonstante eine Bemerkung:

In diesem Fall mag sie nicht viel weiter helfen. Man kann sich nun auch fragen „Wofür sollte ich das nutzen?!“. Aber es gibt einen guten Anwendungsfall den die Tabelle 27 auch für uns bereit hält:

Hier sehen wir direkt welche Platzhalter welchem Wert enthalten. Das finde ich sehr praktisch! Anlegen kann man diese, indem man die Sprache „@@@“ angibt und dann den Freitext entsprechend füllt.

Viel Spaß damit J

Mit freundlichen Grüßen,
Matthias König