DCM

Hallo allerseits,
wie kann ich eine MessageBox oder eine zuvor erstellte Meldung in der Oberfäche (Client) anzeigen?

public class DCMListener : IDcmCallback
{
public bool Entry(IDcmContext context)
{
switch (context.ListId)
{
case DcmDefinitionManager.DcmListId.XXXX:
var result = Show as MessageBox
 
Die Klassische MessageBox ist aus der sage 100 entfernt.
Dies liegt einfach daran, dass die DCM's in der Regel auf dem Applikationserver selber ausgeführt werden und nicht mehr auf dem Client!.

Per DCM kann man nur noch über den "Meldungsstack" der einzelnen Masken gehen und dort Meldungen einbauen. Alternativ, kann man auch per Makro Meldungen am Client ausgeben.
 
Mit Meldungsstack ist so etwas gemeint?
((DcmContextEngine2)context).Errors.Add(new ApplicationStateInfoItem(ApplicationStateSeverity.Warning) { Description = description });

So wird eine Meldung unten angezeigt aber keine Meldung mit ein Rückgabe Wert. Per Makro ist es viel zu umständlich, das würde heißen aus der Makro die DLL Funtkion aufrufen Meldung ausgeben dann die nächste Funktion aufrufen usw.

Dann macht die DCM kein Sinn.
 
Ja der Error ist damit gemeint.

Es kommt drauf an was Sie machen möchten.
Per Makro könnten Sie auch eine Clientseitige DLL Aufrufen und dort dann auch eine MessageBox ausgeben.
 
Ich möchte in
...
case DcmDefinitionManager.DcmListId.VKBelegPositionProxyAddArtikelposition:
Etwas berechnen und den User Fragen was gemacht werden soll.
Dementsprechen weiter machen.
 
Verstehe ich das richtig dass ich per DCM zwar die Möglichkeit habe dem Client eine Meldung anzuzeigen aber keine Möglichkeit eine Antwort zu bekommen?
 
Und da kommt genau das Problem, diese DCM wird serverseitig ausgeführt und lässt keine Interaktion mit dem Client / User mehr zu.

So spontan fällt mir da nur ein, Makro. Dann in eine DLL rein, Rückgabe aus DLL ans Makro auswerten und die Meldung werfen. Result der Meldung im Makro auswerten und ggf. wieder in eine DLL rein.
 
Die Meldungen per DCM sind eigentlich nur Validierungsmeldungen oder Hinweismeldungen aber keine interaktiven mit Logik.
 
Nur noch 3 (hoffentlich letzte Fragen).
1. Wozu dienen folgende Methoden:
IClientCallBack.SendMessage(..., IClientCallBack.ShowMessage..
Sagede.OfficeLine.Wawi.Basic.DoMessageBox(...
2. Kann ich in eine von MacroProcessBase abgeleitete Klasse eine Meldung ausgeben? Diese werden eigentlich von Makros aufgerufen.
3. Kann ich ein Makro ohne den AppDesigner erstellen bzw. aufrufen?
Und fertig. :)
 
1. Kann ich leider nicht beantworten, da ich die auch noch nicht gefunden / benutzt habe.
2. Ja das kann man machen, vorausgesetzt der Aufruf erfolgt auf dem Client, da gibt es einen MakroParameter IsRunningOnServer oder so ähnlich. Wenn der False ist klappt das mit der DLL :)
Hier gibt es aber noch eine Brück die grausamer ist als Ihr Screenshot. Wenn der Makroaufruf nur auf dem Server läuft, können Sie folgendes machen:
Sie hängen sich an das Kontextmenü an und legen dort eine unsichtbare Menüfunktion ab, die dann in eine DLL geh. Die Menüaufrufe sind immer Clientbezogen. Und im Makro rufen Sie die Kontextmenüfunktion auf o_O:rolleyes::D:D
3. Das ist einfach... Nein.
 
Die Idee mit dem Kontextmenü ist mir auch durch den Kopf gegangen, aber so zufrieden war ich damit nicht.
Also doch ACCESS Addin (VB yay :$), da hat man wenigstens gnMessage. Naja, ich dachte Sage will weg von ACCESS aber das wird noch etwas dauern anscheinend. Vielen Dank für die Antworten, haben mir sehr geholfen.
 
Zuletzt bearbeitet:
Ja noch funktioniert der VBA Aufruf bzw. gbAddInRun oder wie das Dingen da im AppDesigner heisst. sage hat diesen Aufruf aber auch schon "abgekündigt" ;)
 
Wie gesagt, noch ist der Aufruf drinnen und der wird solange drinnen bleiben wie es Access gibt.

Vielleicht wird es dann irgendwann eine andere Lösung dafür geben oder vielleicht soll der Benutzer auch nicht mehr gefragt werden :cool:
 
Also nach dem Motto Meldung: "Möchten Sie den Kunden wirklich löchen? Spielt keine Rolle was Sie möchten da Sie sowieso nicht auf die Frage antworten können " :D :D :D
 
Dies liegt einfach daran, dass die DCM's in der Regel auf dem Applikationserver selber ausgeführt werden und nicht mehr auf dem Client!..

Ich dachte, dass nur die DCMs mit *Proxy* auf dem Server ausgeführt werden. Alle anderen auf den Clients.

die, die im AppDesigner registriert sind werden auf dem Server ausgeführt.

Richtig?
 
Nein nicht ganz.
Im AppDesigner können alle DCMs registriert werden. Die OL.DCM gibt es eigentlich nicht mehr, da der AppDesigner keine die DCM's nicht in die OL.DCM schreibt, sondern in eine MetadatenDatei ;)
Leider ist es nicht ganz klar, welche DCM auf dem Client und welche auf dem Server ausgeführt werden und welche auf beiden ausgeführt werden.
Generell gibt es tatsächlich alle DCM's doppelt, einmal mit und einmal ohne Proxy. Normalerweise sollte es so sein, dass die "normalen" ausgeführt werden, wenn die alte / klassischen Masken aktiv sind und die Proxy bei den neuen Masken.
Wie gesagt, teilweise werden beide ausgeführt und keiner weiss wann und warum...
 
Zurück
Oben