Quantcast
Channel: German Microsoft Dynamics NAV
Viewing all 165 articles
Browse latest View live

Web Client gut in Form: Drag & Drop Control Add-In

$
0
0

 

Mit Erschrecken musste ich feststellen, dass ich, nun bereits seit mehr als einem halben Jahr, das bloggen hier ein wenig vernachlässigt habe. Wenngleich die Umsetzung des heutigen Themas auch schon ein wenig länger her ist, so ist es meiner Meinung nach trotzdem noch aktuell. Allerdings möchte ich dazu aber noch ein wenig weiter ausholen (war ja so klar!) und einige Jahre zurück gehen:

Es begab sich nämlich zu einer Zeit, vor ungefähr 7-8 Jahren, als ich noch mit der Web-Entwicklung zu tun hatte und mich mehr als regelmäßig über JavaScript ärgern musste (und auch wollte!), so dass ich mir schwor, diese Programmiersprache danach niemals wieder auch nur anzusehen… Ob es nun an meiner vielleicht in dem Punkt beschränkten Sicht auf die Dinge oder “simpel” an der fehlenden Typgebundenheit lag, möchte ich nicht weiter ergünden. Aber: Manchmal – wenn man grauer und hoffentlich auch weiser wird - muss man seine Meinung ändern, Überzeugungen überdenken oder einfach etwas besseres benutzen, ohne die gebotenen Möglichkeiten zu verlieren. Smile

 

Die Schritte zur Überzeugung

Ob nun au den Gefühl heraus, immer das Neuste haben zu müssen oder der Tatsache, dass im Update 2 für Visual Studio 2013 ein Feature Namens “TypeScript” enthalten ist, soll jeder für sich selbst entscheiden. Auf mich jedenfalls passen beide Varianten.

image

Wichtig in dem Zusammenhang ist allerdings primär TypeScript: Nutzung der Features von JavaScript, ohne die Probleme von JavaScript.

image

Ich werde allerdings nur am Rande auf TypeScript eingehen, wo ich es für sinnvoll erachte. Eigentlich sprechen die eingebundenen Quellcodes bereits Bände. Die Vorteile überwiegen meiner Meinung nach, wenn diese auch in Teilen mit ein klein wenig mehr Arbeit einhergehen, um beispielsweise die Bibliotheken aus dem Microsoft.Dynamics.NAV Namensraum einzubinden. Diese Arbeit habe ich mir nicht gemacht, sondern beschränke mich darauf, für diesen das Typsystem außer Kraft zu setzen (cast nach any). Mehr dazu im angehängten Quellcode.

Rückblickend kann ich sagen, dass die Nutzung von TypeScript in der Tat wesentlich mehr Vor- als Nachteile brachte. Die Syntax muss man sich natürlich zunächst verinnerlichen. Sicherlich ist es dazu auch notwendig, ein wenig in der Bibliothek libd.ts zu stöbern und sich auf der TypeScript Webseite umzuschauen. Aber dann geht einem alles recht schnell von der Hand und bezüglich Typfehlern gibt es keine Probleme mehr. Bevor ich aber wieder ins schwafeln komme, zurück zu Dynamics NAV.

 

Alle Clients bedienen

Mit den obigen Werkzeugen bewaffnet, begebe ich mich in die Welt der Dynamics NAV Control Add-Ins, welche seit Dynamics NAV 2013 R2 auf JavaScript und HTML basieren. Näheres dazu auch unter Extending Any Microsoft Dynamics NAV Client Using Control Add-ins. Wie Sie am Titel der verlinkten Webseite erkennen, können mit dem neuen Konzept sowohl der Windows- als auch der Web Client ein solches Control hosten. Ihnen stehen, unabhängig vom verwendeten Client, nun alle Möglichkeiten offen! Dazu ein Hinweis: Das alte Konzept existiert natürlich weiterhin.

Add-Ins scheinen insgesamt sehr beliebt zu sein. Speziell Drag & Drop Add-Ins schossen vor einiger Zeit wie Pilze aus dem Boden. Was liegt da näher, als genau dieses “klassische Genre” in diesem Post zu bedienen? Die Inspiration holte ich mir auf folgender Webseite: http://html5demos.com/file-api. Es handelt sich dabei um eine simple Implementierung der Browser File API. Diese erlaubt es, eine Bilddatei im Browser fallen zu lassen, läd diese hoch und zeigt sie im Anschluss an. Mit dieser Basis bewaffnet machte ich mich daran, dies auch für Dynamics NAV 2013 R2 umzusetzen.

 

Butter bei die Fische

Das Ziel wird sein, per Drag & Drop Dateien im Browser fallenzulassen, diese automatisch auf den Dynamics NAV Server hochzuladen und in einer Tabelle in einem BLOB-Feld zu speichern. Klingt bis dahin recht einfach, ist es aber nicht Smile Als Startpunkt dient für die Control Add-Ins eine Manifest-Datei. Bei dieser handelt es sich um eine XML-Datei, in der alle Informationen zum Add-In zusammengeführt sind. Eine Übersicht dazu finden Sie hier: Manifest Overview.

 

<?xml version="1.0" encoding="utf-8"?>
<Manifest>
<Resources>
<Script>droparea.js</Script>
<StyleSheet>droparea.css</StyleSheet>
<Image>BackgroundImage.png</Image>
</Resources>
<ScriptUrls>
<ScriptUrl>http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js</ScriptUrl>
</ScriptUrls>

<Script>
<![CDATA[
$(document).ready(function()
{
initializeControlAddIn('controlAddIn', Microsoft.Dynamics.NAV.GetImageResource('BackgroundImage.png'));
Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('ControlAddInReady', null);
});
]]>
</Script>

<RequestedHeight>150</RequestedHeight>
<RequestedWidth>150</RequestedWidth>
<VerticalStretch>true</VerticalStretch>
<HorizontalStretch>true</HorizontalStretch>
</Manifest>

Die Manifest-Datei ist in mehrere Bereiche unterteilt. Zum einen die Ressourcen (Resources-Tag), in dem Referenzen auf JavaScript-, StyleSheet- und Bilddateien hinterlegt werden. Diese müssen in einer vorgegebenen Struktur innerhalb eines ZIP-Archivs vorliegen. Neben der Manifest.xml selbst, sollten dort die Verzeichnisse Image, Script und StyleSheet enthalten sein. In diesen liegen dann auch die referenzierten Dateien, in diesem Fall droparea.js, droparea.cs und BackgroundImage.png. Bilder müssen übrigens zwingend als PNG-Datei (Portable Network Graphics) vorliegen.

 

image

 

Weiterhin enthält die Manifest.xml noch eine Referenz auf JQuery (ScriptUrl) und einen Bereich “Script”, der als Einstiegspunkt für den Aufruf fungiert und zur Initialisierung dient. Alles weitere ist in obigem Link zu finden.

In diesem Fall wird die JavaScript- (bzw. TypeScript-) Funktion initializeControlAddIn aufgerufen, sobald das gesamte HTML-Dokument geladen ist. Diese erhält neben der ID des eigentlichen Add-In (controlAddIn) auch eine Referenz auf ein Bild. Bild-Referenzen werden zur Laufzeit über GetImageResource ermittelt.

 

function initializeControlAddIn(id: string, imageUrl: string) {
var controlAddIn: HTMLElement = document.getElementById(id);
var imageTag: string = "";
 
if (imageUrl != "") {
        imageTag = '<p class="centeredImage"><img src="' + imageUrl + '"></p>';
    }
 
    controlAddIn.innerHTML =
'<section id="container">' +
'<article>' +
'<p id="status">Not supported</p>' +
'<div id="droparea">' + imageTag + '</div>' +
'<div id="progressbar"><div class="percent">0%</div></div>' +
'</article>' +
'</section>';
 
    pageLoaded();
}
 
 
function pageLoaded() {
var dropArea: HTMLElement = document.getElementById('droparea');
 
if (typeof (<any>window).FileReader === 'undefined') {
        updateStatus('', 'fail');
    } else {
        updateStatus('Ready!', 'success');
    }
 
    dropArea.ondragover = onDragOver;
    dropArea.ondragleave = onDragLeave;
    dropArea.ondragend = onDragEnd;
 
    dropArea.ondrop = onDrop;
}
 
function onDragOver(e: DragEvent) {
this.className = 'hover';
returnfalse;
}
 
function onDragLeave(e: DragEvent) {
this.className = '';
returnfalse;
}
 
function onDragEnd(e: DragEvent) {
this.className = '';
returnfalse;
}
 
function onDrop(e: DragEvent) {
 
this.className = 'drop';
    e.preventDefault();
 
// Reset progress indicator on new file selection.
    updateProgress('', '', 0);
 
var type: string = e.dataTransfer.types[0];
 
if (type === "Text") {
var content: string = e.dataTransfer.getData(type);
        alert(content);
    }
elseif (type === "Files") {
var files: FileList = e.dataTransfer.files;
 
for (var i: number = 0, file: File; file = files[i]; i++) {
var upload: Upload = new Upload(file.name, file);
            uploadQueue.Push(upload);
        }
    }
 
if (!uploadQueue.uploadInProgress) {
        uploadQueue.StartSendData();
    }
 
this.className = '';
 
returnfalse;
}
 

 

