Skip to main content

Notifications

Announcements

No record found.

Dynamics 365 Community / Blogs / Bodo's Dynamics NAV Blog / NAV 2009 – Interner Fehler ...

NAV 2009 – Interner Fehler 12 in Modul 40

Community Member Profile Picture Community Member Microsoft Employee

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.

 

Comments

*This post is locked for comments