Autor Thema: doc.UniversalID = unid erstellt eine Kopie  (Gelesen 3315 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
doc.UniversalID = unid erstellt eine Kopie
« am: 08.09.03 - 20:04:55 »
Hi,

folgender Code
Zitat
Sub Click(Source As Button)
   
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument    
   Dim doc As NotesDocument
   Dim unid As String   
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document    
   
   
   unid =    "123456789123456789123456789ABCDE"
'...set value of doc...
   doc.UniversalID = unid
   Call doc.save(False, False)   
End Sub
wird in einem Button ausgeführt wenn das Dok geöffnet ist.

Allerdings wird eine Kopie des Doks mit der neuen UNID erzeugt.
Ich möchte aber keine Kopie, sondern dass die UNID direkt geändert wird.

Meine Fragen:
1) Warum erzeugt das Script eine Kopie?
2) Wie kann ich das umgehen?

bye,
TMC
« Letzte Änderung: 08.09.03 - 20:11:59 von TMC »
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #1 am: 08.09.03 - 20:14:00 »
Die Bedeutung der UNID und der gesamte Background dahinter ist Dir schon bewußt, oder ? Risken und Nebenwirkungen ebenso ?

Wenn Du mit der UNID spielst, sollte Dir auch vollkommen klar sein, warum das Dokument jetzt doppelt da ist.

Kopfschüttelnd,
Bernhard

Glombi

  • Gast
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #2 am: 08.09.03 - 20:15:40 »
Hi,
Auszug aus der Designer Hilfe:
If you modify the UNID of an existing document, it becomes a new document.

Da kann man nix machen. Warum soll denn die UNID geändert werden?

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #3 am: 08.09.03 - 20:19:15 »
Hi Bernhard,

keine Sorge, ist nur ein Test meinerseits  :) Da bin ich schon ein Weichei und mache das nicht auf einer produktiven DB auf dem Server  ;D

Zitat
Wenn Du mit der UNID spielst, sollte Dir auch vollkommen klar sein, warum das Dokument jetzt doppelt da ist.

Eigentlich nicht ganz, wobei: Ich vermute mal weil ich das Doc im Frontend "behandle", d.h. da einfach die ID zu ändern wäre wohl extrem (bis hin zum Client-Absturz?), daher ist Notes so schlau und macht mir eine Kopie?

Na ja, nur eine Idee.

Wie würdest Du denn die UNID eines Doks ändern, komplett im Backend, ohne das Dok hervorzuholen?

Über Tipps bin ich dankbar

bye,
TMC
Matthias

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


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #4 am: 08.09.03 - 20:22:20 »
@Andreas:
den Passus in der Hilfe hab ich leider nicht gesehen :( (obwohl eigentlich genau geschaut?, hab extra nach Einschränkungen gesucht....).

However:
Ich will einem bestehenden Doc eine ID eines anderen Docs "drüberbügeln", um Doc-Links entsprechend umzubiegen, die etwa 20-30mal in einer DB vorkommen.
Das ganze ist kein Einzelfall sondern kommt öfters vor....

Notfalls kann ich mit einer Kopie natürlich auch leben, dann lösch ich dann einfach das andere Doc per Script.

TMC
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #5 am: 08.09.03 - 20:33:37 »
Hi, TMC,

das war ja eine erfrischende Antwort von Dir - bei der Frage hätte ich erstmal was anderes erwartet (auch dieses Forum ist leider nicht frei von Deppen, die dann erstmal hunderte Fragezeichen austeilen und ohne jede Ahnung irgendwelche Belehrungen).
Entschuldige bitte daher meinen "bösen Verdacht".

Wenn Du die UNID eines bestehenden Docs wechselst, dann erzeugt dies auf jeden Fall ein neues Doc beim Speichern - die UNIDs sind der "Kitt, der eine Notes-DB zusammenhält".
Sich eine neue ID auszudenken, ist (mehr als) kritisch. Wenn Du aber eine UNID eines bestehenden Docs übernehmen willst, dann hol' Dir diese, knall' das alte Doc weg und versehe dann das Doc mit der bestehenden ID.
Worüber ich mir jetzt aber nicht ganz im Klaren bin, ist das Replikationsverhalten: Welches Doc wird dann gelöscht / erzeugt / geupdated ?

Wegen "Weichei": Erstens Respekt, zweitens: Ich meß' auch lieber dreimal, bevor ich abschneide. "Kamikaze" verdient keinen Respekt, und wer mich wegen der zweiten Sicherheitskopie oder Test-DB anzählt, dem zeig' ich einen Vogel. Lieber eine "unnötige" Absicherung als die grosse Katastrophe.

Und wenn Du auf weitere Fragen stößt - sag' an ;-)

Farvel (das war dänisch ;-)
Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #6 am: 08.09.03 - 20:49:17 »
Hi Bernhard,

kommst Du aus Dänemark? Will ich nächstes Jahr mal für 2-3 Wochen hin....

Ich hab jedenfalls kein Problem wegen Deines "Verdachts" :-)
Und Nein: Du hast schon Recht, ohne Background-Know-how irgendwelche Hardcore-Geschichten zu machen, das sollte man sich vorher genau überlegen. (und dazu zähle ich auch die UNID-Sache, wie Du schön schreibst vom "Kit"...  :)

However: Ich teste das jetzt mal lokal, und dann die Tage auf einer Test-DB auf einem Testserver. In der Tat ist das Arbeiten mit Repliken dabei interessant.....

Melde mich wieder mit dem ersten Script.....

bye,
TMC
« Letzte Änderung: 08.09.03 - 20:49:47 von TMC »
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #7 am: 08.09.03 - 21:22:19 »
Nein, ich komme (noch;-) nicht aus Dänemark, aber ich verbringe jeden Sommer den August dort (Sallingsund kommune).
Wenn Du Tipps braucht für einen geplanten DK-Urlaub, laß es mich (off-list) wissen ;-)
Siegsdorf (Chiemgauer Alpen) -> Sallingsund sind ca. 1.300 km - da muß man also wirklich dahin wollen ;-)

Sallinsunds "amtskommune" ist Viborg amt, und dann schau Dir mal die Website der "Hauptstadt" an: www.viborg.dk. Das *.nsf sagt uns doch was ;-)

Herzliche Grüsse- und meld' Dich auch wegen Deines UNID-Problems,
Bernhard

PS: Vi ses pa Sallingsund og pa Vesterhavet
PSS: Wobei ich mir jetzt doch nicht so sicher bin mit meinem "dänisch", aber ich geb mir Mühe ;-)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #8 am: 08.09.03 - 22:50:20 »
Vielleicht ist es schon zu spät für mich  ???

Jedenfalls stoße ich hier auf Object Variable not set:

Zitat
Sub Click(Source As Button)
   
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument    
   Dim db As NotesDatabase   
   Dim doc As NotesDocument
   Dim unid As String   
   Dim docZuErsetzen As NotesDocument   
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document    
   'die UNID des freigegebenen Doc holen....   
   unid = uidoc.FieldGetText("IDAPPROVED")
   Messagebox unid, MB_OK, "Field Get Text"
   'jetzt mal das alte Doc herholen welches ich ersetzen will und dann wegwerfen - die UNID hab ich ja bereits :-)
   Set docZuErsetzen = db.GetDocumentByUNID( unid )
   Messagebox "Set doc zu Ersetzen", MB_OK, "Test"      
   docZuErsetzen.remove (True)
   Messagebox "Remove doc zu Erstetzen", MB_OK, "Test"         
   'und nun die ID setzen....
   doc.UniversalID = unid
   Messagebox "Setze ID", MB_OK, "Test"         
   Call doc.save(False, False)   
End Sub

Nach diversen Tests hat er bei folgender Zeile das "Variable not set" - Problem:
Set docZuErsetzen = db.GetDocumentByUNID( unid )

Aber warum nur? Ich übergebe die Variable (unid) wohl sauber als String. Also sollte er doch auch das Doc finden?
Oder ein Denkfehler?


TMC
Matthias

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


Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #9 am: 09.09.03 - 01:26:04 »
Irgendwie begreife ich die Logik die hinter dem Ganzen stecken soll nicht. Du willst ein neues Dokument an die Stelle eine bereits bestehenden Dokumentes setzen? Und dafür verbiegst du die Internen Mechanismen von Domino was die Vergabe von UNID's angeht?
Tschuldigung aber das ist doch von hinten durch das Knie in die Brust geschossen.

Warum kopierst du nicht einfach den Kontent des neuen Dokumentes in das alte Dokument nachdem der entsprechende Status erreicht wurde? Und löscht anschließend das neue Dokument!
Benefit 1: Die Change History geht nicht verloren
Benefit 2: Du bekommst keinen Ärger mit der Replikation, naja, zumindest nicht zuviel Ärger
Wenn du willst kannst du ja dann auch die entsprechenden Teile des neuen Dokumentes die sich geändert haben kopieren.