Demnach wird in der Methode initializeControlAddIn() das Element geholt, ein eventuell übergebenes Bild eingebettet und die DropArea gezeichnet. Gefolgt davon, wird die Methode pageLoaded() aufgerufen, die u.a. prüft, ob der Browser die File API unterstützt und abhängig davon den Status des Add-In setzt. Abschließend werden noch 4 Events registriert, die beim Überfahren mit der Maus das Add-In jeweils farblich anpassen, um dem Benutzer auch visuelles Feedback zu geben.

 

image      image   

Der Upload selbst startet im Event onDrop(). Auf diese Methode möchte ich nun etwas genauer eingehen, da hier alles beginnt…

 

Los geht’s

Im Fall, dass Datei(en) fallen gelassen werden, lautet e.dataTransfer.types[0] == “Files”. In dem Fall wird für jede der Dateien ein neues Objekt von Typ Upload() erzeugt und dieses dem definierten uploadQueue() hinzugefügt. Handelt es sich dabei um den ersten Upload bzw. ist noch kein Upload im Gange, dann wird per uploadQueue.StartSendData() die Übertragung gestartet.

 

StartSendData() {
if (this.uploadQueue.length > 0) {
this.uploadInProgress = true;
var upload: Upload = this.uploadQueue[0];
 
        updateStatus(upload.name + ' (' + this.uploadQueue.length + ')', 'success');
 
var reader: FileReader = new FileReader();
 
// Save file and upload reference for use in events
        (<any>reader).upload = upload;
 
        reader.onabort = function (event: any) {
            alert('File read cancelled');
        };
 
        reader.onloadstart = function (event: any) {
            updateProgress('Loading', 'loading', -1);
        };
 
        reader.onprogress = function (event: ProgressEvent) {
if (event.lengthComputable) {
var percentLoaded: number = Math.round((event.loaded / event.total) * 100);
 
if (percentLoaded < 100) {
                    updateProgress('Loading', 'loading', percentLoaded);
                }
            }
        }
 
        reader.onloadend = function (event: ProgressEvent) {
var data: string = (<any>event.target).result;
 
if (data != null) {
this.upload.data = data;
this.upload.length = data.length;
this.upload.totalLength = data.length;
            }
 
// Ensure that the progress bar displays 100% at the end.
            updateProgress('', '', 100);
 
            Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('FileDropBegin', [this.upload.name]);
        }
 
        reader.onload = function (event: any) {
        };
 
        reader.readAsDataURL(upload.file);
    }
else {
this.uploadInProgress = false;
        updateStatus('Ready!', 'success');
    }
}
 

 

Nach dem Start wird natürlich zunächst geprüft, ob der uploadQueue überhaupt etwas zur Übertragung enthält. Ist dies der Fall, wird dies notiert (uploadInProgress = true), das erste Upload-Objekt gelesen und der Status des Controls aktualisiert. Zum eigentlichen Lesen der Dateien fungiert der FileReader(). Für die erzeugte Instanz werden (inline) die Events onabort, onloadstart, onprogress und onload definiert, die primär zur Aktualisierung der Oberfläche dienen. Das onloadend-Event selbst kümmert sich um den eigentlichen Upload. Nachdem der FileReader per reader.readAsDataURL() ausgeführt wurde, wird nach dem vollständigen Upload das onloadend-Event ausgeführt und es werden die eigentlichen Daten und auch die Länge der Daten ermittelt. Um diese Daten dann auch an Dynamics NAV zu schicken, wird InvokeExtensibilityMethod() aufgerufen. Diese Methode ist der “direkte” Rückweg zum Aufruf von Dynamics NAV-Funktionen im C/AL auf dem Server. “Direkt” steht hier in Anführungszeichen, da alle Erweiterungsmethoden jeweils asynchron verarbeitet werden.

Dazu aber später mehr. An dieser Stelle ist es notwendig, dass wir die Erläuterungen kurz unterbrechen, und klären, wie genau denn im C/AL die Erweiterungsmethoden definiert werden und wie auch die Entwicklungsumgebung davon Wind bekommt. Denn diese, wie Sie sich sicherlich denken, hat mit HTML5 und JavaScript nicht wirklich viel am Hut Smile

 

Wie sag ich’s meiner Entwicklungsumgebung – Schnittstellendefinition

Die Antwort: Wie damals. Smile Wobei “damals” dann hier Dynamics NAV 2013 meint. Es wird ein Interface definiert, in dem alle im eigentlichen JavaScript-Add-In definierten Methoden und Events beschrieben sind. Die Implementierung finden Sie im Projekt in der Datei ControlAddIn.cs.

 

// Name: DropAreaControl
// Token: b33780e0a1cf8256
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Dynamics.Framework.UI.Extensibility;
 
namespace DropAreaControlAddIn
{
publicdelegatevoid FileDropBeginEventHandler(string filename);
publicdelegatevoid FileDropEventHandler(string data);
publicdelegatevoid FileDropEndEventHandler();
 
    [ControlAddInExport("DropAreaControl")]
publicinterface IDropAreaControlAddIn
    {
        [ApplicationVisible]
event ApplicationEventHandler ControlAddInReady;
 
        [ApplicationVisible]
event FileDropBeginEventHandler FileDropBegin;
 
        [ApplicationVisible]
event FileDropEventHandler FileDrop;
 
        [ApplicationVisible]
event FileDropEndEventHandler FileDropEnd;
 
        [ApplicationVisible]
string ReadyForData(string filename);
    }
}

 

Das Interface beschreibt die in JavaScript implementierten Methoden (ReadyForData()) und alle im C/AL zu nutzenden Events. Und genau diese Events sind es, die Sie bei Nutzung der Methode InvokeExtensibilityMethod() dann aus dem Web auf dem Dynamics NAV Server aufrufen.

 

image

 

Weiter geht’s

Und hier ist es wichtig sich bewusst zu sein, dass die Events im Dynamics NAV (also FileDropBegin(), FileDrop() und FileDropEnd()) asynchron aufgerufen werden! Und genau hier, und jetzt fahre ich mit meiner Erläuterung zu InvokeExtensibilityMethod('FileDropBegin', [this.upload.name]) fort, kann es spannend werden, wenn die Datei, welche Sie fallengelassen haben, etwas größer als sehr wenige KB ist. Gehen wir davon aus, dass die Datei 5 MB groß ist und Sie alle Daten, gerne schön in kleineren Häppchen, auf den Server übertragen. Senden, senden, senden, senden…

Und dabei kommt es zum Problem, da dann zu viele Daten vom Browser, über den Web Client (auf dem Internet Information Server) an den Dynamics NAV Server übertragen werden sollen. Es ist aufgrund der Asynchronität aber nicht zwingend so, dass diese Daten auch in Echtzeit verarbeitet und gesendet werden. Dabei kann es dann passieren, dass es letztendlich an einer Stelle einfach “überläuft”.

Dabei fällt mir eine meiner Lieblingsszenen aus “Das Boot” ein: “Irgendwann is’ natürlich Schluss. Das is’ klar. Hält der Druckkörper nich’ mehr. Dann wird das Boot - vom Wasserdruck - zerquetscht.”. Nicht so bildlich vielleicht, aber genau das passiert in den Fall. Es gilt also sicherzustellen, dass wir die folgende Daten erst senden, sobald die vorhergehenden Daten vom Dynamics NAV Server erfolgreich verarbeitet wurden.

Deshalb wird das C/AL-Event DropArea::FileDropBegin(filename : Text) nur einmalig aufgerufen und an dieser Stelle auch nur der Dateiname gespeichert. Daraufhin wird in den Client (JavaScript) per ReadyForData() zurückgerufen, um zu Signalisieren, dass der Server für weitere Datenpakete bereit ist. Der Name wird im JavaScript verwendet, um den korrekten Upload zu ermitteln.

 

ReadyForData(name: string) {
var upload: Upload = this.FindUpload(name);
 
if (upload != null) {
if (upload.length > 0) {
var currentLength: number = (upload.length > 16384) ? 16384 : upload.length;
this.currentData = upload.data.substr(0, currentLength);
            upload.data = (upload.length > currentLength) ? upload.data.substr(currentLength) : "";
            upload.length -= currentLength;
 
var percentUploaded: number = Math.round(((upload.totalLength - upload.length) / upload.totalLength) * 100);
            updateProgress('Uploading', 'loading', percentUploaded);
 
            setTimeout("uploadQueue.SendData();", 10);
 
return;
        }
    }
 
this.currentData = null;
this.RemoveUpload(name);
    updateProgress('', '', 0);
 
    setTimeout("uploadQueue.SendData();", 10);
}

 

Wird dieser gefunden (FindUpload()), dann werden die nächsten 16 KB der zum Upload anstehenden Datei ermittelt und uploadQueue.SendData() erneut aufgerufen. Allerdings nicht direkt, sondern indirekt über setTimeout(), also mit einer Verzögerung von 10 Millisekunden. Aber warum? Wir müssen den Aufruf entkoppeln, damit ReadyForData() Gelegenheit hat, wieder zum Aufrufer Dynamics NAV zurückzukehren. Ansonsten könnte es (bzw. wird es) eine Aufrufkette geben, FileDropBegin() (NAV) –> ReadyForData() (JS) –> SendData() (JS) –> FileDrop() (NAV), die wiederum unerwünschte Effekte auslösen kann. Durch setTimeout() wird also entkoppelt, ReadyForData() kehrt zurück und beendet sich und einige Millisekunden später wird, ausgelöst/getriggert vom JavaScript, SendData() aufgerufen, welches wiederum das aktuelle Datenpaket von max. 16 KB Größe an Dynamics NAV sendet.

 

SendData() {
if (this.currentData != null) {
        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('FileDrop', [this.currentData]);
    }
else {
        Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('FileDropEnd', null);
this.StartSendData();
    }
}
 

 

Das geschieht so lange, wie noch Daten vorhanden sind, also currentData != null ist. Eine 160 KB große Datei führt demnach zu 10 Aufrufen von SendData(), bis letztendlich die Methode bzw. das Dynamics NAV Event FileDropEnd() aufgerufen wird, welches die Dekodierung der empfangenen Daten und die weitere Verarbeitung durchführt. Während der Übertragung werden die ankommenden Daten in eine DotNet Variable vom Typ MemoryStream (FromMemoryStream) geschrieben. Dieser wurde beim Aufruf von FileDropBegin() geöffnet und bekommt bei jedem Aufruf die gesendeten Textdaten, gewandelt in ein Byte[]-Array angehängt. Die gesendeten Daten enthalten am Anfang einen kurzen Header der mit “data:” beginnt, welcher in der Funktion FileDrop() geprüft und eventuell herausgefiltert wird.

 

image

Nachdem die Datei komplett übertragen ist und von JavaScript aus, im Dynamics NAV dann das Event FileDropEnd() aufgerufen wird, werden alle bisher im FromMemoryStream gespeicherten Daten Base64-Dekodiert in eine neue MemoryStream-Variable namens ToMemoryStream geschrieben. Die eigentliche Dekodierung geschieht dabei in der C/AL-Funktion Base64Decode(). FileDropEnd() letztendlich, speichert den dekodierten binären Datenstrom in einem BLOB-Feld der Tabelle Drop Area File und räumt danach ein wenig auf.

Voila! Von der lokalen Festplatte, über den Browser, gesendet an den Internet Information Server (Web Client), weitergeleitet an den Dynamics NAV Server, landet die übertragene Datei letztendlich in den Untiefen einer SQL Server Datenbank. Beinahe wie von Geisterhand Smile

 

Ich will selber ran

Den kompletten Quellcode inkl. Dynamics NAV-Objekten und dem Visual Studio 2013-Solution habe ich an diesen Beitrag angehängt.

Die Solution besteht aus zwei Teilen. Zum Einen das Projekt "ControlAddIn", welche auch die TypeScript-Datei (.ts) enthält. Diese wird beim kompilieren in eine JavaScript-Datei (.js) umgewandelt. Weiterhin der C#-Teil (DropAreaControlAddIn), aus welchem die DLL hervorgeht, die dann das Interface für die Entwicklungsumgebung enthält.

 

Um alles zu testen, entpacken Sie bitte das Archiv in ein Verzeichnis Ihrer Wahl. Zur simplen Installation, gehen Sie dann bitte wie in den folgenden Punkten beschrieben vor:

  • Kopieren Sie die Datei DropAreaControlAddIn\bin\Debug\DropAreaControlAddIn.dll in das Verzeichnis C:\Program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client\Add-ins oder alternativ in ein dort angelegtes neues Unterverzeichnis. Diese DLL enthält das oben beschriebene Interface, um die Funktionen und Events in der Dynamics NAV Entwicklungsumgebung verfügbar zu machen. Danach muss die finsql.exe neu gestartet werden.
  • Markieren Sie alle Verzeichnisse und die Datei Manifest.xml in Verzeichnis ControlAddIn\AddIn. Erstellen Sie dann (beispielsweise über “Senden an”) ein neues ZIP-Archiv.
  • Öffnen Sie Dynamics NAV 2013 R2, suchen Sie nach “Steuerelement-Add-Ins” und tragen Sie die folgenden Daten ein:
    • Name: DropAreaControl
    • Token: b33780e0a1cf8256
    • Klicken Sie auf die Action “Importieren”, um die erstellte Archivdatei mit dem Add-in zu importieren.
  • In der neu gestarteten Entwicklungsumgebung, öffnen Sie den Object Designer und importieren die Datei DropAreaControlAddInObjects.fob oder DropAreaControlAddInObjects.txt.
  • Kompilieren Sie danach alle Objekte mit der Version “DropArea”.

Aus dem Object Designer der Entwicklungsumgebung, starten Sie nun die Page 50001 “Drop Area Files”. Alternativ öffnen Sie den Web Client: http://server:port/DynamicsNAV71/WebClient/List.aspx?company=CRONUS%20AG&mode=View&page=50001

Ich wünsche Ihnen viel Spaß mit der Implementierung und hoffe auf interessante Weiterentwicklungen!

 

Carsten Scholling

Microsoft Dynamics Germany
Microsoft Global Business Support (GBS) EMEA

Microsoft Connect: http://connect.microsoft.com
Online Support: http://www.microsoft.com/support
Sicherheitsupdates: http://www.microsoft.de/sicherheit

Microsoft Deutschland GmbH
Konrad-Zuse-Straße 1
D-85716 Unterschleißheim
http://www.microsoft.de


Dynamics NAV für Tablets

$
0
0

Dynamics NAV fürs iPad, Dynamics NAV für Android und Dynamics NAV für modern Windows sind in den jeweiligen Stores verfügbar.


Viel Spaß beim Ausprobieren!

clip_image004clip_image002  clip_image006

 

clip_image007

 

Mit Microsoft Dynamics NAV für Modern Windows erhalten Sie die vertraute Dynamics NAV-Umgebung auf einer lebendigen und modernen Oberfläche, die für die Touchbedienung entwickelt wurde.
 
Dynamics NAV ist eine Unternehmenslösung von Microsoft, die schnell implementiert werden kann und benutzerfreundlich ist. Zudem unterstützt sie Ihre Wachstumsambitionen. Dynamics NAV hilft Unternehmen bei der Verwaltung ihrer Finanzen, Lieferkette und Mitarbeiter und schafft so kundenfreundliche Umgebungen.
 
Treffen Sie clevere Entscheidungen auf Grundlage der neuesten Geschäftsdaten und erledigen Sie Arbeiten bereits nach wenigen Stunden oder unterwegs mit Microsoft Dynamics NAV für Modern Windows. Dies ist der perfekte Begleiter für Kundendiensttechniker, Außendienstorganisationen, Führungskräfte und Entscheidungsträger oder alle Mitarbeiter Ihrer Organisation, die Zugriff auf Dynamics NAV über ein touchfähiges Mobilgerät wünschen. Über das Rollencenter erhalten Sie Einblick in jeden Winkel Ihres Unternehmens. Tippen Sie, um die Details Ihrer Kunden, Kreditoren, Lagerbestände oder beliebiger anderer Daten von Dynamics NAV anzuzeigen. Sie können in wenigen Schritten Rechnungen und Angebote erstellen und per E-Mail senden.
 
Benötigt Zugriff auf Microsoft Dynamics NAV 2015.
Ihre Umgebung variiert je nach dem Dynamics NAV-Server, mit dem Sie verbunden sind.

Features:

•Im Rollencenter erhalten Sie einen Überblick über Ihr Unternehmen.
•Durch Tippen und Wischen gelangen Sie zu Ihren Daten und zeigen Details an.
•Sie können alle Spalten in einer Liste durchsuchen.
•Sie können Listen an Microsoft Excel oder Office 365 senden.
•Sie können mit der Kamera auf dem Mobilgerät Fotos schießen und diese in Dynamics NAV hochladen.
•Drehen Sie Ihr Gerät, um einen Überblick über Ihre Daten zu erhalten oder sich auf bestimmte Inhalte zu konzentrieren.
•Sie können zwei Apps parallel verwenden und sehen beispielsweise Kundendaten, während Sie über Skype oder Lync telefonieren.

  

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Microsoft Dynamics NAV 2015 Readiness Library

$
0
0

Ich möchte Ihnen heute die neue Webseite zum Thema “Microsoft Dynamics NAV 2015 Readiness Library” vorstellen, wo zentral alle verfügbaren Informationen zu unserer nächsten Microsoft Dynamics NAV 2015 Version gesammelt wurden.

Die Themen auf der Seite werden regelmäßig erweitert.

Um an die Informationen zu gelangen, ist ein Zugang zum Partnersource Voraussetzung.


Microsoft Dynamics NAV 2015 Readiness Library


Viel Spaß beim lesen!

 

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Catch Me If You Can – try-catch für .NET in C/AL

$
0
0

 

