Autor Thema: nsf auf anderen server kopieren  (Gelesen 4473 mal)

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
nsf auf anderen server kopieren
« am: 13.03.06 - 16:52:41 »
Guten Abend

Zu meinem Problem. Ich habe eine Datenbank, in der werden Informationen über eine Emailadresse angezeigt. z.B:
Server:   Server/OU/Firma
Mailfile: Server/OU/Firma/mail\test.nsf

Jetzt haben wir eine Austritte Datenbank und ich muss eine Archivierungsfunktion programmieren. Leider sind meine LS Kenntnisse extrem gering.
Über die Aktion soll Server/OU/Firma/mail\test.nsf mit allen Dokumenten in diese DB kopiert werden Server/OU/Firma/gone\gone.nsf

Ich habe schon ein Skript gefunden nur, das kopiert die lokale Datenbank. Ich möchte aber über das Feld Mailfile angeben können welche DB es kopieren soll in meinem Fall das mail\test.nsf.

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim archiveDb As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	Set db = session.CurrentDatabase
	Set archiveDb = New NotesDatabase(m_server, m_mailfilename)
	archiveServer$ = "Server1"
	archiveFile$ = "archive\"+db.FileName
	If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
		Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
	End If
	Set collection = db.AllDocuments
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Call doc.CopyToDatabase( archiveDb )
		Set doc = collection.GetNextDocument(doc)
	Wend
End Sub
« Letzte Änderung: 14.03.06 - 08:47:46 von judicious »

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Re: nsf in anderes nsf kopieren
« Antwort #1 am: 13.03.06 - 17:14:05 »
Schau dir einmal db.CreateCopy, db.AllDocuments und copyToDatabase an.

Hubert


Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf in anderes nsf kopieren
« Antwort #2 am: 13.03.06 - 21:02:33 »
Ja danke habe ich ja wie du in meinem Code siehst.  ;)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: nsf in anderes nsf kopieren
« Antwort #3 am: 13.03.06 - 23:12:55 »
... Leider sind meine LS Kenntnisse extrem gering ...
... Ich habe schon ein Skript gefunden ...

Ja danke habe ich ja wie du in meinem Code siehst.  ;)

Was nun? Dein Code ... oder "gefunden"?

Was mir unklar ist: Warum versuchst Du Dich an einer Aufgabe, die an sich nicht das grosse Problem darstellt, wenn Du aber von den Methoden noch keinen Plan hast? Zudem, da die DB doch sowieso existiert und auch daher mit anderen Mitteln kopiert werden könnte. Die so gewonnene Zeit könntest Du erstmal nutzen, LotusScript strukturiert zu lernen.

Weiterhin:
Zu meinem Problem. Ich habe eine Datenbank, in der werden Informationen über eine Emailadresse angezeigt. z.B:
Server:   Server/OU/Firma
Mailfile: Server/OU/Firma/mail\test.nsf

Diese Datenbank hat doch jeder - es ist die NAMES.NSF auf dem Server.

Wenn Du trotzdem diesen Weg des "Gefrickels" weitergehen willst, dann solltest Du Dir (mindestens) folgende Zeilen anschauen und umstellen:

Set db = session.CurrentDatabase
Das öffnet nicht (zwangsläufig) die "lokale Datenbank", sondern prinzipiell die, die gerade offen ist. Siehe daher
Set notesDatabase = New NotesDatabase (server$, dbfile$)

Ferner:
Set archiveDb = New NotesDatabase(m_server, m_mailfilename)
Das ist ganz schlecht, wenn man Code postet: Weder sind m_Server noch m_mailfilename in "Deinem" Code als Variable deklariert, noch ist ersichtlich, wie diesen Werte zugewiesen wurden.

Mein Ratschlag:
Denke zunächst erstmal darüber nach, wie Du prinzipiell zukünftig weiter vorgehen willst, um Deinen Wissensstand zu erhöhen. "Finde" keinen Code und verwende ihn gleich - das kann verheerend sein (ist es dann auch meist). Gehe strukturiert vor. Stelle dann hier konkrete Fragen. Hier wird man Dir dann auch gerne helfen. Aber nicht zu "gefundenem Code", zu dessem Hintergrund Deine Kenntnisse "extrem gering" sind.

Bernhard
« Letzte Änderung: 13.03.06 - 23:24:21 von koehlerbv »

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf in anderes nsf kopieren
« Antwort #4 am: 14.03.06 - 08:47:22 »
Guten Morgen,
Danke erst mal für die Hilfe.

