IMessageFilter Implementierung

30. Juli 2015 11:04

Hallo,

ich möchte, auch wenn ich mir dessen bewusst bin, dass die Ausführung von MS Office auf dem NAV Server keine gute Idee ist (siehe hier: https://msdn.microsoft.com/de-de/library/ee909565.aspx#STA_MTA_Objects), mithilfe einer Job Queue auf dem NAV Server Word Dokumente erstellen und im Anschluss drucken.

Der Aufruf erfolgt, da .NET Objekte im Spiel sind, über einen Webservice. Nachdem ich nun alle "No Callback allowed"-Fehler beseitigen konnte und die Ausführung von COM-Objekten für den NAV-Service auf dem Server generell erlaubt habe, stoße ich nun auf einen neuen Fehler.
Code:
This message is for C/AL programmers: The call to member Documents failed: The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)).


Hier ein Ausschnitt aus dem Code an der Stelle, wo der Fehler auftritt:
Code:
wrdDocuments := wrdApp.Documents;
wrdDoc := wrdDocuments.Open(FileName,ParamFalse,ReadOnly);


Meine Suche brachte mich ziemlich schnell zu dieser MS Seite https://msdn.microsoft.com/en-us/library/ms228772.aspx auf der beschrieben ist, wie man auf COM-Objekte wartet, die gerade "beschäftigt" sind. Wie kann ich die dort vorgestellte Lösung für Navision umsetzen? Mir fehlt irgendwie die zündende Idee.

Grüße,
Felix

Re: IMessageFilter Implementierung

3. August 2015 08:44

Hallo,

ich habe nun festgestellt, dass es in NAV2015 eine MS Office Word Helper Class für DotNet gibt. Hierfür existiert auch eine entsprechende DLL: Microsoft.Dynamics.Nav.Integration.Office.dll
Das würde mein IMessageFilter-Problem beheben, da dieser Helper automatisch das Marshalling der STA in der MTA-Umgebung zu übernehmen scheint. (Kurz: Mein COM-Objekt-Problem ist unter NAV2015 kein Problem mehr o_O)

In der NAV2009 R2 Umgebung kann ich die jedeoch nirgends finden.
Ist es möglich die DLL zu kopieren, damit ich die dann mit NAV2009 R2 nutzen kann (sowohl CC zum kompilieren, als auch RTC zum benutzen)? Oder hat jemand eine Idee, in welcher DotNet Version diese DLL steckt? Eine saubere Installation wäre mir lieber als ein stumpfes hin- und herkopieren.

Ich freue mich schon auf eure Antworten.

Viele Grüße,
Felix