In diesem Artikel geht es nicht um Frank W. Abagnale Jr., den einzigen Teenager, der es je auf die FBI-Liste der zehn meistgesuchten Kriminellen in den Vereinigten Staaten gebracht hat (siehe auch http://www.kino.de/kinofilm/catch-me-if-you-can/66581), sondern um die Ausnahmebehandlung bei der Nutzung von .NET-Variablen in Dynamics NAV.

Jeder der schon einmal etwas mehr im Bereich der Interoperabilität gemacht hat, wird unweigerlich darauf gestoßen sein, dass eine bei Nutzung von DotNet-Klassen auftretende Ausnahme/Exception, die weitere Ausführung des C/AL-Programmcodes verhindert. Das gleiche Verhalten also, wie bei der Nutzung von ERROR(). Die Fehlermeldung wird ausgegeben und die Verarbeitung beendet. Das wird allgemein genutzt, um Fehleingaben zu quittieren oder andere nicht behandelbare Probleme eindeutig abzufangen. Der Vorteil ist, dass Sie im C/AL selbst bestimmen können, wann ein Abbruch der Verarbeitung sinnvoll ist:

IF kaputt THEN BEGIN
  Aufraeumen();
  ERROR('kaputt!');
END;
 

 

Im .NET Framework dient eine Ausnahme ebenfalls genau dazu. Allerdings ist es nicht immer möglich, alle Eventualitäten zu kalkulieren. Prüfen Sie beispielsweise vor dem Schreiben einer Datei per .NET aus C/AL heraus den Zugriff auf einen Pfad, kann dies, einige Millisekunden später, wenn die Ausgabe der Datei über eine .NET-Klasse erfolgen soll, schon nicht mehr so sein. Sei es, dass der Pfad nicht länger existiert, die Berechtigung sich zur Millisekunde geändert hat, ein ferner Computer heruntergefahren wurde oder hunderte andere Dinge, die man sich als Programmierer lieber nicht vorstellt. Jede noch so gut geplante Implementierung und Vorabprüfung wird durch eines immer wieder ausgehebelt: Den Menschen, dessen freien Willen und unendliche Kreativität!

Aber nehmen wir einfach mal an, der Chefentwickler im Hause hat alle, aber auch absolut alle Eventualitäten berücksichtigt. Vom heruntergefahrenen Server, über die Zugriffsrechte, bis hin zum Kaffeekonsum des Administrators. Nehmen wir an, es gäbe eine Methode (Funktion) in einer .NET-Klasse, die auf alles erdenkliche vorbereitet ist. Was tut nun aber eine klassische .NET-Implementierung in dem Fall, dass zwar alles abgefangen und geprüft wird, aber letztendlich festgestellt werden muss, dass die übergebenen Daten nicht passen? Es wird eine Ausnahme erzeugt, die den Aufrufer über die fehlerhaften Daten informiert. Ist der Aufrufer ebenfalls in z.B. C# implementiert, wird dieser (wahrscheinlich) das try/catch-Konstrukt zur Fehlerbehandlung nutzen und dort dann reagieren. Ist der Aufrufer allerdings Dynamics NAV bzw. dortiger C/AL-Code, führt diese Ausnahme zu einem Fehler, die Ausführung wird unterbrochen und die Standardausnahmebehandlung inkl. Datenbank-Rollback wird ausgeführt.

Man darf an dieser Stelle nicht vergessen, dass Dynamics NAV, ob Server oder Client, vollständig in .NET implementiert ist und auch C/AL beim kompilieren im Object Designer in C#-Code übersetzt und später zur Laufzeit in eine DLL kompilert wird, diese Exception also innerhalb einer Klasse PageXY auftritt, in einer Methode ActionXY, in der der C/AL-Entwickler eine DotNet-Variable benutzt hat. Und das alles nur, weil ein Benutzer, seinem freien Willen uneingeschränkt folgend, und ohne Feld XY auszufüllen, auf der Page XY eine Action XY angeklickt hat… Das bedeutet falsche Daten, interne Prüfung, Methode “wehrt sich”, Methode erzeugt Ausnahme, was sich dann so äußert:

ERROR('kaputt!');
 

 

Auch wenn C/AL und .NET letztendlich im selben C#-Code landen, müssen nach Auftreten von Fehlern (ich meine jetzt aber explizit nicht ERROR() oder eine Ausnahme), eventuell Dinge aufgeräumt, Daten zurückgesetzt oder ein entsprechendes Protokoll geschrieben werden. Das funktioniert aber nur, wenn eine Ausnahme auch von außen (C/AL) abgefangen werden kann.

 

try-catch

C/AL unterstützt (noch) kein try-catch-finally-Konstrukt. Eine Möglichkeit wäre also, den Aufruf einer .NET-Methode per try-catch in einer eigenen .NET-Methode zu kapseln und diese neue Methode aufzurufen, die den Fehler sauber abfängt. Dies ist sicherlich sinnvoll für Eigenentwicklungen, aber wer möchte schon für den Fundus von zehntausenden von .NET-Klassen jeweils eine Aufruffunktion programmieren? Das wird vom Entwickler sicherlich direkt bei Anforderung durch Kopfschütteln, ein klares “NEIN!” oder auch andere, den Mittelfinger nutzende Gesten, quittiert.

Die Antwort: Generische Herangehensweise! Das .NET Framework bietet unter anderem auch einen Mechanismus mit Namen “Reflection”. Reflection erlaubt es, .NET-Assemblies zu analysieren, Informationen zu Klassen, Schnittstellen und Wertetypen auszulesen, Instanzen zur Laufzeit zu erzeugen oder Eigenschaften und Methoden ab- oder aufzurufen. Es ist also auch möglich, die Methode einer Klasse direkt mit Namen aufzurufen. Ein Beispiel dazu, wobei classObject eine Klasse vom Typ Decimal ist:

Type objectType = classObject.GetType();
MethodInfo method = objectType.GetMethod("Divide");
method.Invoke(classObject, newobject[] { 1, 0 });
 

 

Der zweite Parameter von method.Invoke() ist ein Array der übergebenen Parameter (Divident und Divisor) und führt hier natürlich unweigerlich zu einer Ausnahme “Division durch null”. Da wir genau das nicht wollen, was wäre mit folgender Lösung?

try
{
  Type objectType = classObject.GetType();
  MethodInfo method = objectType.GetMethod("Divide");
  method.Invoke(classObject, newobject[] { 1, 0 });
}
 
catch(Exception)
{
}
 

 

Das funktioniert ohne Abbruch, da die auftretende Ausnahme durch den catch abgefangen wird. Klar wird es eine DivideByZeroException sein, diese erbt aber von Exception, so dass wir mit obigem catch(Exception) die meisten, aber nicht alle Ausnahmen abfangen können. Beispiele für nicht-abfangbare Ausnahmen sind OutOfMemoryException oder StackOverflowException. Es ist eher unwahrscheinlich, dass diese im Benutzer-Code noch korrigiert werden können.

Aber wieder zurück zum Thema: Kapseln wir nun das obige Beispiel in einer eigenen Methode, und übergeben die Klasse/das Objekt, den Methodennamen und die Aufrufparameter als Parameter dieser Methode, dann ist das schon recht generisch. Allerdings müssen wir das Ganze noch ein wenig aufwerten. Denn was passiert, wenn eine Methode überladen ist, es also mehrere Implementierungen (mit verschiedenen Parametern) gibt? Ich denke Sie erraten es: Ein Fehler, denn die Methode kann nicht eindeutig bestimmt werden. Das bedeutet also eine Exception, genau: eine AmbiguousMatchException.

Dafür wiederum gibt es Überladungen der Methode GetMethod(). Eine, die meiner Meinung nach ausreichend zur Identifikation der gewünschten Methodensignatur ist, erwartet zwei Parameter. Den Namen und ein Type[]-Array, mit dem die Art der Parameter übergeben werden kann. Methodensignaturen unterscheiden sich nämlich alle in Menge und Reihenfolge der übergebenen Parameter-Varianblentypen. Daraus ergibt sich dann eine etwas umfangreichere Variante.

publicbool InvokeMethod(object classObject, string methodName, List<object> parameters)
{
try
    {
        List<Type> parameterTypes = new List<Type>();
 
foreach(object parameter in parameters)
        {
            parameterTypes.Add(parameter.GetType());
        }
 
        Type objectType = null;
 
if (classObject is Type)
        {
            objectType = classObject as Type;
            classObject = null;
        }
else
        {
            objectType = classObject.GetType();
        }
 
        MethodInfo method = objectType.GetMethod(methodName, parameterTypes.ToArray());
 
if (method == null)
        {
thrownew AmbiguousMatchException();
        }
 
        LastReturnValue = method.Invoke(classObject, parameters.ToArray());
    }
 
catch (Exception ex)
    {
        InitializeExceptionProperties(ex);
 
returnfalse;
    }
 
returntrue;
}
 

 

Aus den übergebenen Parametern, die aus Dynamics NAV als generische Liste übergeben werden, wird wiederum eine generische Liste der Typen erstellt, die zur Ermittlung an die Methode GetMethod()übergeben wird. Sie sehen, dass obiger Code noch eine kleine Variante enthält. Es existieren statische und nicht-statische Typen, Klassen und Methoden. Statische Methoden gehören zum Typ selbst und nicht zu einer spezifischen Instanz eines Typs. Dementsprechend erlaubt die Variante oben auch die Übergabe eines Typs (ermittelt über den C/AL Befehl GETDOTNETTYPE()). Wenn gar nichts mehr geht, also eine Methode nicht gefunden wird, dann meldet sich diese Implementierung ebenfalls mit einer Ausnahme zu Wort, hier einer selbst ausgelösten AmbiguousMatchException. Denn in dem Fall, hat offensichtlich der Entwickler etwas übersehen.

Wer nun noch über die Methode InitializeExceptionProperties() gestolpert ist, diese ist im Folgenden aufgeführt. Zusammen mit GetFullExceptionMessage(), welche bis zur innersten Ausnahme alle Ausnahmen-Fehlertexte konsolidiert, werden hier die Ausnahme und der Fehlertext zum Abruf aus C/AL gespeichert und der letzte Rückgabewert auf null gesetzt.

privatevoid InitializeExceptionProperties(Exception exception = null)
{
    LastException = exception;
    LastMessage = exception != null ? GetFullExceptionMessage(exception) : string.Empty;
    LastReturnValue = null;
}
 
privatestaticstring GetFullExceptionMessage(Exception exception)
{
string errorMessage = string.Empty;
    Exception exception2 = exception;
 
do
    {
        errorMessage += string.Format(" - {0}", exception2.Message);
        exception2 = exception2.InnerException;
    }
while (exception2 != null);
 
    errorMessage = errorMessage.Substring(3);
 
return errorMessage;
}
 

 

Da ich eigentlich schon wieder zu viel geschrieben habe, möchte ich die zwei übrigen und letzten Methoden der Klasse, die ich übrigens Generic Object Handler, kurz GenericObjHandler getauft habe, ohne große Erläuterungen vorstellen:

publicobject GetProperty(object classObject, string propertyName)
{
    InitializeExceptionProperties();
 
try
    {
        PropertyInfo property = classObject.GetType().GetProperty(propertyName);
 
if (property.CanRead)
        {
            LastReturnValue = property.GetValue(classObject, null);
        }
    }
 
catch (Exception ex)
    {
        InitializeExceptionProperties(ex);
    }
 
return LastReturnValue;
}
 
publicbool SetProperty(object classObject, string propertyName, object propertyValue)
{
try
    {
        PropertyInfo property = classObject.GetType().GetProperty(propertyName);
 
if (property.CanWrite)
        {
            property.SetValue(classObject, propertyValue, null);
        }
    }
 
catch (Exception ex)
    {
        InitializeExceptionProperties(ex);
returnfalse;
    }
 
returntrue;
}
 

 

Nur so viel vielleicht: Neben Methoden kann man über Reflection natürlich auch auf Eigenschaften zugreifen. Sogar private Variablen und Anderes sind möglich. Für Eigenschaften wird die PropertyInfo anhand des Namens ermittelt, geprüft ob diese gelesen oder geändert werden kann, und dies dann entsprechend mit GetValue() oder SetValue() durchgeführt.

 

Aufruf aus Dynamics NAV C/AL

Und wie wird diese Klasse nun benutzt? Dazu habe ich folgende, eigentlich selbsterklärende Codeunit geschrieben. Diese dient primär dazu, den Aufruf des GenericObjHandler zu kapseln und Methodenaufrufe mit verschiedener Anzahl an Parametern einfacher zu gestalten, so dass nicht zwingend eine generische Liste erzeugt werden muss. Ich möchte nich darauf hinweisen, dass in meinen Tests bei der Nutzung von Variant-Datentypen für DotNet-Variablen einige “Merkwürdigkeiten” auftraten, weswegen ich im angehängten Archiv, die Parameter vorab einer DotNet-Variablen zuweise und diese an die Parameterliste übergebe.

InvokeMethodParameterList(Obj : DotNet "System.Object";MethodName : Text;Parameters : DotNet "System.Collections.Generic.List`1") : Boolean
GenObjHandler := GenObjHandler.Handler();
 
GenObjHandler.InvokeMethod(Obj,MethodName,Parameters);
LastReturnValue := GenObjHandler.LastReturnValue;
 
IF GenObjHandler.HasException THEN BEGIN
  LastErrorText := GenObjHandler.LastMessage;
  EXIT(FALSE);
END;
 
EXIT(TRUE);
 
GetProperty(Obj : DotNet "System.Object";PropertyName : Text;VAR Value : Variant) : Boolean
GenObjHandler := GenObjHandler.Handler();
PropertyValue := GenObjHandler.GetProperty(Obj,PropertyName);
Value := PropertyValue;
LastReturnValue := GenObjHandler.LastReturnValue;
LastErrorText := GenObjHandler.LastMessage;
 
EXIT(NOT GenObjHandler.HasException);
 
SetProperty(Obj : DotNet "System.Object";PropertyName : Text;Value : Variant) : Boolean
GenObjHandler := GenObjHandler.Handler();
GenObjHandler.SetProperty(Obj,PropertyName,Value);
LastErrorText := GenObjHandler.LastMessage;
 
EXIT(NOT GenObjHandler.HasException);
 
GetLastErrorText() : Text
EXIT(LastErrorText);
 
GetLastReturnValue(VAR ReturnValue : Variant)
ReturnValue := LastReturnValue;
 
InvokeMethod(Obj : DotNet "System.Object";MethodName : Text) : Boolean
Parameters := Parameters.List();
 
EXIT(InvokeMethodParameterList(Obj,MethodName,Parameters));
 
InvokeMethod1(Obj : DotNet "System.Object";MethodName : Text;Parameter1 : Variant) : Boolean
Parameters := Parameters.List();
Parameters.Add(Parameter1);
 
EXIT(InvokeMethodParameterList(Obj,MethodName,Parameters));
 
InvokeMethod2(Obj : DotNet "System.Object";MethodName : Text;Parameter1 : Variant;Parameter2 : Variant) : Boolean
Parameters := Parameters.List();
Parameters.Add(Parameter1);
Parameters.Add(Parameter2);
 
EXIT(InvokeMethodParameterList(Obj,MethodName,Parameters));
 
InvokeMethod3(Obj : DotNet "System.Object";MethodName : Text;Parameter1 : Variant;Parameter2 : Variant;Parameter3 : Variant) : Boolean
Parameters := Parameters.List();
Parameters.Add(Parameter1);
Parameters.Add(Parameter2);
Parameters.Add(Parameter3);
 
EXIT(InvokeMethodParameterList(Obj,MethodName,Parameters));

 

Ich habe einige Beispiele für die Nutzung in eine Codeunit verpackt, möchte hier aber stellvertretend nur zwei Anwendungsfälle zeigen.

image

Es gbt jeweils zwei Varianten der Funktionen, eine die eine Ausnahme hervorruft und damit die Verarbeitung abbricht und eine zweite (mit Suffix “TryCatch”), welche über den GenericObjHandler arbeitet und eben nicht abbricht, da die Ausnahme abgefangen wird.

Im ParseXml() geht es um die Validierung einer XML-Datei gegen ein Schema. Hier tritt beim Load() eine XmlException auf. Mit der Implementierung ParseXmlTryCatch() wird diese über den GenericObjHandler abgefangen und der Fehler angezeigt.

Ähnliches gilt für DivisionByZero() und DivisionByZeroTryCatch(). im letzteren Fall wird die Ausnahme angefangen und der entsprechende Fehlertext zurückgegeben.

 

Installation

Die Installation ist recht einfach. Laden Sie sich das angehängte Archiv herunter. Dieses enthält

  • das Visual Studio 2013 Projekt für die GenericObjHandler-DLL,
  • die Dynamics NAV Codeunits 50011 “Try Catch” und 50010 “Test Try Catch”
  • und 3 Testdateien für die XML-Validierung (TryCatch.xsd, TryCatch_Error.xml, TryCatch_Ok.xml).

 

  • Kopieren Sie, nach der Kompilierung des VS-Projekts, die DLL in die jeweiligen Add-In Verzeichnisse. Für den Dynamics NAV 2013 R2 Server unter C:\Program Files\Microsoft Dynamics NAV\71\Service\Add-ins und den zugehörigen Client unter C:\Program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client\Add-ins. Selbstverständlich können Sie auch ein Unterverzeichnis anlegen.
  • Importieren Sie die Objekte aus TryCatch_Objects.txt. Kompilieren Sie diese im Object Designer.
  • Für den Test der XML-Validierung müssen die 3 Dateien TryCatch.xsd, TryCatch_Error.xml und TryCatch_Ok.xml unter C:\Temp liegen, Sie können den Pfad aber auch einfach in der Codeunit 50010 anpassen.

Un nun wünsche Ich Ihnen auch hier viel Spaß bei der Implementierung und beim Testen. Über Feedback und Weiterentwicklungen freue ich mich und werde diese gerne hier zur Verfügung stellen.

 

Just for fun!

Zur Feier des Tages noch ein wenig verordneter Spaß Winking smile

 

DuBistKlasse!

 

Carsten Scholling

Microsoft Dynamics Germany
Microsoft Global Business Support (GBS) EMEA

Microsoft Connect: http://connect.microsoft.com
Online Support: http://www.microsoft.com/support
Sicherheitsupdates: http://www.microsoft.de/sicherheit

Microsoft Deutschland GmbH
Konrad-Zuse-Straße 1
D-85716 Unterschleißheim
http://www.microsoft.de

Offizielle Build-Listen im Partnersource / Customersource

$
0
0

Elster: Aktuelle Stylesheet-Dateien

$
0
0

Wenn Sie sich schon immer gefragt haben, woher man neue aktuellere Stylesheet-Dateien für das Anzeigen und die Übermittlung der Umsatzsteuervoranmeldung mit Elster erhält, dann kann ich Ihnen hier einen Tipp geben.

Die Stylesheet-Dateien kommen nicht von Microsoft, sondern werden von ElsterOnline (www.elster.de) zur Verfügung gestellt. Ich konnte bis jetzt noch keinen direkten Link finden, um die Stylesheet-Dateien herunterzuladen (wenn es diesen Link überhaupt gibt). Die Dateien sind aber im ElsterFormular-Paket enthalten. Das bedeutet, Sie laden z.B. das aktuelle ElsterFormular im Gesamtumfang herunter (www.elster.de/elfo_down.php) und installieren diese Anwendung auf einem PC.

Nach der Installation finden Sie unter C:\Program Files (x86)\ElsterFormular\bin\Stylesheet

die aktuellen Stylesheet-Dateien. Diese können Sie dann für die Elstereinrichtung in Microsoft Dynamics NAV verwenden.

 

Im aktuellen ElsterFormular 2014 wurde z.B. der Text in den Kennziffern 78/79 folgendermaßen erweitert (gelb markiert):

"Lieferungen von Mobilfunkgeräten, Tablet-Computern, Spielekonsolen und integrierten Schaltkreisen (§ 13b Abs. 2 Nr. 10 UStG)"

 

Diese Änderung ist in den aktuellen Stylesheet-Dateien vom 08.10.2014 noch nicht vorhanden. Hier lautet der Text in den Kennziffern 78/79 immer noch: 

"Lieferungen von Mobilfunkgeräten und integrierten Schaltkreisen (§ 13b Absatz 2 Nr. 10 UStG)"

 

Bei der Übermittlung der XML Datei mit Elster spielt der Text keine Rolle, da dieser nicht mit übertragen wird. Nur die Kennziffern sowie Beträge werden elektronisch übermittelt.

 

Werden die Kennziffern für die Erwerbsbesteuerung (Reverse Charge) wie z.B. 78/79 bei Ihnen im Stylesheet nicht angezeigt, dann prüfen Sie bitte, ob Sie das Elsterupdate für Microsoft Dynamics NAV 2009 R2 vom Juli 2011 bereits im Einsatz haben.

Anbei der Link zum Update "Changes in Electronic VAT Statement for Microsoft Dynamics NAV 2009 R2 - Germany":

Partnersource: https://mbs.microsoft.com/partnersource/germany/deployment/downloads/tax-regulatory-updates/MSDNAV2009R2ElectronicchangesGermany

Customersource: https://mbs.microsoft.com/customersource/germany/NAV/downloads/tax-regulatory-updates/MSDNAV2009R2ElectronicchangesGermany

 

Für Microsoft Dynamics NAV 2013 sowie Microsoft Dynamics NAV 2013 R2 ist kein Update hierzu notwendig.

 

Mit freundlichen Grüßen

Khoi Tran

Microsoft Dynamics Germany 

 

 

Buildnummern-Übersicht Microsoft Dynamics NAV 2015

$
0
0

Stand: 08.11.2014

Folgend finden Sie eine aktuelle Auflistung der verfügbaren Buildnummern, aufsteigend sortiert, mit der dazu gehörigen offiziellen Beschreibung, KB Artikelnummer und Inhalt.

Download Microsoft Dynamics NAV Buildliste

Buildnummer

Beschreibung

KB Nummer

Inhalt

37874

RTM

n.a.

Release aus dem Partnersource

38457

Cumulative Update 1

3013215

ADCS Files
BPA Files
HelpServer Files
NAV Server Files
Outlook Files
RTC Files
UpgradeToolKit Files
Web Client Files
Application Files
DVD-Build

* KBArtikel wird in kürze veröffentlicht. // KBArticle will be released soon.

Hotfixes without a released KBArticle can be requested via a support request!

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Neues Übermittlungsverfahren zur Zusammenfassenden Meldung (ZM)

$
0
0

Ab dem 01.01.2013 wird der Formularserver der Bundesfinanzverwaltung auf dem BZST-Portal nicht mehr zur Verfügung stehen.

Nach genauer Analyse der bestehenden Möglichkeiten können wir Ihnen heute mitteilen, dass wir das ELMA 5 Datenformat in Microsoft Dynamics NAV implementieren werden. Hierbei handelt es sich um ein Verfahren nach ELMA 5 Datensatzbeschreibung.

Das ELMA 5 Übertragungsverfahren bietet folgende Möglichkeiten:

•       Zusammenfassende Meldungen mit mehr als 1.000 Meldezeilen, und/oder

•       Zusammenfassende Meldungen für mehrere Unternehmen, und/oder

•       Zusammenfassende Meldungen für mehrere Meldezeiträume

Übertragungen mit weniger als 1.000 Meldezeilen sowie Einzel-Zusammenfassende Meldungen ausländischer Unternehmen werden durch das ELMA 5 Verfahren ebenso abgedeckt.

Zur Teilnahme an diesem Prozess müssen sich Kunden / Unternehmen beim BZST

Online Portal registrieren und sich zum Verfahren zulassen.

Da der Registrierungs- und Antragsprozess einige Zeit in Anspruch nehmen kann,

bitten wir Sie, Ihre Kunden zu informieren und frühzeitig mit dem Registrierungsprozess zu beginnen.

Detaillierte Informationen hierzu finden Sie auf dem BZST Online Portal. Dort

werden Leitfäden zur Verfügung gestellt.

Schritte zur Registrierung und Teilnahme an den Verfahren

· Antrag auf Teilnahme am ELMA5 Verfahren (Freischaltung für ELMA5)

· Zulassungsantrag an Fachverfahren / Fachreferat (ZM)

· Zusendung von BZST Nummer und ZM Registrierungs ID

· Registrierung am BZST Online Portal - (BZST Nummer und ZM Reg. ID notwendig)

· Zusendung von  2 Aktivierungsdaten 1) Aktivierungs Code 2) Aktivierungs ID