Thomas


« Letzte Änderung: 09.09.03 - 07:44:32 von Thomas Schulte »
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #10 am: 09.09.03 - 07:11:17 »
@Thomas:
Na ja, wäre auch eine Möglichkeit.
Hat aber da dann u.U. die Problematik bei z.B. 5 Richttextfeldern, 17 Anhängen etc....

TMC
Matthias

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


Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #11 am: 09.09.03 - 07:43:26 »
Wo siehst du da ein Problem. Kopieren ist immer eins zu eins möglich. Wenn du also einen oder mehrere Feldwerte ersetzt dann ist das immer eins zu eins. Egal ob Anhänge, Richttext oder Schlüsselwortfelder.

Thomas
« Letzte Änderung: 09.09.03 - 07:44:07 von Thomas Schulte »
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #12 am: 09.09.03 - 09:14:46 »
Zur Fehlermeldung: Logischerweise hat das nix mit der UNID zu tun - Notes meckert ja eine nicht gesetzte Variable an.
1. Dir fehlt Option Declare - ein absolutes MUSS
2. Dann wäre auch gleich aufgefallen, daß "db" weder deklariert noch instantiiert wurde (falls da nix global gemacht wurde)

Ansonsten: Thomas' Vorschlag ist sicher die sauberste Lösung. Eine Schleife, um alle items zu löschen, eine CopyAllItems - und der Fisch ist geputzt.

Bernhard

Glombi

  • Gast
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #13 am: 09.09.03 - 09:19:47 »
Der Code wird nicht das gewünschte liefern: Du löscht erst das Dokument und setzt dann die UniversalID neu. Dabei wird er wieder ein neues Dokument erstellen.

Ich kann mich den anderen nur anschließen: Besser wäre es, alle Items zu kopieren.

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #14 am: 09.09.03 - 20:19:25 »
ich dank Euch allen!

Werde es jetzt mit CopyAllItems machen, das klappt prima  :)

@Bernhard:
Zitat
Eine Schleife, um alle items zu löschen,

Braucht's das wirklich, wenn ich den Parameter "true" verwende?

Zitat Designerhilfe:
Zitat
replace
Boolean. If True, the items in the destination document are replaced.

Und das klappt bei mir auch prima. Oder hast Du da schlechte Erfahrungen gemacht?

TMC
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #15 am: 09.09.03 - 20:46:55 »
Das Rauswerfen aller bestehenden Items würde nur dem Zweck dienen, evtl. vorhandene und nicht mehr gewünschte Items zu entfernen - nicht mehr und nicht weniger.
Wenn das nicht erforderlich sein sollte, kannst Du es nach meiner Erfahrung durchaus auch weglassen, das "Replace" funktioniert schon.

HTH,
Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #16 am: 09.09.03 - 21:28:23 »
Stimmt, Bernhard :-) Hat auch mein Test so ergeben.

OK, nun zur Schleife.....


Set item = doc.GetFirstItem(".....")
......
Call doc.RemoveItem( "...." )

Er will ja unbedingt den Namen der Items, wie bringe ich Notes dazu, dass er mir alle rausschmeißt?

Hab bisher nur Schleifen mit DocCollections gemacht.....
Ich vermisse sowas wie
While not (Item is nothing)
Call doc.RemoveItem
Set item = collection.GetNextItem(doc)
Wend


TMC
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #17 am: 09.09.03 - 21:36:07 »
Schau mal in die NotesDocument.Items property. Darüber machst Du dann eine ForAll-Schleife - Du kannst das Beispiel der Designer-Help fast 1:1 übernehmen.

HTH,
Bernhard

PS: Aber wie schon gesagt: Items rausschmeissen nur wenn notwendig.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:doc.UniversalID = unid erstellt eine Kopie
« Antwort #18 am: 09.09.03 - 22:01:08 »
Forall i In doczuErsetzen.Items
        Call i.Remove
End Forall

danke, war ja wirklich easy  ;D

Nun endlich ist es vollbracht und klappt 1a  :) :)

also merci nochmal an die Helfer, besonders Bernhard.

Da geb ich mal 'nen virtuellen Sekt aus: Y Y Y Y

Prost

TMC
« Letzte Änderung: 09.09.03 - 22:02:07 von TMC »
Matthias

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


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz