Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: LordKiri am 12.09.08 - 15:40:41

Titel: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 12.09.08 - 15:40:41
Hallo,

ich hätte gerne eine Lesebestätigung für ein Dokument. Die User, die es lesen sollen bekommen eine Mail mit einem Link zu diesem Dokument.

Folgendes habe ich bereits in meiner Maske enthalten:
Felder:
ReturnReceipt; SendTo, Subject und From

in dem Postopen-Event steht folgendes:
Code
Sub Postopen(Source As Notesuidocument)
	Set uidoc = Source
	Set doc = Source.document
	If uidoc.IsNewDoc Then
		Exit Sub
	Else
		uidoc.EditMode = True
		RR = doc.GetItemValue("ReturnReceipt")
		If RR(0) = "1" Then
			doc.ReturnReceipt = "1"
			Messagebox("Empfangsbestätigung gesendet.")	
		End If
		uidoc.EditMode = False
	End If
End Sub

Mein Problem das ganze funktioniert nicht.
Fehlen vielleicht irgendwelche Felder oder ist ein Fehler im Code... ich komm einfach nicht weiter...
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: eknori am 12.09.08 - 15:51:01
Du machst also folgendes:

Wenn das Dokument geöffnet wird, wechselst du in den bearbeitungsmodus und  prüfst du, ob es ein neues Dok ist. Wenn ja ... Tschüß; wenn nein, dann besetzt du den Variant RR mit dem Inhalt des Feldes Returnreceipt, welches sich in dem Dokument befindet.
Nun prüfst du, ob der Wert = 1 ist. Wenn ja, ersetzt du den vorhandenen Feldwert mit dem gleichen Wert und zeigst der Welt eine Messagebox.
Dann wechselst du wieder in den Lesemodus.

So weit , so gut ... Frage ... Was soll das ?
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: koehlerbv am 12.09.08 - 16:01:03
ReturnReceipt ist eine bestimmte eingebaute Funktionalität in der Mail-DB. In anderen DBs kannst Du das (Items) hundert Mal einbauen - da passiert dann gar nichts, solange Du nicht den entsprechenden Code auch mit zur Verfügung stellst (und auslöst).

Weiters: Du müsstest in Deinen Dokumenten auch vermerken, wer das Dokument bereits gelesen hat. Das setzt dann aber Schreibrechte auf das Dokument voraus.

Ich stelle mir wie Ulrich auch die Frage: Was soll das?

Bernhard
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 12.09.08 - 16:41:19
ah ok ich habe gedacht diese ReturnReceipt geht überall...

Grund dafür ist ein Kontrolle für bestimmte User über Arbeitsanweisungen bzw. deren Änderungen welche über Workflows an die User verteilt wird.

das mit dem überprüfen ob der wert 1 ist und den wert 1 schreiben ist natürlich blödsinn, da hatte ich woll einen kleinen Denkfehler
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: koehlerbv am 12.09.08 - 16:50:06
Grund dafür ist ein Kontrolle für bestimmte User über Arbeitsanweisungen bzw. deren Änderungen welche über Workflows an die User verteilt wird.

Das ist nun aber ein merkwürdiges Verständnis von "Workflow". Hierüber liesse sich ja auch ohne weiteres das Öffnen des Dokumentes als "Workflow Step" abbilden lassen ...
Abgesehen davon: "Öffnen des Dokumentes" muss überhaupt nichts mit "Lesen" zu tun haben! Vielmehr müsste der Mitarbeiter bestätigen: "Ja, ich habe das gelesen und ich bin der Meinung, es verstanden zu haben." (oder eben das Gegenteil).
Ein simples "return receipt" ist hier (wie fast immer) schlichter Schwachsinn.

Bernhard
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 15.09.08 - 11:16:54
ok seh ich ein, jetzt mach ich einen Button "Ja, ich habe das Dokument gelsen" wie komm ich den jetzt an seine mailDB ran zum besseren Verständnis mein Code:

Dim uidoc As NotesUIDocument
   Set uidoc = workspace.ComposeDocument ( "", mailDB User, "Memo" )
   Dim steller
   steller = uidoc.fieldgettext("Antragsteller")
   doc.Subject = "Lesebestätigung"
   doc.Body = "Die Änderung wurde gelesen."
   doc.EnterSendTo = steller
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: m3 am 15.09.08 - 11:38:30
Den Pfad zur Mail-Datenbank eines Users kannst Du aus dem Domino Directory auslesen.

Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 15.09.08 - 11:52:01
Ok da bin ich grad dran hab aber ein kleine Problem er bring mir beim mailFile immer Type mismatch

Code
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim dd
	Dim lookupView
	Dim mailFile As String
	Dim mailserver As String
	Set dd = session.GetDatabase("Server", "names.nsf")
	Set lookupView = dd.GetView("($Users)")
	Set doc = lookupview.GetFirstDocument
	While Not (doc Is Nothing)
		Set oUserName = New NotesName(session.UserName)
		userName = oUserName.Abbreviated
		Set userDoc = lookupView.GetDocumentByKey(userName, True)
		If Not (userDoc Is Nothing) Then
			mailFile = userDoc.GetItemValue("MailFile")
			mailServer = userDoc.GetItemValue("MailServer")
			Msgbox mailFile
			Msgbox mailServer
			Set userMailDb = session.GetDatabase(mailServer, mailFile, True)
			If Not (userMailDb Is Nothing) Then
				Call userMailDb.Open("", "")
				If userMailDb.IsOpen Then
					Dim uidoc As NotesUIDocument
					Set uidoc = workspace.CurrentDocument
					Dim steller
					steller = uidoc.fieldgettext("Antragsteller")
...
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: m3 am 15.09.08 - 12:00:52
Zitat
GetItemValue method 

Syntax
valueArray = notesDocument.GetItemValue( itemName$ )

Parameters
itemName$     
String. The name of an item.

Return value
value
The value or values contained in the specified name.
The data type of the value depends on the data type of the item.

Code
Notes item type                         Value return type
Rich text                               Array of strings. The text in the item, rendered into plain text
Text or text list                       Array of strings
(includes Names, Authors, and 
Readers item types)
Number or number list                   Array of doubles
Date-time or range of date-time values  Array of variants of type Date

Du kannst nicht einem String "mailFile" ein Array "userDoc.GetItemValue("MailFile")" zuweisen.
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 15.09.08 - 13:10:41
ok, das hab ich jetzt alles gelöst, soweit danke :D jetzt habe ich den Empfänger in EnterSendTo eingetragen, aber er bringt dann die Meldung, dass er keine Recipient list for send operation hat.

Heißt das Feld für SendTo doch anders?
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 15.09.08 - 16:07:05
so jetzt wirds haarig, es funktioniert alles ganz gut nur mein Problem ich hab so ne tolle abfrage im postopen und sobald ich das ganze Dokument auf readmodus stellen per editmode = False schließt er das Dok und öffnet es erneut...

die Folgerung daraus ich hab ne unendlich Schleife weil er jedesmal das Dok schließt und wieder öffnet wenn er den Befehl editmode = False durchläuft.

Kann man es verhindern, dass er erst das Dok schließt und dann wieder öffnet sondern einfach in Readmode geht
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 16.09.08 - 09:42:32
ok hab die endlosschleife wieder rausgekriegt jetzt habe ich aber ein anderes Problem:

ich habe ein Feld "gelesen" in dieses Feld wird jeder geschrieben, der einmal Bestätigt hat, dass ers gelesen hat, wenn nun der user das Dokument noch einmal startet soll er per script überprüfen ob der User schoneimal in dem Feld gelesen steht, wenn er drin steht soll er den Bestätigungsbutton nicht anzeigen.

das ganze läuft atm über "Instr" gibt es eine bessere Methode, die auch wirklich zuverlässig ist???
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: DerAndre am 16.09.08 - 09:47:01
Instr ist doch Ok. Warum soll die nicht zuverlässig sein?
A-Bär pass auf die 64k Grenze auf, dann knallt es.
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 16.09.08 - 10:00:00
Irgendwie funktioniert das mit dem Instr nicht.... hier der Code

Code
Set oUserName = New NotesName(session.UserName)
	userName = oUserName.Abbreviated
	userNameCN = oUserName.Common
	
gelesen = uidoc.FieldGetText("gelesen")	
                BigString2$ = gelesen
	LittleString2$ = userName
	positionOfChar2& = Instr(BigStrin2$, LittleString2$)
	Msgbox positionOfChar2&,,"positionOfChar2"
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: klaussal am 16.09.08 - 10:04:38
Zitat
64k
....
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: klaussal am 16.09.08 - 10:07:39
Was sagt denn der Debugger ?

"Funktioniert irgendwie nicht" ist zu pauschal.
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 16.09.08 - 10:17:51
er findet den User nicht in gelesen obwohl er drin steht

zum besseren Verständnis hier ein Screen der alle 3 MsgBoxen der variablen nach einander aufzeigt
Titel: Re: Lesebestätigung für ein Dokument
Beitrag von: LordKiri am 16.09.08 - 11:23:14
Juhu, ich habe den Fehler gefunden

positionOfChar2& = Instr(BigStrin2$, LittleString2$)

wenn man anstatt BigString2$

Bigstrin2$

schreibt kanns ja nicht funktionieren.... Danke für die Hilfe und damit wäre das Problem gelöst!!!
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: klaussal am 16.09.08 - 11:38:59
Das hätte aber im Debugger sofort auffallen müssen.

Und wenn du "Option Declare" gesetzt hättest....
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: billygates am 23.09.08 - 09:20:18
Vielleicht verstehe ich hier ja etwas nicht:

Aber was soll der ganze Umstand?
Wie wäre es einfach mit einem @mailsend aus der bewährten Formelsprache als leckeren kleinen Einzeiler im Button?
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: DerAndre am 23.09.08 - 09:23:48
Er muß noch das Tracking machen, wer das Teil gelesen hat.
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: billygates am 23.09.08 - 09:28:15
Na und?
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: DerAndre am 23.09.08 - 09:35:30
Ok, dann schick mal den Einzeiler für:

Prüfen ob gelesen, wenn Nein Lesebestätigung und Eintragen in die die gelesen haben Liste.
Titel: Re: [gelöst] Lesebestätigung für ein Dokument
Beitrag von: billygates am 23.09.08 - 15:55:07
Es ist doch kein Widerspruch, sich den Aufwand für das Mailing zu sparen und es per Einzeiler in der Formelsprache zu realisieren. Das sog. "Tracking" kann dann immernoch seperat per Script oder eben auch per Formelsprache gelöst werden.