über DCM call Beleg verwerfen ohne User-Interaktion

Dieses Thema im Forum ".NET (sagede.* DLLs)" wurde erstellt von Arne Drews, 28. August 2019.

  1. Arne Drews

    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
     
  2. khk

    khk Neues Mitglied

    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
     
  3. Arne Drews

    Arne Drews Mitglied

    Habe ich eben erst gesehen, vielen Dank für die Meldung.
    Das werde ich mal durchgehen, danke
     

Diese Seite empfehlen