Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: marsu_2 am 16.05.13 - 11:29:29

Titel: Queryclose in Click Event übernehmen
Beitrag von: marsu_2 am 16.05.13 - 11:29:29
Hallo,

ich benutze dieses Script in einer Maske im Queryclose, da klappt es auch wie gewünscht es ließt das Feld CommentHistory ein fügt den Inhalt des neuen Feldes ein und löscht den Inhalt aus dem neuen Feld.

Nun wollte ich das in einer anderen DB in eine Schaltfläche übertragen. Nun kommt da aber immer die Fehlermeldung " Not a member: Document"
Set doc = session.CurrentDatabase.GetDocumentByUNID(Source.Document.UniversalID) hat da jemand eine Idee?


Code
Sub Click(Source As Button)
	On Error Goto Oops
	Dim session As New NotesSession
	Dim doc As NotesDocument
	Set doc = session.CurrentDatabase.GetDocumentByUNID(Source.Document.UniversalID)	Dim vDetails As Variant
	Set vDetails = doc.GetFirstItem("Comments")
	Dim vHistory As Variant
	Set vHistory = doc.GetFirstItem("CommentHistory")
	
	If vDetails.valueLength < 245 Then
		Goto TheEnd
	End If
	
	If (vDetails.Type = RICHTEXT And vHistory.Type = RICHTEXT) Then
		Call vHistory.AppendText(Format$(Now, "mm/dd/yy hh:nn AM/PM") & " von " & session.CommonUserName & ": ")
		Call vHistory.AppendRTItem(vDetails)
		Call vHistory.AddNewLine(1)
		Call vDetails.Remove
		Call doc.Save(True, False)
	End If
TheEnd:
	Continue = True
	Exit Sub
Oops:
	Resume TheEnd	
End Sub
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: Glombi am 16.05.13 - 11:35:23
Source ist in dem Button kein UI Dokument. Daher musst Du es Dir anders holen.
dim ws as New NotesUIWorkspace
dim uidoc as NotesUIDocument
set uidoc = ws.CurrentDocument
...
Set doc = session.CurrentDatabase.GetDocumentByUNID(uidoc.Document.UniversalID)


Andreas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: ascabg am 16.05.13 - 11:36:02
Hallo,

Weil Source hier Dein Button ist und nicht das UIDocument, welches durch Source
im QueryClose vorhanden ist.

%EDIT
Mein Namensvetter Glombi (Andreas) war schneller.


Andreas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: marsu_2 am 16.05.13 - 14:53:58
Das wars danke!

Leider taucht jetzt das nächste Problem auf.
Im Designer kommt jetzt kein Fehler mehr aber wenn ich die Schaltfläche dann betätige kommt die Meldung
Zitat
Object Variable not Set


Wenn ich das Dokument vorher manuel speicher und erneut aufrufe, kommt die Meldung nicht.
 
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: ascabg am 16.05.13 - 15:04:41
Hallo,

Weil sich RichText-Felder leider etwas anders verhalten.

Diese stehen, ohne irgendwelche Eingriffe, in einem neuen, noch nicht gespeicherten
Dokument halt noch nicht zur Verfuegung.


Andreas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: marsu_2 am 16.05.13 - 16:42:04
Danke für die Mühe

Ich muss immer wieder feststellen ich habe wirklich keine Ahnung von LotusScript gibt es für die besondere Thematik mit RTF's nen  Tuto?   ???

Ich hätte jetzt gedacht ein

Code
Call doc.Save(True, False)
	Call doc.Reload

würde abhilfe schaffen, was es nicht tut. Ich bin überfragt

Thomas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: ascabg am 16.05.13 - 16:52:47
Nur so als Gerdankenspiel.

Versuch mal vor dem Speichern ein

Call vHistory.Compact()


Andreas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: ascabg am 16.05.13 - 17:13:56
Hallo,

Ich stelle mir jedoch gerade die Frage, warum machts Du diesen Akt mit den RT-Feldern
eigentlich bei einem neuen Dokument.

So speicherst Du dieses Dokument, damit Dein Code an die RT-Felder 'sauber' herankommt.

Was aber, wenn Dein Anwender merkt, dass er das Dokument nun doch nicht anlegen will,
hat aber schon auf den Button geklickt? Dann ist es aber schon gespeichert.

Arbeite doch bei einem neuen Dokument mit den Mitteln, die Dir ein NotesUIDocument
in die Hand gibt. (FieldGetText, FieldSetText)


Andreas
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: Peter Klett am 16.05.13 - 18:26:28
Völlig unabhängig von Deiner Fragestellung, aber ...

Set doc = session.CurrentDatabase.GetDocumentByUNID(Source.Document.UniversalID)

Du holst Dir aus der Datenbank das Backend-Dokument mit der UniversalID des Frontend-Dokuments, die Du über dessen Backend-Dokument ausliest.

Das geht bestimmt auch noch komplizierter. Wie wäre es damit?

Set doc = Source.Document

Falls Du nicht nach der Länge des Codes bezahlt wirst, würde ich das mal versuchen ;)
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: pram am 16.05.13 - 19:07:45
Bei Dialogen gibt es einen fiesen Bug über den du hier evtl.  gestolpert bist:

Wenn der Dialog über eine Lotusscript Schaltfläche mit ws.currentDocument.close()  geschlossen wird, kann man im queryClose nicht mehr zuverlässig auf das Dokument zugreifen, da es "Nothing" wird.
Abhilfe: Formel @Command([Refreshparentnote]); @command([Fileclosewindow]) verwenden.

Gruß Roland
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: marsu_2 am 28.05.13 - 16:16:49
war ne Woche im Urlaub deswegen erst die späte Antwort,

ich finde es total nett das Ihr mich so unterstützt, ich muss gestehen ich habe mir den Code zusammengewürfelt und es ist auch mein erstes LS ansonsten habe ich alles per Formel realisiert.

Was ich erreichen will ist über einen Button aus einem RTF den Inhalt in ein Berechnetes RTF zu kopieren und den Inhalt aus dem ersten Feld dann zu löschen.

Da es mit RTF Feldern ja anscheinend schwieriger ist habe ich dafür die LS Schnipsel verwendet.
Wenn ich wie beschrieben den Code im Queryclose ausführe klappt das auch aber halt nicht im Button.

FieldGetText, FieldSetText klappt für RTF dann ja auch nicht...

Ab Dim vDetails As Variant verstehe ich auch den Code und kann ihn nachvollziehen, aber den Anfang verstehe ich nicht und habe ihn deswegen dirty kopiert. Gibt es da ein schönes Tuto? Ich habe keine Ahnung von Backend und Frontend Dokumenten etc. Ich kenne diese Begriffe nur im Zusammenhang von CMS Systemen
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: koehlerbv am 28.05.13 - 23:36:23
Wir sind hier immer sehr nett (wenn es die Gegenseite auch ist) und helfen gerne.
Wir sind noch netter, wenn wir einen ansprechbaren Namen unter den Postings finden.

Ich gebe aber trotzdem noch zwei tiefere Tipps:
Erstens:
Ich würde als LotusScript-Lehrling tunlichst die Finger von den schwierigsten Dingen lassen, sondern mich erst prinzipiell fit machen.

Zweitens:
Du kopierst den Inhalt von A nach B? Wozu? Berechnetes RT-Feld - da tust Du ggf. die nächste Baustelle auf, sowas (berechnetes RT-Feld) halte ich fast prinzipiell nicht für gut.
Warum verwendest Du keine zugriffskontrollierten Abschnitte? Aber da sind wir wieder bei dem Lernprozess, den man erstmal gehen sollte, bevor man sich am "Eingemachten" versucht.

HTH,
Bernhard
Titel: Re: Queryclose in Click Event übernehmen
Beitrag von: marsu_2 am 29.05.13 - 13:06:18
Hallo Bernhard,

ich glaube mir fehlt die Übersicht über meine Möglichkeiten.

zugriffskontrollierten Abschnitte
ich benutze einige in der Maske um über Rollen bestimmten Gruppen->Usern Zugriff auf Abschnitte zu gewähren. Ich hätte aber keine Idee wie ich dies für mein Problem nutzen könnte.
Ich will ja das ein User immer nur Sachen hinzufügen und nicht löschen darf.

Gibt es eine komplett andere Methode ein Feld so anzulegen das man Anhänge hinzufügen aber nicht löschen darf?

Hinzukommt das ich ja auch noch einen Zeitstempel nutzen will.

Ach ja ;-)

Grüße THomas