· Softwarezertifikat erstellen - (mit Aktivierungs Code und Aktivierungs ID)

· Erstmaliges Login in privaten Bereich des BZST

· Freischaltung zur Nutzung der ELMA5 Schnittstelle online beantragen(?)

WICHTIG: Zugang erfolgt authentifiziert

Genauere Informationen für die Registrierung finden sich in dem Benutzerleitfaden.

BZST Online Portal

 

 

 

Update 03.01.2012

<<<

Nun ist das Update für die Zusammenfassende Meldung im Partnersource verfügbar.

Das Update ermöglicht es Benutzern Ihre „EU Sales List“ aus Microsoft Dynamics NAV heraus zu erstellen und dann über den BZST Server zu übertragen (ELMA5-Verfahren).

In dem Update ist auch eine geänderte Version des Reports 88 enthalten, mit dem nun auch eine csv-Datei erstellt werden kann.

Dies ist „nur“ als vorübergehender Workaround gedacht für Kunden, die ELMA5 im ersten Schritt nicht nutzen wollen/können und weniger als 1000 Meldedaten haben. Dieser Report wird voraussichtlich nicht dauerhaft unterstützt und somit bei eventuellen künftigen Anpassungen des Dateiformats nicht erneut zur Verfügung gestellt.

Falls Sie Fragen zu dem ZM-Update haben stellen Sie bitte über den üblichen Weg einen entsprechenden Supporteintrag ein.

 

Download Microsoft Dynamics NAV 2009 SP1/R2

 

Download Microsoft Dynamics NAV 2013

>>>

 

 

 

Update 06.05.2013

<<<

Seit Ende letzter Woche ist das aktualisierte Update für die Zusammenfassende Meldung im Partnersource verfügbar.

ZM 2009:

mbs.microsoft.com/.../msdyn_eugermanysaleslistnav2009sp1.htm

ZM 2013: 

mbs.microsoft.com/.../msdyn_eugermanysaleslistnav2013.htm

Neben den Objekten und der Releasenote finden Sie eine deutschsprachige Beschreibung incl. Screenshots, basiernd auf Microsoft Dynamics NAV 2013.

>>>

 

Weitere Informationen erhalten Sie auf dem folgenden 2. Neues Übermittlungsverfahren zur Zusammenfassenden Meldung (ZM)

 

Mit freundlichen Grüßen

Microsoft Dynamics NAV Team


Buildnummern-Übersicht Microsoft Dynamics NAV 2015

$
0
0

Stand: 08.11.2014

Folgend finden Sie eine aktuelle Auflistung der verfügbaren Buildnummern, aufsteigend sortiert, mit der dazu gehörigen offiziellen Beschreibung, KB Artikelnummer und Inhalt.

Download Microsoft Dynamics NAV Buildliste

Buildnummer

Beschreibung

KB Nummer

Inhalt

37874

RTM

n.a.

Release aus dem Partnersource

38457

Cumulative Update 1

3013215

ADCS Files
BPA Files
HelpServer Files
NAV Server Files
Outlook Files
RTC Files
UpgradeToolKit Files
Web Client Files
Application Files
DVD-Build

Hello all,

We have discovered a problem with missing files in the folders that are part of the download packages for Microsoft Dynamics NAV 2015 CU1. This is not a problem in the actual build or the full product media (DVD) but about the files that are part of the folders in the download. The files in question are present in the DVD, and so you can copy them from the DVD. A new set of download packages will be available as soon as possible containing all relevant files. The files in the new download packages will have the exact same build number as the files in the original download.

The missing files are for server-side add-ins in the NST folder:

Microsoft.Dynamics.Nav.Client.DynamicsOnlineConnect.dll

Microsoft.Dynamics.NAV.Integration.Office.dll

Microsoft.Dynamics.Nav.MX.dll

Microsoft.Dynamics.Nav.Client.PingPong.dll

Microsoft.Dynamics.Nav.Management.DSObjectPickerWrapper.dll

Microsoft.Dynamics.Nav.DocumentReport.dll

Microsoft.Dynamics.Nav.PdfWriter.dll

Microsoft.Dynamics.ElsterTransferHandler.dll

You can find the files in the relevant folders under <DVD file name>\ServiceTier\program files\Microsoft Dynamics NAV\80\Service\Add-ins on the product media for CU1.

We will post an update as soon as the complete download packages are available.

 

* KBArtikel wird in kürze veröffentlicht. // KBArticle will be released soon.

Hotfixes without a released KBArticle can be requested via a support request!

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

UPDATE: Dynamics NAV ADCS – Information über aktuelle Version/ Build Stände

$
0
0

Folgende Übersicht soll Ihnen die jeweilige Standard Build Nummer pro Release / Service Pack aufzeigen.

20158.0.37874 und siehe Buildnummern-Übersicht Microsoft Dynamics NAV 2015 für Aktualisierungen
2013.R27.1.35473 und siehe Buildnummern-Übersicht Microsoft Dynamics NAV 2013 R2 für Aktualisierungen
20137.0.33781 und siehe Buildnummern-Übersicht Microsoft Dynamics NAV 2013 für Aktualisierungen

Hinweis:

Ab Versionsstand 2013 werden Web Services anstelle NAS Services für ADCS verwendet! Der NAS Dienst fällt ab der Version NAV 2013 als Dienst weg.
2009.R26.0.32012
2009.SP16.0.29626
20096.0.27808

Empfehlungen:

Für den Versionsstand 5.0x und 2009.x empfehle ich grundsätzlich den KB 949699 zu implementieren (mit Build 5.0.26146). Dieser KB adressiert diverse Probleme und erhöht zugleich Stabilität und Zuverlässigkeit. Der KB 949699 kann leider nicht selbständig heruntergeladen werden. Bitte stellen Sie uns einen Support Fall ein um diesen KB zu erhalten.

Ab Version NAV 2013 stehen Ihnen monatliche Updates (auch Kumulative Updates bezeichnet) bereit. Sehen Sie dazu in die jeweilige Buildnummern-Übersicht.

Keywords: ADCS, Build, Versionlist

Freundliche Grüße,

Benjamin Leposa

Microsoft Dynamics Germany
Microsoft Customer Service und Support (CSS) EMEA

Email: Benjamin.Leposa@microsoft.com
Online Support: www.microsoft.com/support
Sicherheitsupdates: http://www.microsoft.com/germany/athome/security

Microsoft Deutschland GmbH
Konrad-Zuse-Straße 1, D - 85716 Unterschleißheim
http://www.microsoft.com/germany

Export Business Data (GDPdU) in Microsoft Dynamics NAV 2013 / 2013 R2

$
0
0

Mit den Cumulative Updates CU15 für Microsoft Dynamics NAV 2013 und CU8 für Microsoft Dynamics NAV 2013 R2 wurden Änderungen an der Struktur der Einrichtungstabellen für die Datenexporte (GDPdU) vorgenommen.

Es wurden Felder hinzugefügt und Primärschlüssel verändert.
Damit sind die vorherigen Einrichtungsdaten nicht mehr aktuell.
Ein Export von Daten kann zu irrtümlichen Informationen führen.

Die Definition der auszulesenden Felder ist nach wie vor in der Tabelle 11005 -Data Export Record Field vorhanden. Allerdings sind diese Einrichtungsdaten in der Einrichtungspage 11004 - Data Export Record Source nicht mehr zu sehen, da die neuen Schlüsselfelder nicht gefüllt sind. Bei einem Export stören die „alten“ unbearbeiteten Einrichtungsdaten.

Wenn Sie also mit einer Datenbank vor CU15 bzw. CU8 gestartet sind und die Datenexporte bereits eingerichtet haben, dann müssen Sie nach dem Einspielen von CU15 bzw. CU8 oder höher die Einrichtungsdaten überarbeiten!

Validieren Sie dazu bitte das Feld „Field No.“ und füllen das Feld „Source Line No.“ in der Tabelle 11005 mit dem zugehörigen Wert aus dem Feld „Line No.“ der Tabelle 11004.
Wenn die Einrichtung nicht zu umfangreich ist, dann können Sie selbstverständlich die Einrichtungsdaten (bitte auf Tabellenebene, nicht über die Pages) löschen und richten sie dann neu ein.

Mit freundlichen Grüßen

Das Microsoft Dynamics NAV Team

Weihnachten Spezial: Es sind neue Videos aus unserer “How do I…” für NAV 2015 verfügbar!

$
0
0

Oh du fröhliche. Die Weihnachtszeit sollte eine der schönsten Zeiten im Jahr sein. Man verbringt Zeit mit seinen Liebsten, beschenkt sich und genießt in guter Gesellschaft leckeres Essen. Um Sie in diesen Punkten zu unterstützen möchte ich Sie auf unsere erst kürzlich erweiterten“How do I” in NAV 2015 Videos aufmerksam machen.

Hier geht´s zum YouTube Channel: http://bit.ly/1z1WYMG

Optional finden Sie unsere Videos auch im MSDN Kanal: http://bit.ly/1w8ADgt

HowdoI

Freundliche Grüße,

Benjamin Leposa

Microsoft Dynamics Germany
Microsoft Customer Service und Support (CSS) EMEA

Email: Benjamin.Leposa@microsoft.com
Online Support: www.microsoft.com/support
Sicherheitsupdates: http://www.microsoft.com/germany/athome/security

Microsoft Deutschland GmbH
Konrad-Zuse-Straße 1, D - 85716 Unterschleißheim
http://www.microsoft.com/germany

NST aus der Konsole starten

$
0
0

Es gibt einen interessanten Schalter für die Microsoft.Dynamics.Nav.Server.exe um ein Service Tier direkt von dem Command Prompt zu starten ohne diesen extra als Instanz zu konfigurieren.

Dieses kann unter anderem helfen, wenn Sie eine bestimmte Funktion in einem speziellen Build auf einer Testdatenbank testen wollen ohne weitere Änderungen am System vornehmen zu wollen.

Ein mögliches Vorgehen sieht hier wie folgt aus.

- Kopieren des NST Verzeichnisses auf die Festplatte.

- Stoppen des aktuellen NST.

- Den Command prompt mit Admin Berechtigungen öffnen.

- Gehen Sie in das Verzeichnis des NST den Sie starten wollen.

- Starten Sie Microsoft.Dynamics.Nav.Server.exe /console"

Die in der jeweiligen Microsoft Dynamics NAV Version verfügbaren Schalter können Sie mit dem folgenden Befehl aufrufen:


Beispiel:

"Microsoft.Dynamics.Nav.Server.exe [$>ServiceInstance<] [/config >ConfigFileName<] [/console] [/?]"

" $>ServiceInstance< : Name of the instance. The name must be unique for this computer and must begin with '$' and must not contain spaces."

" /config >ConfigFileName< : Specify the qualified name of the configuration file for the instance.""

" /console : Start the server in console mode."

" /? : Shows this help."

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Microsoft Dynamics NAV DotNet objSelection.InsertFile

$
0
0

 

Mit der Microsoft.Office.Interop.Word Bibliothek stehen Ihnen fast unendlich viele Möglichkeiten offen mit Microsoft Dynamics NAV und Office zu interagieren.

Heute möchte ich Ihnen ein kurzes Beispiel zeigen, wie Sie z.B. eine bestehende Word Datei in ein neues erstelltes Dokument am Ende einfügen können.

Als ein Szenario kann man sich hier vorstellen, dass es sich hier z.B. um die „Allgemeinen Geschäftsbedingungen“ handelt, die Sie zentral speichern wollen, aber nicht jedem Dokument welches Sie aus NAV erstellen beinhaltet von Grund auf angehängt sein soll.


NameDataType Subtype   
objWord    DotNetMicrosoft.Office.Interop.Word.ApplicationClass.'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'   
objDocDotNetMicrosoft.Office.Interop.Word.Document.'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'   
objSelection    DotNetMicrosoft.Office.Interop.Word.Selection.'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
WordHelper DotNetMicrosoft.Dynamics.Nav.Integration.Office.Word.WordHelper.'Microsoft.Dynamics.Nav.Integration.Office, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
RangeParam    Text 
BoolParam    Boolean 
wdMovement    Integer 
wdUnit    Integer 
wdBreak    Integer 

 

OnRun()
BoolParam := FALSE;
objWord := objWord.ApplicationClass;
objWord.Visible := TRUE;
objDoc := WordHelper.AddDocument(objWord);
objSelection := objWord.Selection;
objSelection.TypeText('Titel');
objSelection.TypeParagraph();
wdUnit := 6;  //6 = wdStory
wdMovement := 0;  //0 = wdMove
objSelection.EndKey(wdUnit, wdMovement);
wdBreak := 2;  //2 = wdSectionBreakNextPage
objSelection.InsertBreak(wdBreak);
objSelection.InsertFile('C:\temp\AGBS.docx', RangeParam, BoolParam, BoolParam, BoolParam);

 

Das Ergebnis sieht dann wie folgt aus:

image

 

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Microsoft Social Listening in Microsoft Dynamics NAV 2015 CU3

$
0
0

Seit dem Cumulative Update 3 für Microsoft Dynamics NAV 2015 ist das Microsoft Social Listening Feature verfügbar.

Was ist und kann Microsoft Social Listening ?

Mit Microsoft Social Listening können Sie Channels wie Facebook und Twitter beobachten und Aussagen zu Ihren Produkten, Marken, Kunden und Lieferanten auswerten – in Echtzeit und rund um den Globus

  • Social Media-Daten auf einer benutzerfreundlichen Benutzeroberfläche analysieren.
  • Über Marken, Produkte oder Themen auf Twitter, Facebook, YouTube und in Blogs informieren.
  • Stimmungsanalyse verwenden, um Informationen über die öffentliche Wahrnehmung eines Themas zu erhalten.
  • Sehen, wie Sie die einflussreichsten Benutzer erkennen und kontaktieren.