Es geht darum, das ich von meiner Datenbank aus, ein nsf archivieren kann. Dazu muss ich es von server1 auf server2 kopieren. Das Problem ist für mich ist, es geht nicht um die Datenbank welche den Prozess ausführt. Eigentlich sieht das ganze so aus.
server1: Datenbank, welche den Prozess ausführen soll
server2: Auf diesem Server liegt das nsf
server3: Auf diesen Server soll das nsf kommen

Ich bekomme nie die Datenbank kopiert die ich will. Entweder kopiert es diejenige an der ich am arbeiten bin oder es gibt mir den Fehler aus: Variant does not contain an object.

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim archiveDb As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	Set NotesDatabase = New NotesDatabase (server1$, dbfile$)
	Set archiveDb = New NotesDatabase(server2$, dbfile$)
	archiveServer$ = "archibeDb"
	archiveFile$ = "archive\"+db.FileName
	If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
		Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
	End If
	Set collection = db.AllDocuments
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Call doc.CopyToDatabase( archiveDb )
		Set doc = collection.GetNextDocument(doc)
	Wend
End Sub


ps: ich meinte damit meinen code den ich gepostet habe. nicht meinen code den ich geschrieben habe.

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: nsf auf anderen server kopieren
« Antwort #5 am: 14.03.06 - 08:53:26 »
Zitat
Ich bekomme nie die Datenbank kopiert die ich will. Entweder kopiert es diejenige an der ich am arbeiten bin oder es gibt mir den Fehler aus: Variant does not contain an object.


eben, wegen :

Set db = session.CurrentDatabase
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf in anderes nsf kopieren
« Antwort #6 am: 14.03.06 - 08:55:08 »
Code
....

	Set NotesDatabase = New NotesDatabase (server1$, dbfile$)
	Set archiveDb = New NotesDatabase(server2$, dbfile$)
	archiveServer$ = "archibeDb"
	....
[/quote]

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: nsf auf anderen server kopieren
« Antwort #7 am: 14.03.06 - 08:57:46 »
@judicious,

Ist der von Dir zuletzt gepostete Code Dein Code?

Wenn Ja,
Wo werden die Variablen deklariert und belegt?
Du arbeitest mit Variablen die, wie es in dem Code aussieht, niemals deklariert werden!
Zitat
Set NotesDatabase = New NotesDatabase (server1$, dbfile$)

Andreas

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf auf anderen server kopieren
« Antwort #8 am: 14.03.06 - 09:00:54 »
Ja das ist mein Code. diese Variablen sind nur Platzhalter ;) Ich schreibe dort direkt den Server namen rein. Ich habe nur server1+2 geschrieben damit man es einfach mit meinem Beispiel weiter oben nachvollziehen kann, was ich überhaupt will.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: nsf auf anderen server kopieren
« Antwort #9 am: 14.03.06 - 09:05:47 »
Bleibt trotzdem die Frage,

Woher kommt die Variable "Notesdatabase"? (siehe mein Zitat)

Und noch eine kleine Frage am Rande.
Soll denn auch die gesamte Struktur uebernommen werden?
(also "Mail A" ist im Ordner "Ordner A" im Original und soll in der Kopie ebenfalls im "Ordner A" erscheinen)

Andreas
« Letzte Änderung: 14.03.06 - 09:09:17 von ascabg »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: nsf auf anderen server kopieren
« Antwort #10 am: 14.03.06 - 09:08:27 »
Wo initialisierst du denn die Variable db ?

Code
...
archiveFile$ = "archive\"+db.FileName
If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
	Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
End If
Set collection = db.AllDocuments
...

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf auf anderen server kopieren
« Antwort #11 am: 14.03.06 - 09:09:33 »
Code
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim NotesDatabase As NotesDatabase
Dim archiveDb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set NotesDatabase = New NotesDatabase (server1$, dbfile$)
Set archiveDb = New NotesDatabase(server2$, dbfile$)
archiveServer$ = "archibeDb"
archiveFile$ = "archive\"+db.FileName
If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
End If
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.CopyToDatabase( archiveDb )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: nsf auf anderen server kopieren
« Antwort #12 am: 14.03.06 - 09:14:03 »
Ja und?

Du die Frage immer noch nicht beantwortet. Ulrich (eknori) hat weiter oben auch schon mal darauf hingewiesen.

Mir fehlt die Initialisierung der Variable db. So in der Art:

Set db = session.CurrentDatabase


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf auf anderen server kopieren
« Antwort #13 am: 14.03.06 - 09:16:47 »
Ach so das meint ihr. Sorry wie schon gesagt ich blicke da absolut nicht durch, und ich muss das als Prüfungsaufgabe bis morgen Abend fertig haben  >:( ???

Code
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim NotesDatabase As NotesDatabase
Dim archiveDb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set NotesDatabase = New NotesDatabase (server1$, dbfile$)
Set db = NotesDatabase
Set archiveDb = New NotesDatabase(server2$, dbfile$)
archiveServer$ = "archibeDb"
archiveFile$ = "archive\"+db.FileName
If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
End If
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.CopyToDatabase( archiveDb )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: nsf auf anderen server kopieren
« Antwort #14 am: 14.03.06 - 09:32:10 »
Ach so das meint ihr. Sorry wie schon gesagt ich blicke da absolut nicht durch, und ich muss das als Prüfungsaufgabe bis morgen Abend fertig haben >:( ???

Code
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim NotesDatabase As NotesDatabase
Dim archiveDb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set NotesDatabase = New NotesDatabase (server1$, dbfile$)
Set db = NotesDatabase
Set archiveDb = New NotesDatabase(server2$, dbfile$)
archiveServer$ = "archibeDb"
archiveFile$ = "archive\"+db.FileName
If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
End If
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.CopyToDatabase( archiveDb )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub

Was soll das denn? Warum setzt du erst die Variable NotesDatabase und weisst sie dann der Variable db zu? Warum arbeitest du denn nicht gleich mit NotesDatabase weiter?

BTW: eine Variable genauso zu nennen wie eine Klasse geht mit Sicherheit irgendwann in die Hose, aber gewaltig.

Die bessere Alternative wäre das hier:

...
Dim session As New NotesSession
Dim db As NotesDatabase
Dim archiveDb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument

Set db = session.CurrentDatabase

Set archiveDb = New NotesDatabase(server2$, dbfile$)
...

Der Rest sieht auf den ersten Blick ganz brauchbar aus.

Axel

PS:
Sei  mir bitte nicht böse, aber ich werde das Gefühl nicht los, dass dir die absoluten Grundlagen fehlen. Und so willst du die Prüfung schaffen. Ich sehe da etwas schwarz.

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline judicious

  • Junior Mitglied
  • **
  • Beiträge: 53
Re: nsf auf anderen server kopieren
« Antwort #15 am: 14.03.06 - 09:42:52 »
LS ist zum Glück nicht 5% von der Prüfung. 90% und mehr ist alles Formeln. Darum mache ich mir nicht grosse sorgen. Trotzdem würde es mich freuen wenn ich das Script hinbekommen würde.

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim archiveDb As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set db = New NotesDatabase ("mail1", "mail\x.nsf")
	
	Set archiveDb = New NotesDatabase("mail2", "x.nsf")
	archiveServer$ = archibeDb
	archiveFile$ = "archive\"+db.FileName
	If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
		Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
	End If
	Set collection = db.AllDocuments
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Call doc.CopyToDatabase( archiveDb )
		Set doc = collection.GetNextDocument(doc)
	Wend
End Sub

Dieser Code kopiert mir etwas. Nur finde ich das nsf danach nirgends.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: nsf auf anderen server kopieren
« Antwort #16 am: 14.03.06 - 09:55:24 »
Hier ist der nächste Hund begraben.

Set archiveDb = New NotesDatabase("mail2", "x.nsf")
archiveServer$ = archibeDb
archiveFile$ = "archive\"+db.FileName
If (Not(archiveDb.Open(archiveServer$,archiveFiles$))) Then
   Set archiveDb = db.CreateCopy (archiveServer$,archiveFile$)
End If

Das habe ich vorhin übersehen.

In der Variablen archiveServers$ ist mit Sicherheit kein Servernamen enthalten. Außerdem ist hier auch ein Schreibfehler drin. Das Ganze muss so aussehen:

archiveServer$ = archiveDb.Server

Ich würde dir auch empfehlen in den [Options]-Abschnitt Option Declare aufzunehmen. Dann fallen dir nicht deklarierte Variablen sofort auf. Auch fehlt mir eine vernüftige Fehlerbehandlung.
Siehe dazu auch hier: http://www.atnotes.de/index.php?board=3;action=display;threadid=11980;start=0

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz