Hilfe beim Erstversuch eine Dll in Verbindung mit DCM zu nutzen

Ok, aber die Frage ist ja eigentlich, warum funktioniert denn das Ereignis aus dem AD nicht? Gibt es denn da noch Bugs?
Mir wäre ja die Variante über den AppDesigner die liebste weil es genau darum geht das darüber zu lösen.
Es gibt einen Thread im Forum der in etwa die Frage beantworten könnte:
http://www.sage-forum.de/threads/dcm.755/

Haben Sie versucht anstatt Breakpoint eine Meldung auszugeben im TraceLog oder EventLog.WriteEntry( ... um sicherzustellen dass das Ereignis anspringt?
 
Zuletzt bearbeitet:
Guten Morgen,

steht in Ihrem Projekt bei den Sage-Verweisen, lokale Kopie auf true?
Ich habe die Erfahrung gemacht, dass wenn man die dll's überschreibt, dann springt das Programm nicht mehr in die DCM.
 
Zuletzt bearbeitet:
Es wäre ja auch hilfreich, wenn Sage einmal eine Checkliste zum Debuggen mit Visual Studio veröffentlichen würde.
 
Mir ist es auch immer ein Rätsel gewesen warum DCM Ereignisse nicht debuggbar sind, weil einfach kein Braekpoint im Code angesprungen wurde, die pdb Version der DLL offenbar nicht aktiv wird.
Das passierte allerdings nur wenn ich DLL's erstellte die die Class DCMListener und IDcmCallbeck arbeiten.
Ich habe dann auch entsprechende TraceLog Einträge hinzugefügt um prüfen zu können ob die DCM überhaupt auslöst.
Ja es wurden TraceLog Einträge erstellt, damit ewar klar es liegt an Einstellungen!

Es liegt, wie Vitalij schon geschrieben hat, an der Einstellung in den Sage Verweisen.
Siehe Bild, an allen Sage verwiesen muss die Einstellung Lokale Kopie auf True stehen.
upload_2018-7-6_16-23-7.png
 
Hallo Reiner,

die lokale Kopie muss auf False stehen. Man sollte keine Sage DLL's überschreiben. Ebenfalls ist zu beachten, dass manche DCM's auf dem Server und manche auf dem Client ausgeführt werden, also beim Debuggen an ApplicationServer sowie MSAccess anhängen.
 
Jetzt bin ich ja wieder am Anfang,
wenn ich die Einstellung auf False habe dann spingt er auf keinen Fall in den Code?
Auch nicht wenn ich mich an Access anhänge!
Ich verstehe den Kram nicht ;-(.
Gruß Reiner
 
Hallo Reiner,

versuch doch mal folgendes. Setze eine frische VM auf. Erstelle einen DCM-Listener aus einer Sage-Vorlage für Visual Studio, da ist alles bereits richtig eingestellt. Erstelle ein Ereignis für die gewünschte DCM über den AppDesigner (das funktioniert prima). Erstelle dein Projekt, starte den Applicationserver neu (Wichtig!). Hänge dich an den Applicationserver und an MSAccess an. Wenn die Konfiguration des Applicationservers nicht auf AppDomain umgestellt ist, dann musst du dich an die Applicationserver-exe sowie an alle Isolation-Prozesse anhängen (kannst alle auf einmal markieren und bestätigen).

upload_2018-7-11_8-32-28.png

Das muss so gehen, ist bereits hundertfach erprobt :)
 
Vielen Dank Vitalij.

Meine Projekte habe ich immer aus den Vorlagen von Sage erstellt.
Ich habe die "lokale Kopie" jetzt noch einmal auf "false" umgestellt.
Die ApplikationServer Config Dateien noch einmal manipuliert.
(Ich war zwar der Meinung ich hätte das schon einmal getan.)
Und es hat tatsächlich geklappt, wenn ich mich an Access und an Applikationserver Prozesse anhänge.

Gruß Reiner
 
Hallo,

ich nutze zur Zeit eine etwas andere Methode zum Debuggen, die funktioniert aber ziemlich gut.
Und zwar verwende ich die Preprocessorfunktionen und den Visual Studio Debugger.

Beim Einsprung meiner DLL füge ich folgendes ein:

Code:
#if DEBUG
            System.Diagnostics.Debugger.Launch();
#endif

Damit muss ich mich an keinen Prozess mehr anhängen oder die AppServer Config anpassen etc.
Das Dingen greift immer. Einziger Nachteil den ich bisher gefunden habe, man muss daran denken das Debuggen wieder zu beenden :)
 
Das wäre eine schöne Möglichkeit nicht bei jedem Debuggen die Prozesse raussuchen zu müssen.
Habe ich aber in VB.Net nicht hinbekommen.

Welche Stelle genau solldas denn sein?
** Beim Einsprung meiner DLL füge ich folgendes ein: **

Gruß Reiner
 
Das kann nun sein dass es c# spezifisch ist....

Aber mein DCM Listener sieht so aus

Code:
    public class DcmMain : IDcmCallback
    {
        public Boolean Entry(IDcmContext context)
        {
#if DEBUG
            System.Diagnostics.Debugger.Launch();
#endif

            try
            {
                TraceLog.LogVerbose("DCM CRMSol.OL.IRS.AudatexImport.DCM ausgeführt - Beginn");
                switch (context.ListId)
                {
                    case DcmDefinitionManager.DcmListId.VKBelegSave:
                        //TODO Code einfügen
                        break;
                }
                TraceLog.LogVerbose("DCM CRMSol.OL.xxx.yyy.DCM ausgeführt - Ende");
                return true;
            }
            catch (Exception ex)
            {
                TraceLog.LogException($"Fehler in DCM Einsprung {Enum.GetName(typeof(DcmDefinitionManager.DcmListId), context.ListId)} in Projekt CRMSol.OL.xxx.yyy.DCM", ex);
                return false;
            }
        }
    }
 
Ja, schein C# spezifisch zu sein.
Mir ist es nicht gelungen etwas für VB.Net zu googeln oder durch Versuch zu implementieren.
Schade ;-(.
Gruß Reiner
 
Hallo, das mit dem JIT Debugger klappt prima, allerdings nicht mit VS2015?
Das witzige ist, ich habe die Versionen 2010, 2012 und 2015 auf dem Rechner, ich werde auch brav gefragt mit welcher Version ich debuggen möchte, aber es gehen leider nur 2010 und 2012. Mit dem ich möchte 2015, geht es leider nicht.
upload_2018-8-6_16-1-5.png
Wo kann man das denn nun wieder einstellen?
Gruß Reiner
 
Zurück
Oben