comporsys Logo

Bodo's Dynamics NAV Blog

Bodo ist ein Dynamics NAV Urgestein. Er programmiert NAV seit DOS Zeiten und hat auch keine Scheu vor .NET. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu NAV Entwicklern ausgebildet.

In diesem Blog veröffentlicht Bodo monatlich technische Kabinettstückchen aus der Welt von Dynamics NAV und .NET.

NAV 2009 – Interner Fehler 12 in Modul 40

Eintrag von Bodo am Sonntag, 19. Juni 2011

Tags: , ,

Am Sonntagvormittag befasste ich mich mit einer doch gefühlt einfachen Aufgabe: Zu ermitteln, welche Benutzer Mitglied einer Active Directory Gruppe sind, kann nicht schwierig sein. Dynamics NAV kennt dafür eine virtuelle Tabelle „Windows Group Member“ (2000000052). Erstellen Sie ein Formular für diese Tabelle und Sie können sich die Mitglieder einer Gruppe anzeigen lassen:

Wenn Sie auf Basis dieser Tabelle eine List-Page für den Role Tailored Client erstellen und diese starten, bekommen Sie die Fehlermeldung „Interner Fehler 12 in Modul 40“:

Das Problem ist gar nicht so sehr die Page, wie weitere Tests gezeigt haben, sondern die Tatsache, dass Sie über den Role Tailored Client zwar ein Rec.FIND (Rec.FINDFIRST, Rec.FINDLAST oder Rec.FINDSET) auf diese Tabelle ausführen können, aber ein Rec.NEXT die Fehlermeldung auslöst. Und der Rec.FIND funktioniert auch nur dann, wenn kein Filter gesetzt ist. Weitere virtuelle Tabellen wie z.B. „Windows Object“ (2000000050) sind ebenfalls von diesem Fehler betroffen.

Eingeleitete Sofortmaßnahmen:

  • Eine Aktualisierung auf den letzten Hotfix für Dynamics NAV 2009 R2 (Build 32441) hat keine Besserung gebracht.
  • Sich an den Systemadministrator zu wenden, wie in der Fehlermeldung empfohlen, wird wohl auch keine Hilfe bringen.

Und so langsam dämmert es mir, dass die Lösung der vermeintlich einfachen Aufgabe, die Mitglieder einer Active Directory Gruppe anzuzeigen, wohl doch mehr Zeit als nur den Vormittag in Anspruch nehmen wird.

Wie sieht die Lösung aus? Der Zugriff auf einen Verzeichnisdienst wie Active Directory erfolgt über LDAP (Lightweight Directory Access Protocol). Eine sehr gute Einführung in dieses Thema finden Sie hier: http://www.selfadsi.de. Auf weitere Erläuterungen zu LDAP verzichte ich daher. Die Idee ist also, eine .NET Assembly zu erfinden, die den Zugriff auf das Active Directory über LDAP implementiert und uns die benötigten Daten liefert, um die Tabelle „Windows Group Member“ zu füllen, zumindest temporär. Den ganzen Quellcode möchte ich hier aus Platzgründen nicht abdrucken. Das vollständige Visual Studio 2008 Projekt finden Sie daher hier zum Download.

Bitte denken Sie daran, für die Installation der .NET Assembly die Datei „Comporsys.LdapSearch.dll“ sowohl in das „Add-Ins“ Verzeichnis des Classic Clients als auch des Servers zu kopieren.

Mit den Klassen der .NET Assembly können Sie anschließend die folgende List-Page 50503 aufbauen. Die Funktion „Fill()“ füllt dabei die virtuelle Tabelle „Windows Group Member“, die wir temporär für diese Page verwenden.

Starten Sie die Page und Sie erhalten das gewünschte Ergebnis:

Für die Leser, die sich fragen sollten, wozu ich diese Funktionalität überhaupt benötige: Fortsetzung folgt in meinem nächsten Artikel.

 


Dynamics NAV Lizenzen online bestellen Mitglied der Dynamics NAV Community

Microsoft Dynamics NAV community

Live-Support

Sie haben Fragen oder Wünsche?
Wählen Sie 04103 121170 oder chatten Sie mit uns.

Newsletter-Service

Melden Sie sich zu unserem Newsletter an und bleiben Sie auf dem neuesten Stand.