Lagerplatzbuchung per DCM überwachen

Arne Drews

Mitglied
Moin,

Ich möchte per DCM bestimmte Lagerplatzbuchungen überwachen und protokollieren.
Meine Versuche beliefen sich bisher auf die Ereignisse
  • LagerplatzBuchungBeforeSave
  • LagerplatzBuchungSave
In beiden Fällen scheint er die DCM gar nicht auszuführen.
Mein letzter Stand sollte testweise nur einen Eintrag ins Memo-Feld machen:
Code:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sagede.OfficeLine.Shared.Customizing;
using Sagede.OfficeLine.Wawi.LagerEngine;

namespace Voss.Dcm.Lagerbuchungen
{
    public class TransferProtocol : IDcmCallback
    {

        public bool Entry(IDcmContext context)
        {
            //DcmContextBeforeLagerbuchung _context = context as DcmContextBeforeLagerbuchung;
            DcmContextLagerbuchung _context = context as DcmContextLagerbuchung;

            _context.LagerplatzBuchung.Memo = "foobar";
            return true;
        }
    }
}
Die DLL habe ich ins Shared Verzeichnis gelegt und im AppDesigner das Ereignis korrekt hinzugefügt und anschließend den ApplicationServer Dienst neu gestartet.

Ich kann mir aktuell nicht erklären, warum er hier scheinbar nicht reagiert?!

Danke für Hinweise
Schöne Grüße
Arne
 
Ich habe ein Befürchtung. Die Umbuchung erfolgt bei uns noch über das alte Formular, wir stehen aktuell noch bei der 8.0. Kann es sein, dass die Ereignisse dann gar nicht getriggert werden?
 
Die DCM wird auch in der 8.0 mit dem alten Formular aufgerufen (das Formular hat sich auch in der 9.0 noch nicht geändert).
Wenn Du, wie in Deinem Beispiel, per DCM das Memo füllen möchtest, musst Du dazu die DCM "LagerplatzBuchungBeforeSave" verwenden.
Die DLL wird clientseitig aufgerufen.

Code:
public bool Entry(IDcmContext context)
{
    try
    {
        switch (context.ListId)
        {
            case DcmDefinitionManager.DcmListId.LagerplatzBuchungBeforeSave:
                DcmContextBeforeLagerbuchung contextBeforeLagerbuchung = (Sagede.OfficeLine.Wawi.LagerEngine.DcmContextBeforeLagerbuchung)context;
                contextBeforeLagerbuchung.LagerplatzBuchung.Memo = "foobar";
                break;

            default:
                break;
        }
        return true;
    }
    catch (Exception)
    {
        return false;
        throw;
    }
}

In der Oberfläche ist das Memo der Buchung jedoch gar nicht zu sehen. Vielleicht hat es ja mit dem ersten Ansatz bereits funktioniert?!
 
Danke für Deine Antwort und das Beispiel.

Nein, das Memo habe ich mir natürlich in der Tabelle KHKLagerplatzbuchungen direkt angesehen, das war immer NULL.
Ich hatte ja zuerst auch LagerplatzBuchungBeforeSave, ist in meinem Eingangspost auch noch auskommentiert drin.

Leider wird nichts eingetragen.
 
Huch... Das ist interessant, werde Dein Beispiel gleich mal 1:1 kopieren und schauen, was dann passiert. Vielleicht mahce ich ja woanders einen Fehler.

Danke, ich melde mich gleich wieder.
 
Hmmm... Es wird für mich nicht schlüssiger.

Hast Du das wirklich über das Formular Lagerbewegung bearbeiten gemacht?
Denn so wie es für mich aussieht, funktioniert das tatsächlich nur für die Lagerbewegungsarten, die als IstManuell = 0 gekennzeichnet sind. Bei Belegbuchungen passt alles, da gebe ich Dir recht, es soll ja aber bei den Buchungen greifen, die man über das Formular manuell anlegt.
 
Ja, habe ich. Manuelle Zubuchung über "Lagerbewegungen bearbeiten".
Ist Deine Entwicklungsumgebung ein Einzelplatzsystem?
 
Hast Du die DLL auch in das Shared-Verzeichnis vom TS kopiert oder nur auf den Anwendungsserver?
 
Nur auf den ApplicationServer, habe ich bei BelegDCMs auch nur so gemacht, meine ich.
Müssen die im TS auch rein?
 
Sichi :)
Um ganz genau zu sein habe ich sogar die WaWi neu gestartet.
Muss ich bei der Registrierung noch was beachten? So sieht das bei mir aus
upload_2021-1-28_17-10-59.png
 
Bei der Registrierung musst Du nichts weiter beachten, solange die richtige Klasse ausgewählt ist (oben heißt die Klasse noch "TransferProtocol"?!).
Und bei der Erzeugung der Lagerbuchungen über die Belege läuft es?
 
Grundsätzlich lag es dann daran, dass die DLL nicht auf dem Client vorhanden war. Warum es jetzt trotzdem nicht funktioniert, kann ich nicht sagen.
Sind noch weitere Benutzer angemeldet? Eventuell greift die DCM erst, nachdem alle Benutzer auf dem TS abgemeldet sind oder die DCM ist auf dem Client noch unter dem alten Namen registriert (Cache)?!
Vielleicht müssen nach dem Einfügen der DLL noch andere Sage-Dienste neu gestartet werden (z.B. der Verteilungsdienst)?
Vielleicht die DLL mal in der Lösung hinzufügen (mit Installationsziel "Client und Server")?!
 
Ah ok, ja natürlich sind noch weitere Benutzer angemeldet. Ich hau sie nachher mal alle weg und starte auch weitere Dienste neu, mal schauen, was dann kommt.

Danke für Deine Mühen und Hinweise.
Ich melde mich mit Feedback.
;)
 
DURCHBRUCH!!! :D

Herzlichen dank für Deine Geduld, es funktioniert jetzt einwandfrei!
Es hat vermutlich an den angemeldeten Benutzern gelegen, wie Du schon vermutet hast. Nachdem ich alle rausgeschmissen hatte, ging zwar immer noch nichts, aber dann habe ich halt die Ärmel hochgekrempelt und alle TS einmal komplett neu durchgestartet.

Danach hat es auf Anhieb funktioniert und Script-Änderungen werden nach Neustart des Dienstes direkt übernommen.

Danke!
:)
 
Zurück
Oben