Autor Thema: DatenbankScript QueryDocumentDelete  (Gelesen 5480 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
DatenbankScript QueryDocumentDelete
« am: 14.04.09 - 13:03:13 »
Hi,

ich habe im DatenbankScript der mail8.ntf im 'Querydocumentdelete' einen Funktionsaufruf einer eigenen Funktion implementiert.
Diese Funktion soll beim Löschen eines Termins/Aufgabe in Notes auf eine SQL-DB zugreifen und dort auch etwas löschen.

Wenn ich nun jedoch einen Termin/Aufgabe in Notes lösche und mit dem Debugger das ganze nachvollziehe, stelle ich fest, dass das Datenbankscript gar nicht ausgeführt wird!!!
Soweit ich gelesen habe, wird doch aber das Querydocumentdelete-Event vom Datenbankscript für das Löschen von Dokumenten mit abgearbeitet?!?!

Was könnte denn falsche sein bzw. warum wird beim Löschen eines Notes-Termin/Aufgabe das Datenbankscript gar nicht erst abgearbeitet (zumindest ruft der Debugger dies gar nicht auf)?


Danke und Gruß

Rico.
Lotus Notes 8.0.2

s_Old

  • Gast
Re: DatenbankScript QueryDocumentDelete
« Antwort #1 am: 14.04.09 - 15:45:05 »
Hallo Rico!

Die Sachen aus dem Datenbankscript funktionieren meines Wissens nach auch unter R8 einwandfrei.
Beim Entwickeln & Testen allerdings muss man ein wenig aufpassen:
  • Änderst du was im DB-Script musst du die DB komplett zumachen (auch im Designer!) bevor diese Änderungen greifen
  • Der Debugger springt erst in diese Events, wenn du ihn vor dem Öffnen der DB aktivierst

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: DatenbankScript QueryDocumentDelete
« Antwort #2 am: 14.04.09 - 19:09:42 »
ich kann dir garantieren das es funktioniert... aber nicht in querydocument delete sondern in REMOVETHISDOCUMENT musst du deinen Code einfügen...

hab ich bereits gemacht und ich poste dir morgen einen Screenshot in dem du siehst wo es passiert...

Ich beschäftige mich mit anpassungen in der Mailschablone schon seit jahren...

tommy

im REMOVETHISDOCUMENT Event des DB Scripts


   Dim bCanDelete As Integer   
   Dim noteid As String
   On Error Resume Next
   On Error 4241 Goto BadDoc
   
   ' Not a C&S Doc or R5... just remove it
   If skip = False Then
      Set notePlaceHolder = note
      Set note = collection.getnextdocument(note)

AB HIER DEIN CODE

Wichtig ist zu beachten das dieser Event bei der ENTF Taste angesprungen wird... Ich kenn die näheren Umstände nicht wann du noch willst das etwas ausgelöst wird.
« Letzte Änderung: 15.04.09 - 08:00:45 von thomson666 »

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: DatenbankScript QueryDocumentDelete
« Antwort #3 am: 15.04.09 - 08:50:53 »
Vielen Dank für die ausführlichen Antworten... ich werde das dann gleich mal näher testen.  ;)

Rico.

EDIT:
Zitat
Wichtig ist zu beachten das dieser Event bei der ENTF Taste angesprungen wird... Ich kenn die näheren Umstände nicht wann du noch willst das etwas ausgelöst wird.
Der User soll Termine/Aufgabe auf alle Notes-möglichen Weisen löschen können (Entf-Taste, re.Maus und übers Menü). Ich weiß nicht, ob das ein Problem darstellen könnte?!
« Letzte Änderung: 15.04.09 - 09:28:25 von magic_halli »
Lotus Notes 8.0.2

s_Old

  • Gast
Re: DatenbankScript QueryDocumentDelete
« Antwort #4 am: 15.04.09 - 11:13:47 »
Hallo nochmal!

Im RemoveThisDocument könntest du wahrscheinlich auch deinen Code reinpacken, dieses ist aber kein Standard-Event des Datenbankscriptes.
Hierfür ist das Querydocumentdelete zu 100% die richtige Stelle um das Löschen von Dokumenten abzufangen.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: DatenbankScript QueryDocumentDelete
« Antwort #5 am: 15.04.09 - 12:29:03 »
Hallo nochmal!

