Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Jörg am 19.11.07 - 13:02:52

Titel: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 19.11.07 - 13:02:52
Hallo,

ich habe in meinen Template nun eine neue Funktion hinzugefügt,das Feld möchte
ich nun ein Script in allen meinen Dokumenten setzen.

Um das Feld handelt es sich um ein Optionfeld, das vorher nicht
im Dokument vorhanden war.

Hier der Code:

Code
Sub Initialize
	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	
	Set db = s.CurrentDatabase
	
	Dim strTextArray(0) As String
	strTextArray(0) = "0"
	Dim item As NotesItem
	
	Dim v As NotesView
	Set v = db.GetView("German\Unread")
	Dim doc As NotesDocument
	Set doc = v.GetLastDocument()
	Do While Not (doc Is Nothing)
		Set item =  doc.GetFirstItem( "Doc_freigabe" )
		item.IsAuthors = True
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		item.IsAuthors = False		
		Call doc.Save(True,True)		
		Set doc = v.GetLastDocument()
	Loop
End Sub

In einer Ansicht schaue ich nun nach ob das Feld geändert wurde, aber dies
ist nicht der fall. Ich frage mich nun warum??


Ein weiters Problem ist....  :
Da ich in der Datenbank nun aber ca. 2.8gb an Dokumenten habe ,
suche ich nach eine Möglichkeit, das bei der nächsten Replikation nur dieses
Feld geändert wird und nicht gleich die komplette DB als neu angesehen wird.


Gruß Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: WernerMo am 19.11.07 - 13:08:44
Hallo

Da ich in der Datenbank nun aber ca. 2.8gb an Dokumenten habe ,
suche ich nach eine Möglichkeit, das bei der nächsten Replikation nur dieses
Feld geändert wird und nicht gleich die komplette DB als neu angesehen wird.

das macht doch die Replikation automatisch so, da sich nur das Feld (pro betroffenem Dokument) ändert, wird auch nur die Feldänderung repliziert. Also ist nur die Frage wie viele Dokument mit wieviel Feldinhalt betroffen sind.

Gruß Werner
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 19.11.07 - 13:12:27
Code
Set item =  doc.GetFirstItem( "Doc_freigabe" )
		item.IsAuthors = True
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		item.IsAuthors = False		
		Call doc.Save(True,True)		
		Set doc = v.GetLastDocument()

Heisst das Feld jetzt Doc_freigabe oder Doc_Freigabe ?
Warum einmal IsAuthors = true und dann IsAuthors = False ?
Warum 2 x GetLastDocument ?
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 19.11.07 - 13:51:07
@Werner

nun ja dann bin ja mal beruhigt, da es so ca. 1500 Dokumente sind...  :)

@Klauss

ein Problem vorher war , das ich das Feld nicht bearbeiten konnte da bei
Author des items false zu lesen war. DAher dachte ich mir so dann setzen wir
die Rechte und nach setzen ich sie wieder so wie es war.

Wenn ich im Script das letzte GetLastDocument entferne , dann
läuft das ganze in einer Endlos-Schleife.
Den Code-Teil hatte ich hier im Forum gefunden und dort wurde
dies als Lösung kundgetan.

Auch mit diesen Code bekomme ich nicht die gewünschte
Änderungen in den Dokumenten. D.h. meine Abfrage beliebt
leer.

Code
Sub Initialize
	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	
	Set db = s.CurrentDatabase
	
	Dim strTextArray(0) As String
	strTextArray(0) = "0"
	Dim item As NotesItem
	
	Dim v As NotesView
	Set v = db.GetView("German\Unread")
	Dim doc As NotesDocument
	
	Do While Not (doc Is Nothing)
		Set item =  doc.GetFirstItem( "Doc_Freigabe" )
		item.IsAuthors = True
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		Call doc.Save(True,True)		
		Set doc = v.GetLastDocument()
	Loop
	
End Sub

GRuß Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: m3 am 19.11.07 - 13:57:42
Wie wärs mit GetNextDocument anstelle von GetLastDocument ? ;)
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 19.11.07 - 13:57:46
So ganz verstehe ich das nicht (Montag)...

Warum nimmst Du nicht die Mimik mit getfirst &  next Document ?

Beispiel:
Code
Set doc = view.GetFirstDocument
While Not ( doc Is Nothing )
  If doc.LastModified < Today Then
    Call doc.Send( True, doc.Authors )
  End If
  Set doc = view.GetNextDocument( doc )
Wend
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: umi am 19.11.07 - 14:26:40
Code
Sub Initialize
	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	Dim doc As NotesDocument
                Dim strTextArray(0) As String
	Dim v As NotesView

	Set db = s.CurrentDatabase
	
	strTextArray(0) = "0"
		
	Set v = db.GetView("German\Unread")
	set doc = v.getfirstdocument()
	While Not (doc Is Nothing)
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		Call doc.Save(True,True)		
		Set doc = v.GetNextDocument(doc)
	Wend
	
End Sub

Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: umi am 19.11.07 - 14:30:02
Oder ganz ohne Loop
Code

Sub Initialize
	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	Dim doc As NotesDocument
                Dim strTextArray(0) As String
	Dim v As NotesView

	Set db = s.CurrentDatabase
	
	strTextArray(0) = "0"
		
	Set v = db.GetView("German\Unread")
	call v.allEntries.stampAll("Doc_Freigabe",strTextArray)	
End Sub

Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 19.11.07 - 14:57:16
Leider zeigen alle Scripte keine Funktion..
D.h. sie werden richtig durchlaufen (ohne Fehler) , aber
das Feld wird nicht verändert.

gRuß Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 19.11.07 - 15:03:27
Script soeben getestet: das läuft !!

Zitat
aber das Feld wird nicht verändert.

Woran siehst Du das ?
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: umi am 19.11.07 - 15:04:00
Hast Du überhaupt die Rechte, das Dokument zu editieren?
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 19.11.07 - 15:15:13
@ klauss

in den Eigenschaften des Dokumentes,
sowie ein einer Ansicht welche auf das Feld schaut.

@ umi
ich stehe im Feld Authors drin und habe die  Rechte dort
Änderungen vorzunehmen.

Komisch ist nur wenn ich das Dokument von Hand öffne
und gleich wieder schliesse dann werde ich sofort nach dem
Speichern gefragt obwohl ich nichts geändert habe.

Speicher ich dann , so ist das Dokument in der Ansicht da.

Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 19.11.07 - 18:24:05
 :'(
Jetzt bin auch mit meinem Latein am Ende....
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: koehlerbv am 19.11.07 - 18:48:24
Aktueller Code wäre auch nicht schlecht. Ohne dem kann man gar nichts sagen.

Bernhard
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 20.11.07 - 07:50:14
Morgen,

ein aktuelle Code kein Problem:

Code
Sub Initialize

	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	Dim doc As NotesDocument
	Dim strTextArray(0) As String
	Dim v As NotesView
	
	Set db = s.CurrentDatabase
	
	strTextArray(0) = "1"
	
	Set v = db.GetView("German\Unread")
	Set doc = v.getfirstdocument()
	While Not (doc Is Nothing)
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		Call doc.Save(True,True)		
		Set doc = v.GetNextDocument(doc)
	Wend
	
	
End Sub

Kann dies aber auch an der Definition des Feldes liegen??
Der Wert welcher geändert werden soll ist eine Optionsschaltfläche.

Gruss Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Axel am 20.11.07 - 08:31:16
Versuch das Ganze mal so:

Sub Initialize

   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim v As NotesView
   
   Set db = s.CurrentDatabase
   
   Set v = db.GetView("German\Unread")
   Set doc = v.getfirstdocument()
   While Not (doc Is Nothing)
      doc.Doc_Freigabe = "1"
      Call doc.Save(True,True)      
      Set doc = v.GetNextDocument(doc)
   Wend
   
   
End Sub


Wie sieht denn die Definition deines Optionsfeldes genau aus, insbesondere Werte bzw. Werteformel.


Axel
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 20.11.07 - 08:32:57
Die Haken bei "Felder bei.. aktualisieren" und "Auswahl bei ... aktualisieren" sind gesetzt ?
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Axel am 20.11.07 - 08:34:28
Die Haken bei "Felder bei.. aktualisieren" und "Auswahl bei ... aktualisieren" sind gesetzt ?

Das sollte aber in diesem Fall unerheblich sein, da das Setzen des Feldwertes im Backend passiert.


Axel
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: klaussal am 20.11.07 - 08:36:39
Stimmt auch wieder.
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: umi am 20.11.07 - 08:56:08
Läuft der Agent in der richtigen Datenbank? oder nur im Template?
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 20.11.07 - 08:58:02
@ axel

die Definition des Optionsschaltfläche sieht so aus:

Doc_Freigabe|0
No_Doc_Freigabe|1

@all
Die Aktuallisierung des Feldes ist aktiv, aber  für die Ansicht konnte ich nichts finden.

@umi
Es ist ein Template

GRuß Jörg
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: m3 am 20.11.07 - 09:00:24
Jörg, wenn der Agent in dem ntf-File (der Schablone/Template) läuft, dann kann er die Dokumente nicht ändern, da sich diese in der Datenbank befinden (.nsf).
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: umi am 20.11.07 - 09:04:04
1. Es gibt in LS einen Debugger
2. Evtl. mal  Errorhandling / Debug ausgaben einbauen

Code
Sub Initialize

	Dim wert As String  
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim tmpdoc As NotesDocument
	Dim doc As NotesDocument
	Dim strTextArray(0) As String
	Dim v As NotesView
	
	Set db = s.CurrentDatabase
	
	strTextArray(0) = "1"
	
	Set v = db.GetView("German\Unread")

                print db.server & " " & db.filepath
              
	Set doc = v.getfirstdocument()
	While Not (doc Is Nothing)
		Call doc.ReplaceItemValue("Doc_Freigabe", strTextArray)
		Call doc.Save(True,True)		
		Set doc = v.GetNextDocument(doc)
	Wend
	
	
End Sub
Titel: Re: Feld über LS bearbeiten und Speicherstatus
Beitrag von: Jörg am 20.11.07 - 10:21:58
Ich habe den Fehler gefunden.....

Danke euch erstmal für aufopfernde Hilfe (super klasse)


Der Fehler lag in der Ansicht hier wurde auf ein falsches Feld selektiert und somit
konnte kein dokument gefunden werden.
Schnell abgeändert und nun läuft er alle div. Dokumente durch.


Tausend Dank Jörg