[gelöst] Ereignis canceln

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Ereignis canceln

Re: [gelöst] Ereignis canceln

von komma4 » Sa, 14.04.2012 06:15

JannieV hat geschrieben:allerdings in Base.
Willkommen im Forum.
Mach' dann dazu bitte einen eigenen Thread auf (mit aussagekräftigen Titel!).

Beschreibe bitte, welche Aktion Du wann und wie abbrechen willst, welche OOo Version, Betriebssystem und Datenbank Du verwendest.

Re: [gelöst] Ereignis canceln

von JannieV » Fr, 13.04.2012 20:18

Nun (3 Jahre später) stehe ich vor demgleichen Problem, allerdings in Base. Aber die Lösung habe ich nicht verstanden, wo wird nun was verankert?

In der Datensatzaktion des Formulars "Löschen bestätigen"?
Was kommt dahin für ein Makro? Ich muss ja irgendwo das Ja/Nein über eine MsgBox abfragen.

Und wie kommt dann der Listener in Aktion?

Wäre toll, wenn mir da jemand weiterhelfen könnte, denn die OO-Hilfe ist in diesem Fall ja ein zweizeiliger Witz :-)


Danke schon mal ...

Re: [gelöst] Ereignis canceln

von Christiana » Mi, 09.09.2009 08:39

Hallo Martin,

natürlich ist das Löschen eine Standard-Funktion und wenn mir die dazugehörige Standard-Nachricht ausreicht, kann ich auch ohne Probleme das Löschen abbrechen. Nur mir reichte an dieser Stelle diese Standard-Nachricht nicht aus und sobald ich wahrscheinlich in diesen Prozess eingreife, bin ich für alles andere selbst verantwortlich. Über eine elegantere, kürzere Lösung würde ich mich natürlich auch sehr freuen. Aber zum damaligen Zeitpunkt ist offenbar niemand etwas Besseres eingefallen und mit dem Listener erreichte ich das gewünschte Ergebnis.

Christiana

Re: [gelöst] Ereignis canceln

von mhonline » Di, 08.09.2009 23:50

hm, das kann nicht sein, Aktionen müssen sich doch auch anders - ohne diesen Sermon - abbrechen lassen,
Das LÖSCHEN ist doch eine Standard-Funktion, da muß es doch ein OO.O-Standard-Makro geben: "machdasnicht"
(früher zB gab es mal ESC-Tasten auf der Tastatur)

Martin

[gelöst] Ereignis canceln

von Christiana » Fr, 15.05.2009 14:50

Heureka!

Plötzlich hatte ich das Gefühl, dass dieses Problem mit einem Listener zu lösen wäre.
Es hat ein Weilchen gedauert, weil ich mich noch nie mit Listenern beschäftigt hatte.
Doch nun klappt es und die Freude ist umso größer.

Für alle, die irgendwann einmal vor einem ähnlichen Problem stehen, hier meine Lösung.

Code: Alles auswählen

Global  oDeleteListener

Sub AddConfirmDeleteListener
	oDeleteListener = CreateUnoListener("DeleteListener_", "com.sun.star.form.XConfirmDeleteListener")
        oDoc   = thisComponent 
        oSheet = oDoc.sheets.getByName("Altbestand")
        oDraw  = oSheet.drawpage
   	oForm  = oDraw.Forms.getByName("MainForm")
   	oDocCtl = oDoc.getCurrentController()
   	oFormCtl = oDocCtl.getFormController(oForm)   	
   	oFormCtl.addConfirmDeleteListener(oDeleteListener)
End Sub

Sub RemoveListener	
	oDoc   = thisComponent 
        oSheet = oDoc.sheets.getByName("Altbestand")
        oDraw  = oSheet.drawpage
   	oForm  = oDraw.Forms.getByName("MainForm")
   	oDocCtl = oDoc.getCurrentController()
	oFormCtl = oDocCtl.getFormController(oForm)
   	On Error Resume Next
   	oFormCtl.removeConfirmDeleteListener(oDeleteListener)
   	On Error GoTo 0
End Sub

Function DeleteListener_confirmDelete(oEvent)
	Dim i 	 as Integer
	Dim sText  as String
	Dim iTyp    as Integer
	Dim sTitel  as String	
	
	sText 	=	"Es werden auch die dazugehörigen Datensätze " & chr(13) & _
				"von den Unterformularen gelöscht!" & chr(13) & _
				"Wollen Sie trotzdem fortfahren?"	
	iTyp    = 	52					'48 + 4 = Erklärungs-Symbol + Ja-/Nein-Button
	sTitel  = 	"Sicherheitsabfrage"	
	i = MsgBox (sText, iTyp, sTitel)
	REM i = 7 --> Nein-Button:
	If i = 7 Then
		DeleteListener_confirmDelete = False
	Else
		DeleteListener_confirmDelete = True
	End If
End Function
[/co
Ein schönes Wochenende wünscht Euch allen
Christiana

Re: Ereignis canceln

von Christiana » Mo, 11.05.2009 14:57

Hallo Charly,

auch CancelRowUpdates() mit dem vollen Pfad zum Hauptformular ohne irgendwelche "oEvent"
führt nicht zum gewünschten Erfolg. Das Löschen des Datensatzes wird nicht verhindert.

Christiana

Re: Ereignis canceln

von Charly » Mo, 11.05.2009 12:29

Hallo Christiana!

Ich habe gerade gesehen, dass du bei deinen Makros die Variable oForm nicht nur für das Hauptformular verwendest, sondern später durch:

Code: Alles auswählen

oForm = oEvent.Source
veränderst. Da oForm global deklariert ist, wirkt sich das auf alle anderen Makros aus.
Aber ich gehe davon aus, dass du den Befehl "CancelRowUpdates()" nicht nur mit

Code: Alles auswählen

oEvent.Source.Model.cancelRowUpdates()
getestet hast, sondern auch mit dem vollen Pfad zum Hauptformular ohne irgendwelche "oEvent"

Code: Alles auswählen

 oDoc   = thisComponent  
    oSheet = oDoc.sheets.getByName("Altbestand")
    oDraw  = oSheet.drawpage
   oForm  = oDraw.Forms.getByName("MainForm")
   oForm.CancelRowUpdates()
Gruß
Charly

Re: Ereignis canceln

von Christiana » Mo, 11.05.2009 11:39

Hallo eBayer,

genau diesen beiden Ereignissen habe ich mein Makro mit dem Befehl:

Code: Alles auswählen

oEvent.Source.Model.cancelRowUpdates()
zugewiesen. Aber leider blieb dieser Code bei beiden Ereignissen wirkungslos.
Das Löschen wurde trotzdem durchgeführt.

Gruß
Christiana

Re: Ereignis canceln

von eBayer » Mo, 11.05.2009 10:59

Eigenschaften.jpg
Hast Du es mal mit einem Makro versucht, welches Du den hier gezeigten Eigenschaften zuordnest?
- Löschen bestätigen
oder
- vor der Datensatzaktion
Gruß eBayer

Re: Ereignis canceln

von Christiana » Mo, 11.05.2009 10:07

Hallo Charly,

Code: Alles auswählen

oForm.CancelRowUpdates()
Ich dachte auch, das ist genau das was ich brauche. Aber leider zeigt sich dieser Befehl ohne Wirkung.
Der Datensatz wird trotzdem gelöscht. Ich verstehe es einfach nicht mehr.
Hab trotzdem vielen Dank für deine Mühen.

Gruß
Christiana

Re: Ereignis canceln

von Charly » Sa, 09.05.2009 10:55

Hallo Chrisitiana!

Du hast mit deiner Ansicht recht, dass mit einem Makro der Löschvorgang gestoppt werden kann. Das schreibt auch die OpenOffice-Hile
OpenOffice.org Hilfe hat geschrieben: Löschen bestätigen
Das Ereignis Löschen bestätigen tritt ein, sobald Daten aus dem Formular gelöscht werden. Dabei kann beispielsweise das zugewiesene Makro einen Bestätigungsdialog öffnen.
Daraufhin habe ich noch etwas gestöbert und bin auf zwei Methoden gestoßen, die vielleicht helfen können und zwar auf "updateRow" und "cancelRowUpdates". Laut der Beschreibung wird die erste Methode verwendet um die Daten zur Datenbank zu übertragen und die zweite, um die Übertragung, bei einem Irrtum, zu stoppen. Mit Xray habe ich die Methode bei deinem Hauptformular= Variable oForm entdeckt. Leider kann ich das nicht testen, weil ich keine Datenbankanbindung habe.

Code: Alles auswählen

oForm.CancelRowUpdates()
Vielleicht hilft das.

Gruß
Charly

Re: Ereignis canceln

von Christiana » Fr, 08.05.2009 10:01

Hallo Charly,

ich habe mich heute morgen gefreut, wieder eine Antwort von dir zu haben.
Allerdings dachte ich nicht, dass mein Problem so schwierig zu lösen sein soll.
Das Ereignis ”Löschen bestätigen“ scheint etwas anders zu funktionieren als von dir beschrieben.
Wenn kein Makro mit diesem Ereignis verknüpft wird, erscheint folgende Meldung.
Datensatz_ loeschen.gif
Datensatz_ loeschen.gif (3.6 KiB) 3947 mal betrachtet
Drücke ich auf den Nein-Button wird das Löschen auch nicht ausgeführt. Also so wie es sein soll.

Weise ich dem Ereignis ”Löschen bestätigen“ mein Makro zu, erscheint die oben erwähnte Meldung nicht mehr und ich bin offensichtlich für alles selbst verantwortlich, d.h. ich habe hier die Möglichkeit den Standard-Dialog zu ersetzen und deshalb dachte ich, dass man hier auch noch das Löschen verhindern könnte. Vielleicht liest hier jemand ja auch noch diese Zeilen, der sich da etwas mehr auskennt.

Interessieren würde ich mich auch noch, wie ich die einzelnen Elemente der Navileiste (z.B. den Lösch-Button) ansprechen kann? Oder anders ausgedrückt, woher weiß die Navileiste, dass ich den Lösch-Button gedrückt habe?

Gruß
Christiana

Re: Ereignis canceln

von Charly » Fr, 08.05.2009 07:43

Hallo Christina!

Ich hatte gehofft, dass heute Nacht jemand antwortet, der sich besser mit Formularen und Datenbankanbindung auskennt, als ich.
Ich habe aber zumindest dein Problem verstanden. Unter dem jeweiligen Formular gibt es die Leiste Formular-Navigation mit dem Button "Datensatz löschen". Der Benutzer drückt auf diesen Button und der Datensatz wird gelöscht. Du willst dies in einem Makro mit einer zusätzlichen Sicherheitsabfrage steuern.

Jetzt erhebt sich die Frage, was ist das Ereignis "Löschen bestätigen". Für mich klingt das so. Es drückt jemand den Button "Datensatz löschen", es kommt eine Abfrage z.B "Wollen Sie den Datensatz wirklich löschen". Das wird bestätigt und dann startet dein Makro. Ich glaube zu diesem Zeitpunkt ist es nicht mehr möglich, die Löschung zu stoppen. Man kann dem Benutzer nur einen Hinweis mitteilen, dass die Unterformulare mit gelöscht werden.

Wenn du das Löschen wirklich kontrollieren willst, musst du meiner Ansicht nach, eine eigene Löschroutine schreiben, also den offiziellen Button durch einen eigenen ersetzen. Aber wie oben bereits gesagt, da stoße ich auch an meine Grenzen.

Gruß
Charly

Re: Ereignis canceln

von Christiana » Do, 07.05.2009 15:33

Hallo Charly,

danke, dass du mir weiterhin helfen willst.
Dann lade ich jetzt mal mein Formular hoch, in der Hoffnung, dass du etwas damit anfangen kannst, da ja die Verbindung zu unserer PostgreSQL-DB fehlt.
Das Ereignis "Löschen bestätigen" erreichst du, indem du das erste Tabellen-Kontrollfeld mit der rechten Maustaste anklickst und Formular auswählst.

Gruß
Christiana
Formular_Forum.ods
(14.13 KiB) 162-mal heruntergeladen

Re: Ereignis canceln

von Charly » Do, 07.05.2009 11:33

Hallo Christina!

Ohne zu wissen an welcher Stelle die Löschroutine ist, kann ich dir schwer antworten. Kannst du vielleicht eine Beispieldatei ohne schützenswerte Daten hier hochladen.

Gruß
Charly

Nach oben