Laden...

Profil von wakestar

myCSharp.de - Member Mitglied seit
wakestar
myCSharp.de - Member
33
Themen
383
Beiträge
Dabei seit
15.11.2006
Letzte Aktivität
vor 9 Jahren
Alter
46 Jahre
Beruf
Software-Entwickler
Herkunft
Luzern
Interessen
zu viele
Erstellt vor 11 Jahren

Hallo zusammen

Ich hab' ein Control Add-in für Dynamics NAV 2013 (Navision) erstellt, mit dem man direkt im NAV den Dateiinhalt (z.Bsp. PDF, Doc, XLS, etc...) sehen kann.

.NET resp. Winforms - Technisch handelt es sich um ein Control welches ein Panel hat. Auf diesem Panel sitzt ein PreviewHandlerHostControl

Das UserControl funktioniert grundsätzlich... d.h. wenn ich z.Bsp. eine Word-Datei auswähle... startet im Hintergrund autom. ein Winword-Prozess.
Wähle ich dann eine PDF - Datei aus, wird der Winword-Prozess sauber beendet und der PDF-Viewer-Prozess gestartet.

Das Problem:
Wenn ich die Dynamics NAV Page (Form) schliesse und ich eine Word-Datei in der Vorschau habe, dann bleibt mir der Winword - Prozess einfach hängen.
Ich bin nicht der Erste der dieses "Phänomen" hat...
Hosting Preview Handlers in Windows Forms Applications

Lösungvorschlag 1 aus den Blog-Kommentaren:

"I seem to have solved this problem by disposing the previewhandler in the “closing” event of the form –"

Was ich auch versucht habe... leider ohen Erfolg...


void Page_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (previewHandlerHostControl != null)
            {
                previewHandlerHostControl.ReleaseCOMObject();
                previewHandlerHostControl.Dispose();
                previewHandlerHostControl = null;                
            }
        }

public void ReleaseCOMObject()        
        {                     
            if (_comInstance != null)
            {                
                ((IPreviewHandler)_comInstance).Unload();             
                Marshal.FinalReleaseComObject(_comInstance); //quits the handler
                _comInstance = null;
            }            
        }

Testhalber hab ich ein neues WinForm - Projekt erstellt, welches NICHTS mit Dynamics NAV zu tun hat... und siehe da... beim Beenden des Forms bleibt der Winword-Prozess NICHT hängen:


private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (previewHandlerHostControl != null)
            {
                previewHandlerHostControl.ReleaseCOMObject();
            }
        }

D.h. hat das Problem mit dem FormClosing-Event innerhalb der NAV - Applikation zu tun. (??)

Lösungvorschlag 2 aus den Blog-Kommentaren:

"Since altering my application to close down the Preview and then wait before calling PostQuitMessage(), the problem appears to have been completely resolved. I have really hammered it and so far the issue has not resurfaced, fingers-crossed."

Hat jemand eine Idee wie das mit C# umgesetzt werden kann?

Oder sonst eine Idee wie man das Problem lösen könnte?

Erstellt vor 12 Jahren

Super, danke Euch beiden.

gruss
wakestar

Erstellt vor 12 Jahren

Hallo Community

Folgenden VB6 Code versuche ich nach C# zu übernehmen:

Public Declare Function BC_FontTranslate Lib "BCXL32.dll" (ByVal nSymtype As Long, ByVal sHRA As String, ByVal nCheckFlag As Long, ByVal sOutString As String, ByVal nAllocSize As Long, nReturnSize As Long) As Long

Ich hab's wie folgt versucht:


[DllImport("BCXL32.dll")]
public static extern int BC_FontTranslate(int nSymtype, string sHRA, int nCheckFlag, string sOutString, int nAllocSize, ref int nReturnSize);

Das Problem ist dass die Variable sOutString leer ist nachdem die Funktion aufgerufen wurde. Wenn ich die sOutString Variable mit "ref" definiere, erhalte ich eine AccessViolationException.

Die Dokumentation zur DLL meint folgendes:

FUNCTION: BC_FontTranslate()
....
'// PARAMETERS :
'// sOutstring (OUTPUT, String) - Storage string for the translated output. This string
'// must be pre-allocated memory by the calling routine.
....

...was mich verwirrt, da ja der alte VB6 code funktioniert und dort ByVal verwendet wird.

Tipps??

Gruss
wakestar

Erstellt vor 12 Jahren

...oder FileSeek...

http://www.fileseek.ca/Compare/

damit hab' ich bisher sehr gute Erfahrungen gemacht.

Erstellt vor 12 Jahren

Hallo herbivore

Absolut richtig. Anhand von Debugging sehe ich schon welche Registry-Keys er sucht um sich die Preview Handler zu holen und ich sehe auch wo er rausfliegt. Damit weiss ich aber leider nicht wie ich den PreviewHandler für die Bilder finde.

Interessanterweise hab' ich bisher versch. C# -Beispiele mir angeschaut und ausprobiert und das mit den Bildern funktioniert in keinem der Beispiele.

Interessant wäre d.h. zu wissen, wie es der Windows Explorer macht.
Ich schätze mal die meisten sparen sich aber diesen Analyse-Aufwand und greifen zur PictureBox oder ähnlichem....

gruss
wakestar

Erstellt vor 12 Jahren

Hallo zusammen

Ich bin zurzeit dran, eine Dateivorschau für die eigene Applikation zu erstellen.
Als Basis hab' ich das c4fDevKit (Preview Handlers) genommen:
http://c4fdevkit.codeplex.com/SourceControl/latest

Grundsätzlich funktioniert die Dateivorschau.
Ein Problem hab' ich aber bei den Bildern wie z.Bsp. Jpeg.
Offenbar wird kein Preview Handler gefunden. - Wieso ist mir aber nicht klar.

Die Bildvorschau im Windows Explorer funktioniert richtig. (Windows 7)

Auch das Installieren der Fotogallerie (Photo Gallery) hat nichts genützt.

Mir ist bewusst dass ich die Bilder auch ohne diese c4f Komponente anzeigen kann,
jedoch geht es mir mehr ums Versändnis für die PreviewHandler.

Hat jemand eine Idee?

gruss
wakestar

Erstellt vor 12 Jahren

Hallo trib

Es freut mich zu hören, dass Du das Ganze nicht so problematisch siehst.

weshalb ist das RDLC Reporting für Belege eine Krücke?

wenn ich mich in den Navision - Foren und Blogs durchklicke, dann hab' ich den Eindruck dass man zwar das Meiste was man vorher schon mit den Classic Reports konnte auch mit RDLC hinkriegt... jedoch hat die RDLC Lösung meistens den Stempel "Workaround", "Hack" oder "Würg"... d.h. man frickelt sich was zusammen... hauptsache es funktioniert irgendwie. Und dann hoffen dass man es nie wieder anfassen muss.

Beispiele:

NAV2013: Reporting: Does (not) support fields in Header and Footers

Transfooter and Transheader warning

In Zusammenhang mit "Datenvolumen":
OutOfMemoryException when printing an RDLC report

Nun, so wie ich das sehe führt trotzdem kein Weg daran vorbei. Selber etwas bauen mit irgendwelchen OpenSource-Komponenten ist vermutlich auch nicht die bessere Lösung.

Erstellt vor 12 Jahren

Hallo Community

Diese Frage ist an Navision oder .NET-Entwickler mit RDLC - Erfahrung gerichtet:

Seit NAV2013 gibt es je bekanntlich keine "Classic" - Reports mehr und neu muss man sich mit RDLC Reports herumschlagen.

Für Auswertungen / Listen usw. mag das ja alles OK sein...
aber wenn man Belege à la Offerte, Auftragsbestätigung, Rechnung erstellen / anpassen möchte, dann ist das Ganze.. harmlos ausgedrückt... eine KRÜCKE. 🙄

Wie seht Ihr das? Was gibts für Alternativen? Wie handhabt ihr das? Tipps ???

gruss
wakestar

Erstellt vor 14 Jahren

warum kompliziert wenns auch einfach geht!?

danke!!

Erstellt vor 14 Jahren

Hallo zusammen

Eigentlich eine einfache Aufgabe...

Via "Start / Ausführen" kann mit folgendem Befehl:
"DynamicsNAV:////runreport?report=3031205&filter=Contact.%22No.%22:11546"
eine externe Anwendung (hier Microsoft Dynamics NAV) gestartet / gesteuert werden.

Windows weiss anhand der Registry, wo die DynamicsNAV - Exe Datei liegt...

Nun würde ich gerne genau das gleiche mit C# ausführen
Ich hab' jetzt schon dutzende Varianten ausprobiert...

ProcessStartInfo mit "cmd" , "explorer", "DynamicsNAV" gefüttert....hat nicht geklappt... mit unterschiedlichen Fehlermeldungen.

Wie macht man's richtig? Im Netz finde ich tausende Beispiele ... aber genau den Fall, dass quasi via "URL" eine Anwendung gestartet werden muss finde ich nicht.

wakestar