Dieser Dienst wurde nun komfortable in NAV eingefügt, so das Sie auf Basis von Artikeln, Kunden und Lieferanten schnell sehen können was das Word Wide Web über Sie oder Ihre Kunden sagt.

Unser MVP Vjekoslav Babic hat hierfür ein schönes “How Do I” Video aufgenommen:

How Do I: Configure and Use Microsoft Social Listening in Microsoft Dynamics NAV 2015

Viel Spaß beim Gucken.


These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany


Report PDF Font Embedding

$
0
0

In Microsoft Dynamics NAV 2013 R2 CU 16 und Microsoft Dynamics NAV 2015 CU 4 wurde ein weiteres Feature Namens “Report PDF Font Embedding” eingebaut.

Diese Feature finden Sie in der “Administration Konsole” als neuen Schalter.

image

Wird diese Option deaktiviert, so wird keine Schriftart in ein PDF Dokument gespeichert.

Das hat zur Folge und den Vorteil, dass ein PDF Dokument sehr klein wird im Gegensatz dazu, wenn Schriftarten mit in dem PDF Dokument gespeichert wird.

Nachteile ergeben sich, wenn ein PDF z.B. per E-Mail verschickt wird und auf einem Computer ausgeführt wird, wo die ursprünglich verwendete Schriftart nicht installiert ist. Dann wird eine Ersatzschriftart verwendet die evtl. das Satzbild verändert.

Diese Option bietet sich für Massenherstellungen und Archivierungen von PDF Dateien an.

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Entsperren von Dateien

$
0
0

Wenn Sie Dateien aus dem Internet herunterladen, bzw. Dateien von einem Netzwerklaufwerk auf einen Computer kopieren, so kann es sein, dass Windows diese Dateien als blockiert markiert.

Dies ist ein Windows Feature und betrifft Dateien die von nicht vertrauenswürdigen Quelle kopiert wurden.

Das kann zur Folge haben, dass wenn Sie ein Cumulatives Update auf einem Server / Computer kopieren wollen, wichtige DLL`s als gesperrt markiert werden, was wiederum zur Folge hat, das ggf.

der NST nicht gestartet werden kann oder Daten von NAV nicht an Excel gesendet werden können.

Hier ein kleines Beispiel an Hand einer Excel-Datei die ich aus dem Internet heruntergeladen habe.

image

Es gibt nun verschiedene Möglichkeiten die Datei zu entsprechen.

Die Erste und Einfachste wäre es den Button “Entsperren” zu verwenden. allerdings müssten Sie das mit jeder einzelnen Datei machen die gesperrt ist, da es hier nicht die Möglichkeit gibt mehrere Dateien oder Ordner zu markieren und zu entsperren.

Eine weitere Lösung wäre es eine Gruppenrichtlinien zu erstellen (User Configuration > Administrative Templates > Windows Components > Attachment Manager -Enable: Do not preserve zone information in file attachments)

Oder Sie verwenden Powershell um Dateien eines ganzen Verzeichnisses mit Unterverzeichnissen zu entsperren.

Hierfür müssen Sie nur die Windows  Powershell Konsole mit Administratoren Berechtigungen starten.

Mit dem folgenden Befehl würden Sie die Dateien und Dateien in den Unterverzeichnissen entsperren.

 Get-Childitem 'C:\Program Files\Microsoft Dynamics NAV\80\Service\*.*' -Recurse |Unblock-File

Offizielle Informationen zum Thema Unbock-File

Weitere Information zum Thema Get-Chiltitem - Verwenden des Cmdlet "Get-ChildItem"

 

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

STX Dateien – Microsoft Dynamics NAV 2015 CU 3

$
0
0

Durch die Microsoft Social Listening Implementierung (MSL) wurden die STX Dateien in dem CU 3 geändert.

Cumulative Update 3 for Microsoft Dynamics NAV 2015 (Build 39368)

Es wurde 00215-02770-200-0: SocialListening eingefügt.

Aus diesem Grund müssen Sie darauf achten, dass Sie die STX Dateien ebenfalls mit auf das zu aktualisierende System kopieren.

Ansonsten kann es sein, dass Sie folgenden Fehler erhalten:

Internal Error: 47-1

clip_image002


Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Probleme beim Download von Cumulative Updates

$
0
0

Uns erreichen immer mehr Meldungen, dass es Probleme gibt, Cumulative Updates herunterzuladen.

Falls Sie davon betroffen sind, bitte ich folgendes zu tun:

Löschen Sie alle Temporären Internet Dateien:

clip_image001

Danach sollte der Download wieder funktionieren.

 

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Elster Transferhandler - Änderungen bei den IP Adressen

$
0
0

Auf Grund von erneuten Umstrukturierungen beim Finanzamt zum Januar 2015 werden nur noch laut Entwicklerforum der Steuerbehörde zukünftig folgende Server für die Übermittlungen verwendet:

http://datenannahme1.elster.de/Elster2/EMS

http://datenannahme2.elster.de/Elster2/EMS

http://datenannahme3.elster.de/Elster2/EMS

http://datenannahme4.elster.de/Elster2/EMS

Hinter diesen Namen befinden sich folgende IP-Adressen für die Datenübertragung per Internet

ELSTER Empfangsserver IP-Adressen für Datenübermittlung:
==================
IP-Adresse:Port
62.157.211.58:443
62.157.211.59:443
80.157.84.22:443

Folgende IP Adressen bleiben bestehen:

---------------------------------------

http://62.157.211.58:80/Elster2/EMS

http://62.157.211.59:80/Elster2/EMS

Folgende IP Adressen fallen weg:
---------------------------------

http://193.109.238.26:80/Elster2/EMS

http://193.109.238.27:80/Elster2/EMS

Dies führt zu der Problematik, da die IP Adressen zurzeit per Zufall ausgewählt werden, dass verstärkt der Fehler 2200 „The response connection from the connected tax authority server could not be established. Check network connectivity or try again later.“ Auftritt. Durch mehrfaches wiederholen, sollte eine Übertragung dennoch möglich sein.

Somit ist eine Anpassung im Elster Transferhandler für Microsoft Dynamics NAV 2013, Microsoft Dynamics NAV 2013 R2 und Microsoft Dynamics NAV 2015 notwendig.

Diese können Sie auf Partnersource herunterladen: (sollten in den nächsten Tagen zur Verfügung stehen)

NAV 2013 CU 25
https://mbs2.microsoft.com/Knowledgebase/kbdisplay.aspx?WTNTZSMNWUKNTMMYVWQXNRNXTVKNSKYVYOYUXSYUQROLPXYQ

NAV 2013 R2 CU18
https://mbs2.microsoft.com/Knowledgebase/kbdisplay.aspx?WTNTZSMNWUKNTMMYZWLSWZQTLLRPPXLZYYQQUKOVXVUPZQNM

NAV 2015 CU 6

https://mbs2.microsoft.com/Knowledgebase/kbdisplay.aspx?WTNTZSMNWUKNTMMYNLOWUUPRYQYWXNMQYKKOKWRRXZOYMNUN

Installation des ElsterTransferHandlers für NAV 2013 und NAV 2013 R2:

Dafür ersetzen Sie bitte unter dem Pfad C:\Program Files (x86)\Microsoft Dynamics NAV\70\RoleTailored Client\Add-ins\Elster\" diese Datei:

- Microsoft.Dynamics.ElsterTransferHandler.dll

Wenn Sie danach mit der rechten Maustaste die Eigenschaften der Datei "Microsoft.Dynamics.ElsterTransferHandler.dll" öffnen, dann sollte die Dateiversion (File Version) "7.1.40452.0" lauten: (Dies ist z.B. für NAV 2013 R2)

clip_image002

Außerdem wurde für die Elster Funktionalität folgende Änderungen durchgeführt, damit in Zukunft solche IP Adressveränderungen vom Kunden selbst durchgeführt werden können.

Um die HTTP Server für ELSTER einzurichten, gehen Sie bitte wie folgt vor:

Abteilungen/Verwaltung/Anwendung Einrichtung/Finanzmanagement/Finanzen/Elektronische Umsatzsteuererklärung

Im FastTab „HTTP-Server“ füllen Sie bitte folgende URLs ein.

clip_image004

Feldwerte:

HTTP Server URL 1: http://datenannahme1.elster.de/Elster2/EMS

HTTP Server URL 2: http://datenannahme2.elster.de/Elster2/EMS

HTTP Server URL 3: http://datenannahme3.elster.de/Elster2/EMS

HTTP Server URL 4: http://datenannahme4.elster.de/Elster2/EMS

Installation des ElsterTransferHandlers für NAV 2015:

Gehen Sie hier genauso vor wie für NAV 2013, nur liegt der ElsterTransferHandler in folgendem Verzeichnis:
C:\Program Files \Microsoft Dynamics NAV\80\Service\Add-ins\Elster\

Für Microsoft Dynamics NAV 2009 SP1 wird es keine Anpassung seitens Microsoft geben, da sich das Produkt nicht mehr im Mainstream Support befindet.

Mit freundlichen Grüßen

Franziska Fiegler

Microsoft Dynamics Germany

Viewing all 165 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>