Im RemoveThisDocument könntest du wahrscheinlich auch deinen Code reinpacken, dieses ist aber kein Standard-Event des Datenbankscriptes.
Hierfür ist das Querydocumentdelete zu 100% die richtige Stelle um das Löschen von Dokumenten abzufangen.
Jo danke... zu dieser Erkenntnis bin ich auch gekommen und implementiere hier auch meine Funktion.
Lotus Notes 8.0.2

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: DatenbankScript QueryDocumentDelete
« Antwort #6 am: 16.04.09 - 08:47:40 »
gut, aber bei kalender events kann ich aus mehrjähriger erfahrung sagen das RemoveThisDocument immer funktioniert.
für Deletes von Aufgaben bzw. Mails habt ihr vermutlich recht...

s_Old

  • Gast
Re: DatenbankScript QueryDocumentDelete
« Antwort #7 am: 16.04.09 - 10:59:40 »
gut, aber bei kalender events kann ich aus mehrjähriger erfahrung sagen das RemoveThisDocument immer funktioniert.
für Deletes von Aufgaben bzw. Mails habt ihr vermutlich recht...
Das Querydocumentdelete-Event wird immer durchlaufen. Von jedem Dokument unabhängig vom Typ und bei jedem Löschvorgang (egal ob das Dokument über das Kontextmenü, durch Betätigen der Entfernen-Taste oder sonstwie gelöscht wird).

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: DatenbankScript QueryDocumentDelete
« Antwort #8 am: 16.04.09 - 11:35:05 »
hmm interessant...
und wo fügst du deinen code da ein damit du sicher bist das die Löschung nicht abgebrochen wird?
Das würde alles für mich einfacher machen...

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: DatenbankScript QueryDocumentDelete
« Antwort #9 am: 16.04.09 - 12:41:55 »
So, es funzt!

Ich habe eine 'Sub' im Datenbankscript, welche ich im 'Querydocumentdelete' einfach aufrufe. Den Aufruf habe ich im Datenbankscript fast ganz oben hin gesetzt?!
Hier mal der Auszug aus meinem Orginalen DB-Script inkl. meines Aufrufs:
Code
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
	Dim preRNext, SupressDeleteDialogs As Integer, MtgOwner As Integer,  result As Integer
	Dim tmpOwner As String, strFormNm As String, strToDoMessage As String
	Dim iCalDocstoDel As NotesDocumentCollection,curDoc As notesdocument 'variables to support ical deletion logic
	Dim profileDoc As Notesdocument
	Dim e As Variant, v As Variant
	Dim versionNumber As Integer
	
	
	Const INVAL_DOCUMENT =  "Sie müssen einen Wiederholungseintrag wählen, um diese Aktionen durchzuführen."
	Const ERR_TITLE = "Fehler"
	
	' On Error Resume Next - return errors to the user - CS
	
	If ws Is Nothing Then	
		Set ws = New notesuiworkspace
	End If
	
	If session Is Nothing Then		
		Set session = New NotesSession
	End If

' #####bis hierher alles orginal und nun mein Code#####
	Dim docCollection As NotesDocumentCollection
	Set docCollection = Source.Documents
	If(docCollection.Count > 0)Then
		' Methodenaufruf zum Löschen
		Call DeleteFromSql(docCollection,Continue)
	End If
' #####ab hier wieder alles orginal belassen#########

	'Process ICal Deletes
	If Strcompare(strViewName, "iCals")  = 0 Then
...
Die Methode 'DeleteFromSql' ist natürlich im DB-Script implementiert und macht die eigentlich Arbeit.
Bis jetzt laufen die Test´s erfolgreich!


Was mich nur wundert:
Wenn ich im Designer am DB-Script was ändere, speichere... alles im Designer schließe und den Designer selbst auch schließe...
Danach den NotesClient öffne, Gestaltung aktualisiere und ein Dokument lösche, dann ist die Änderung noch nicht aktiv.
Erst wenn ich den DominoServer neu starte, ist die Änderung aktiv!!! (Wohlgemerkt, ich arbeite auf einem TESTSYSTEM!  ;) )
Warum das... ich schließe doch nun schon alles was geht - somit auch die Datenbank?!?! Wie mache ich denn sonst eine DB komplett zu?

Rico.
Lotus Notes 8.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz