Autor Thema: Dokument über die ID kopieren  (Gelesen 10286 mal)

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Dokument über die ID kopieren
« am: 04.11.04 - 11:59:29 »
Hallo,

ich habe eine Dialogmaske, in der ich Werte, die meinem Suchstring entsprechend ausgebe.
Ein Feld "Aktuelles" gibt mein ausgewähltes Dokument aus dem Adressbuch zurück.
bzw. nur Firstname, Lastname und CompanyName

Ein Listfeld "Ergebnisliste" zeigt die übereinstimmenden Dokumente aus meinem anderen Adressbuch an.
Auch hier werden nur die o.g. Felder aufgeführt.
Über einen Knopf versuche ich jetzt auf das"wahre" Dokument zuzugreifen, und den Aktuellen Wert (auch hier das "wahre" Dokument) durch den gefundenen Wert, den ich im Listfeld markiere, zu überschreiben.
Habe auf der Dialogmaske ein Feld Unids angelegt und über einige Test

@Prompt([OK];"";Ergebnisliste);
tmp0 := @Text(Ergebnisliste);

tmp:=@Member(tmp0;Liste1);

@Prompt([OK];"";@Text(tmp));

UNID := @Subset(@Subset(Unids;tmp);-1);
@Prompt([OK];"";@Text(UNID))

die ID und das markierte Element ausgelesen.
Wie kann ich jetzt über die ID auf die Dokumente zugreifen?

Danke

Selin
Windows XP
Notes 6.5

Offline mibo11

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
Re: Dokument über die ID kopieren
« Antwort #1 am: 04.11.04 - 12:03:13 »
@GetDocField( DokumentUNID ; Feldname ) liefert dir das Ergebnis eines Feldes.

Gruß Sascha

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: Dokument über die ID kopieren
« Antwort #2 am: 04.11.04 - 13:41:19 »
Hi,

@GetDocField/@SetDocField funktionieren nur wenn sich das Dokument in der gleichen DB befindet.

Wenn ich das richtig verstehe, geht's hier aber um verschiedene Datenbanken. Dann bleibt nur der Weg über Script.

Ganz vereinfacht geht's so:

...
Dim db As NotesDatabase
Dim doc As NotesDocument

Set db = New NotesDatabase( "Name des Servers", "Name der Datenbank")
Set doc = db.GetDocumentByUNID( "Document ID")
...


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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #3 am: 04.11.04 - 14:00:24 »
Hallo,

bin grad' etwas verwirrt

Habe in meiner lokalen names.nsf diese Dialogmaske
Dort habe ich dem Knopf hinterleigt:

Sub Click(Source As Button)
   Dim ws As New notesUIWorkspace
   Dim doc As NotesDocument
   Dim targetdb As New NotesDatabase( "Server", "Datenbanken/abc.nsf" )
   Dim dc As NotesDocumentCollection
   
   
   Set doc = ws.CurrentDocument.document
   
   Set dc = targetdb.Search( |"|+doc.Ergebnisliste(0)+|"| ,Nothing,0 )
   
   Set doc = dc.GetFirstDocument
   Msgbox doc.UniversalID
   
End Sub

brauche ich dann noch die andere DB hier im Script?
Weil, ich muss ja auf beide DB's zugreifen??

danke


Windows XP
Notes 6.5

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: Dokument über die ID kopieren
« Antwort #4 am: 04.11.04 - 20:52:48 »
Hi,

im Moment bin ich grad etwas verwirrt.

...
Dim targetdb As New NotesDatabase( "Server", "Datenbanken/abc.nsf" )
...
Set dc = targetdb.Search( |"|+doc.Ergebnisliste(0)+|"| ,Nothing,0 )
...

Mit diesen Zeilen greifst du doch schon auf die andere DB zu.

...
Set doc = dc.GetFirstDocument
...

Und sofern die Suche ein Dokument findet hast du hiermit Zugriff auf das Dokument in der anderen Datenbank. Wo ist denn nun das Problem?

Was wird denn bei doc.Ergebnisliste(0) zurückgeliefert?


Axel



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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Dokument über die ID kopieren
« Antwort #5 am: 04.11.04 - 21:40:02 »
brauche ich dann noch die andere DB hier im Script?
Weil, ich muss ja auf beide DB's zugreifen??

Ähm, ja. Bin aber jetzt auch verwirrt.

Kennst Du Dich mit Lotus Script aus? Bitte dringend ein Buch lesen und/oder eine Schulung besuchen. Die Quell-DB selbst hast Du nicht instantiiert, aber ein Dokument davon. Und die 2. DB ist instantiiert, wie Axel schon schrieb.
Man kann zwar jetzt auf die Schnelle helfen, aber ich befürchte, dass Du aufgrund fehlender Basics dann das nicht 100% verstehst.

Ist auch nicht böse gemeint, sondern ein gut gemeinter Rat.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


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: Dokument über die ID kopieren
« Antwort #6 am: 05.11.04 - 08:47:08 »
Hi,

ich denke mal es geht um die Übernahme eines Wertes aus dem aktuellen Dokument in ein Dokument, auf das per UNID in einer anderen Datenbank zugegriffen werden soll.
Aber das ist ein bisschen wie Kaffeesatzleserei.

Wenn dem so ist, dann braucht man die Quell-DB nicht zu instanzieren. Dafür reicht das Quell-Dokument und das passiert auch in dieser Zeile

   Set doc = ws.CurrentDocument.document


Aber was mir aufgefallen ist, weiter unter im Code wird doc mit dem "Zieldokument" überschrieben. So kann das auf keinen Fall funktionieren.


Axel





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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #7 am: 08.11.04 - 12:26:22 »
Hallo,

also hier ist mein Script

Sub Initialize
   Dim s As New NotesSession
   Dim WS As New NotesUIWorkspace
   Dim View As NotesView
   Dim db As NotesDatabase
'Die DB, in die kopiert werden soll
   Dim targetdb As New NotesDatabase( "Server", "Datenbanken/VIP.nsf" )
   Dim dc As NotesDocumentCollection
   Dim source As NotesUIDocument
   
   Dim checkdc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim Flag As Variant
   Dim SucheName() As String
   Dim Unids() As String
   
   Dim tmpdoc As NotesDocument
   Dim modifyDate As Variant
   
   Dim i As Integer
   Dim found As Integer
   
   Set db = s.CurrentDatabase
   Set checkdc = db.UnprocessedDocuments
   Set doc = checkdc.GetFirstDocument
   
   
   Do While Not doc Is Nothing   
      
      found = False
      
      'Prüfe Nachname und Vorname
      Set dc = targetdb.Search( |Lastname = "| + doc.LastName(0) + |" & Firstname ="| + doc.FirstName(0) + |"|,Nothing,0 )
      
      
      
      If dc.Count > 0 Then
         Msgbox(dc.count)
                 'Hier gibt es einen Treffer:            
         found = True
         Redim SucheName(dc.count)
         Redim Unids(dc.count)
         
         For i = 1 To dc.count
            Set tmpdoc = dc.getNthDocument(i)
            SucheName(i-1) =tmpdoc.LastName(0) + ", " + tmpdoc.FirstName(0)+ " " +tmpdoc.CompanyName(0) + " (" + Format$( doc.LastModified, "Short Date")+")"
            Unids(i-1) = tmpdoc.UniversalID
         Next
         
         doc.Ergebnis = SucheName
         doc.Liste1 = SucheName
         doc.Unids = Unids
                     
         
         doc.Aktuell =doc.Lastname(0)+ ", " + doc.FirstName(0)+ " " + doc.CompanyName(0)
         
         
         Flag = WS.Dialogbox("dialog", True, True, False, False, False, False, "Export", doc, False)
         
         
      Else
                   ' Kein Treffer: Dok. kann kopiert werden
         
         Call doc.CopyTodatabase(targetdb)
         Set source= WS.CurrentDocument
         
         
         
      End If
      Set doc = checkdc.GetNextDocument(doc)
      
      Loop   'do while not doc is nothing
End Sub

Eine Dialogmaske wird aufgerufen.
Mit Feldern Aktueller Wert
und die Ergebnisliste
liste1 und UNIDS

Zwei Knöpfe habe ich noch ind er Maske
Bei dem einen habe ich testhalber mal folgendes gemacht

@Prompt([OK];"";Ergebnisliste);
tmp0 := @Text(Ergebnisliste);

tmp:=@Member(tmp0;Liste1);

@Prompt([OK];"";@Text(tmp));

UNID := @Subset(@Subset(Unids;tmp);-1);
@Prompt([OK];"";@Text(UNID))

Somit habe ich von den Dokumenten, die ich aus der Ergebnisliste wähle, die DOCIDs und müsste
das Originaldokument z.B. überschreiben können.
Ich gebe nur Teile aus dem Dokument in meiner Ergebnisliste aus (Name, Vorname, Firma)
und im Feld Aktueller Wert genauso.





Windows XP
Notes 6.5

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: Dokument über die ID kopieren
« Antwort #8 am: 08.11.04 - 12:40:37 »
Hi,

schön, aber wo ist jetzt das Problem bzw. die Frage, oder ist das nur zur Info?   ??? ???


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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #9 am: 08.11.04 - 14:07:23 »
das Problem bzw die Frage ist,

wo setzt ich was ein, damit ich das Originaldokument von Feld Aktueller Wert durch einen der Originaldokumente aus Feld Ergbebnisliste, welches ich markiere, ersetzen kann??

Danke
Windows XP
Notes 6.5

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: Dokument über die ID kopieren
« Antwort #10 am: 08.11.04 - 14:31:32 »
Hi,

also ehrlich gesagt stehe ich im Moment etwas auf dem Schlauch was du genau meinst.  :-\

wo setzt ich was ein, damit ich das Originaldokument von Feld Aktueller Wert durch einen der Originaldokumente aus Feld Ergbebnisliste, welches ich markiere, ersetzen kann??

Was ist jetzt das Orginal und was wird wo ersetzt?  Wie passt das mit deinem Script zusammen? Das Feld Ergebnisliste ist ja in einem Dialog enthalten, so hast du das ja oben beschrieben, wo und wann wird den der Dialog aufgerufen?

So ganz habe ich auch immer noch nicht verstanden, was du eigentlich machen willst. Versuch mal mit ganz einfachen Worten das Problem zu beschreiben.


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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #11 am: 08.11.04 - 14:46:22 »
Hallo Axel,

ok, ich versuchs mal:
Es geht darum Kontaktdaten aus dem persönlichen Adressbuch in ein Kundenadressbuch zu exportieren.
Bei dem Exportieren sollte natürlich geprüft werden, ob dieser Mensch in der Kundendatenbank (VIP.nsf) schon vorhanden ist.
Wenn ja, kommt eine Dialogmaske (ich krieg das Bild der Maske nicht hier rein. Klappt irgendwie nicht)
In der Dialogmaske ist ein Feld "Aktuelles" Da wird der Nachname, Vorname und die Firma aus dem zu exportierenden Wert (persönliches Adressbuch) ausgelesen.
und ein Feld Ergebnisliste (Listfeld). Hier stehen die übereinstimmenden Werte aus der Kudnendatenbank (auch nur Nachname, Vorname und Firma)
Will ich jetzt den aktuellen Wert in die Kundendatenbank, so markiere ich einen Eintrag in der Ergebnisliste und klicke auf den Knopf "Ersetzen" um den gefundenen Wert durch den aktuellen Wert zu ersetzen oder "Hinzufügen", um den aktuellen Wert zusätzlich in die Kudnendatenbank hinzuzufügen.
Da ich ja nur die 3 Felder, nämlich Nachname, Vorname und Firma in der Dialogmaske auslese, wollte ich wissen, wie ich da mit dem kompletten Datensatz bzw Kontakt arbeiten kann.
Wie kann ich also das Dokument z.B. überschreiben?

Ich hoffe, ich konnte es einigermaßen klar erläutern..


Danke nochmal vielmals

Selin
Windows XP
Notes 6.5

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: Dokument über die ID kopieren
« Antwort #12 am: 08.11.04 - 15:24:19 »
Hi,

yoo, jetzt ist das Ganze klarer geworden. Ich denke mal das Hinzufügen ist nicht das Problem, sondern das Ersetzen, richtig?.

Auf jeden Fall gehört der Code für's hinzufügen und Ersetzen in die beiden Schaltflächen in der Dialogmaske.

Für das Ersetzen brauchst du die ID des gewählten Dokumentes. Ich würde das über folgenden Trick lösen.

Die Einträge für das Listenfeld setzt du ja in deinem Script zusammen:

...
SucheName(i-1) =tmpdoc.LastName(0) + ", " + tmpdoc.FirstName(0)+ " " +tmpdoc.CompanyName(0) + " (" + Format$( doc.LastModified, "Short Date")+")"
...

Ändere das so ab:
SucheName(i-1) =tmpdoc.LastName(0) & ", " + tmpdoc.FirstName(0)& " " & tmpdoc.CompanyName(0) & " (" & Format$( doc.LastModified, "Short Date") & ")" & "                    ~" & tmpdoc.UniversalID


Die 20 Leerzeichen dienen dazu, dass die DokID für den User "nicht sichbar" angezeigt wird. Die Anzahl kannst du entsprechend anpassen.

In dem Ersetzen-Script nimmst du den markierten Eintrag des Listenfeldes und "extrahierst" die ID.


...
intPos = InStr(doc.Ergebnisliste(0), "~")
strID = Mid$(doc.Ergebnisliste(0), pos+1)
...

 
Mit dieser ID kannst du dann auf das Dokument zugreifen.


...
Dim dbTarget As NotesDatabase
Dim docTarget As NotesDocument
...

'Hier kommt die Ermittlung der ID rein (Code siehe oben)

...
Set dbTarget = New NotesDatabase( "Name des Servers", "Name der Datenbank")
Set docTarget = dbTarget.GetDocumentByUNID( strID)
'Ab hier kann das Dokument manipuliert werden
...


Es gibt sicher noch andere, und elegantere, Wege das zu realisieren, aber auf die Schnelle hatte ich nix besseres.


Axel


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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #13 am: 08.11.04 - 15:46:19 »
supi, danke

um das Dokument zu ersetzen, sollte ich da zuerst das Dok aus de Kundendatenbank löschen und den aktuellen Wert einfügen oder gibt es hierfür ein Befehl?
Windows XP
Notes 6.5

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: Dokument über die ID kopieren
« Antwort #14 am: 08.11.04 - 16:02:39 »
Hi,

um das Dokument komplett zu ersetzen, musst du es erst löschen. Dafür gibt es keinen Befehl oder Funktion.


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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #15 am: 09.11.04 - 14:07:05 »
In dem Ersetzen-Script nimmst du den markierten Eintrag des Listenfeldes und "extrahierst" die ID.


...
intPos = InStr(doc.Ergebnisliste(0), "~")
strID = Mid$(doc.Ergebnisliste(0), pos+1)
...

 
Mit dieser ID kannst du dann auf das Dokument zugreifen.


...
Dim dbTarget As NotesDatabase
Dim docTarget As NotesDocument
...

'Hier kommt die Ermittlung der ID rein (Code siehe oben)

...
Set dbTarget = New NotesDatabase( "Name des Servers", "Name der Datenbank")
Set docTarget = dbTarget.GetDocumentByUNID( strID)
'Ab hier kann das Dokument manipuliert werden
...

Mit Set docTarget = dbTarget.GetdocumentByUNID(strID) klappt das nicht. Da kommt die Meldung "Invalid universal ID"
Mein Ersetzen Script sieht so aus...

Sub Click(Source As Button)
   Dim ws As New notesUIWorkspace
   Dim doc As NotesDocument
   Dim dc As NotesDocumentCollection
   Dim docTarget As NotesDocument
   Dim dbTarget As NotesDatabase
   
   Set dbTarget = New NotesDatabase(  "Server", "Ordner/VIP.nsf" )
   Msgbox("db")   
   Set docTarget = dbTarget.GetDocumentByUNID(strID)
   
   Set doc = ws.CurrentDocument.document
   Msgbox("doc")
   
   
   intPos = Instr(doc.Ergebnisliste(0), "~")
   strID = Mid$(doc.Ergebnisliste(0), pos+1)
   Msgbox(strID)
   
   '   Set dc = dbTarget.Search( |"|+doc.Ergebnisliste(0)+|"| ,Nothing,0 )
   'Set doc = dc.GetFirstDocument
   
   
End Sub


Was ist da falsch?

danke + Gruß
Selin


 
Windows XP
Notes 6.5

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dokument über die ID kopieren
« Antwort #16 am: 09.11.04 - 14:11:54 »
Und an welcher Stelle ermittelst Du die UNID ?? strID ist ja nicht mal deklariert (also hast Du noch nichtmal Option Declare gesetzt !) ...

Bernhard

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: Dokument über die ID kopieren
« Antwort #17 am: 09.11.04 - 14:18:28 »
Hi,

so kann das auch nicht gehen. Als Erstes erwartet GetDocumentByUNID einen String als Parameter. Du hast die Variable nicht deklariert. Außerdem belegst du die Variable garnicht.

Sub Click(Source As Button)
   Dim ws As New notesUIWorkspace
   Dim doc As NotesDocument
   Dim dc As NotesDocumentCollection
   Dim docTarget As NotesDocument
   Dim dbTarget As NotesDatabase
  
   Dim intPos As Integer
   Dim strID As String
  
   Set doc = ws.CurrentDocument.document
   Msgbox("doc")
  
   intPos = Instr(doc.Ergebnisliste(0), "~")
   strID = Mid$(doc.Ergebnisliste(0), intPos+1)
   Msgbox(strID)


   Set dbTarget = New NotesDatabase(  "Server", "Ordner/VIP.nsf" )
   Msgbox("db")  
   Set docTarget = dbTarget.GetDocumentByUNID(strID)
  
    
   '   Set dc = dbTarget.Search( |"|+doc.Ergebnisliste(0)+|"| ,Nothing,0 )
   'Set doc = dc.GetFirstDocument
  
End Sub

Sei mir nicht böse, aber solche Dinge sind eigentlich Grundwissen in Script. An deiner Stelle würde ich mich erstmal in Script einarbeiten und dann solche Probleme lösen. Im Moment baust du einfach irgendwelche Scriptteile zusammen, ohne dir über die Funktion und Voraussetzungen bewusst zu sein.

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

Offline Selin

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 532
  • Geschlecht: Weiblich
Re: Dokument über die ID kopieren
« Antwort #18 am: 09.11.04 - 14:21:28 »
Danke.

Ja hast Recht.
Versuche das zwar nachzuvollziehen, aber es fällt mir schwer nur mit Büchern.
Schulung hatte ich zwar auch schon, aber der Trainer war nicht wirklich gut.
Na ja....
Windows XP
Notes 6.5

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Dokument über die ID kopieren
« Antwort #19 am: 09.11.04 - 15:41:07 »
Schulung hatte ich zwar auch schon, aber der Trainer war nicht wirklich gut.

Das ist ja interessant, auch für andere. Wen hattest Du denn ? Welches Schulungscenter ?

Ciao
Don Pasquale

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz