über DCM call Beleg verwerfen ohne User-Interaktion

Arne Drews

Mitglied
Hi,

Ist es irgendwie möglich, in einem DCMCallback die Anlage des Beleg zu verwerfen, ohne dass der User noch irgendwelche Aktionen bestätigen muss?

Der Hintergrund ist der, dass wir die Überlegung haben, bestimmte Aufgaben über die Beleganlage abzuwickeln. Die Belegarten wären eigens angelegt mit keinerlei Wirkung auf Umsatz, Gleichgewicht oder Bestand. In den DCMs können wir dann auf das Kennzeichen eingehen und ggfl. rausspringen, so dass kaum Performanceverlust auftreten dürfte.

Es soll also quasi über eine Beleganlage ein Callback getriggert werden, der bestimmte Aktionen ausführt.
Nach Verarbeitung soll der Beleg aber verworfen werden, damit wir uns die Vorgänge nicht mit dann unnötigen Belegen zumüllen.

Danke
 
Hi,

schade, dass man hier so selten eine Antwort erhält. Ich will versuchen zu helfen :)

in der DCM VKBelegProxyBeforeSave/EKBelegProxyBeforeSave/VKBelegBeforeSave/EKBelegBeforeSave kann das Speichern des Belegs verhindert werden. Hierzu habe ich ein Beispiel erstellt:
Code:
    public class DCMListener : IDcmCallback
    {
        public bool Entry(IDcmContext context)
        {
            try
            {
                switch (context.ListId)
                {
                    case DcmDefinitionManager.DcmListId.EKBelegProxyBeforeSave:
                    case DcmDefinitionManager.DcmListId.VKBelegProxyBeforeSave:
                        DiscardByProxyContext(context as DcmContextBelegProxyBeforeSave);
                        break;
                    case DcmDefinitionManager.DcmListId.EKBelegBeforeSave:
                    case DcmDefinitionManager.DcmListId.VKBelegBeforeSave:
                        DiscardByContext(context as DcmContextBelegBeforeSave);
                        break;
                }
                return true;
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.Message);
                return false;
            }
        }

        private void DiscardByContext(DcmContextBelegBeforeSave context)
        {
            context.DoNotSave = true;
            context.Message = "Der Beleg wurde verworfen.";
        }

        private void DiscardByProxyContext(DcmContextBelegProxyBeforeSave context)
        {
            context.Cancel = true;
            context.Errors.Add(new Sagede.OfficeLine.Shared.ApplicationStateInfoItem() { Description = "Der Beleg wurde verworfen." });
        }
    }

Die DCM muss noch im AppDesigner hinterlegt werden (bestenfalls danach AppServer-Dienst neustarten).

Trotzdem klingt die Vorgehensweise etwas hacky. Gibt es keinen anderen Weg?

LG
khk
 
Zurück
Oben