Autor Thema: Grundsätzliche Frage zur DocumentUniqueID und Speicherkonflikten  (Gelesen 6507 mal)

Offline MrMagoo

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
  • AAAhhh
Tach zusammen,

also mal eine Grundsätzliche Frage zur DocumentUniqueID und zu Speicherkonflikten. Wir haben zwei Speicherkonflikte in einer Datenbank, aber ich kann diesen kein Original Dokument zuordnen. Frage 1 hat das Speicherkonfliktdokument und das Original Dokument die gleiche DocumentUniqueID oder wird eine neue vergeben? Frage2 gibt es sonst noch eine Möglichkeit das Original Dok zu finden??

Danke für Eure Hilfe!!!

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
DocumentUniqueIDs sind eindeutig (solange niemand an den Dokumenten "rumspielt"), heisst auch die Konfliktdokumente haben eigene, neue UNIDs.

Ein Konfliktdokument ist technisch ein Antwortdokument, die UNID des dazugehörigen Hauptdokumentes findet sich im Feld $Ref
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Man kann durchaus eine Ansicht aufbauen, die Antwort-Dokumente (in Deinem Fall eben auch Konfliktdokumente) anzeigt, auch wenn das Hauptdokument dazu nicht vorhanden sein muss (ob ausgeblendet oder nicht mehr vorhanden).
Ich tippe allerdings mal, dass das Hauptdokument in der Tonne gelandet ist.

DocumentUniqueIDs sind eindeutig (solange niemand an den Dokumenten "rumspielt"), heisst auch die Konfliktdokumente haben eigene, neue UNIDs.
Um eine bereits vorhandene UNID doppelt zu vergeben, reicht "spielen" glücklicherweise nicht  :)

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Stimmt, man muss schon heftig spielen, aber unmöglich ist es nicht. Dass allerdings eine doppelte UNID vom System vergeben würde, ist so gut wie auszuschliessen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Die "Bordmittel" (LotusScript Notes / Domino classes) verhindern es jedenfalls wirkungsvoll, auch mittels der API sehe ich keinen Weg (ies sei denn, ich hätte einen Bug übersehen, dann sowas wäre ein Bug).

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Mit der API geht es definitiv. Ich meinte, es funktioniert auch bei der NotesDocument-Class, die UNID dort ist R/W und kann gesetzt werden, kann aber sein, dass das unterdessen abgefangen ist ??
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
oder via DXL, ist im Tag <noteinfo> enthalten.

In R5 hatte ich damit auch mal experimentiert, ich glaube es war die von Jens erwähnte Property der N.DocumentClass.
Matthias

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


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Das wird abgefangen, Jens. Auch wenn natürlich zu warnen ist vor einer Verwendung der Property im Write-Modus, da man wissen muss, welche UNIDs überhaupt zulässig sind in einer DB. Nicht nur der Access auf ein Dokument mit einer ungültigen UNID (zum Beispiel aus einer anderen DB), sondern auch der Zugriff auf eine Dokument via UNID, die es nicht mehr gibt (weil Dokument in der Tonne) führt schon zu Fehlemeldungen.
Egal wie: Vor einer UNID-Manipulation muss strengstens gewarnt werden. Ich sehe auch keinen Grund, warum das via LS (API okay - für die Hartgesottenen, die dann ja in der Regel auch wissen, was sie tun) überhaupt möglich gemacht wurde.

Bernhard

PS: @Matthias - ist das nicht die NoteID ? Und wenn man die (oder auch die UNID) nutzt, wird m.E. das bestehende Doc mit der entsprechen NoteID / UNID gekickt. Gegen doppelte wehrt sich Notes.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Achso, es geht hier um *doppelte* UNIDs, hatte nur halb gelesen.

PS: @Matthias - ist das nicht die NoteID ? Und wenn man die (oder auch die UNID) nutzt, wird m.E. das bestehende Doc mit der entsprechen NoteID / UNID gekickt. Gegen doppelte wehrt sich Notes.

Nein, Bernhard, UNID. Schau Dir mal einen DXL-Export an. Würde ja auch überhaupt keinen Sinn haben, wenn da nicht auch die UNID enthalten wäre.
Allerdings wird das Import-Verhalten dann über DocumentImportOption Property gesteuert. Wird nicht unbedingt "gekickt", steht aber alles in der Help beschrieben (create, ignore, replace, or update).
Matthias

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


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Ok, dann wurde das zugemacht. Ich hab in 4.5 oder 4.6 damit experimentiert und dort konnte ich mit LS doppelte UNIDs anlegen, kann allerdings sein, dass das ein Bug in der betreffenden Unterversion war. Natürlich ist das dann so nicht in Produktion gegangen ..... Es gibt übrigens - ganz selten - Gründe, die UNID zu manipulieren, will da aber nicht näher drauf eingehen, da das  - wie Bernhard richtig anmerkt - eine ganz, ganz heikle Angelegenheit ist.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Danke, Matthias, für die DXL-Erläuterung, und an Jens für die Bestätigung "heikle Angelegenheit" - wir denken da ganz sicher identisch.

Matthias: Ich habe das (weil ich mit UNIDs "fast nie" - siehe Jens und meine Hinweise - "spiele") noch nicht probiert, aber ich erwarte aus anderen Erfahrungen folgende Reaktionen:
- Create: Das klappt, wenn die UNID gültig - ein weitres Feld ! - (und nicht doppelt) ist
- Ignore: "Notes, vergiss meinen Vorschlag - mach selber eine !"
- Replace: "Hau wech die bestehende Note und nimm meine !"
- Update: "Hasso, such die Note ! Wenn Du sie findest (!), dann bügel' meinen Stuff d'rüber !"

Ein hochinteressantes Thema mit seltenen praktischen Bezügen (fast immer gilt: "Notes rules". FAST immer ...  ;D

Bernhard

Marinero Atlántico

  • Gast
Ich sehe vor allem keinen Sinn darin.
Btw. gilt es in den meisten Fällen in RDBMS als best practice einen autogenerierten BigInt als Primary Key eines Tupels (= Zeile) zu nehmen. Also so ähnlich wie Universal ID.
Eine UniversalID soll den Zweck haben, ein Dokument irgendwie wiederzufinden.
Welchen weiteren Zweck soll sie noch haben?
« Letzte Änderung: 27.04.05 - 23:58:41 von Marinero Atlántico »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
@Bernhard:
genau so (oder so ähnlich) wird dies über die erwähnte Property der NotesDXLImporter gecovert.

Ich hatte vor ca. 1 Jahr mal folgende Aufgabe:
Eine DB, mehrere 1000 Dokumente mit vielen Doc-Links auf Docs der selben DB.
Nun sollten Docs ersetzt werden. Die neuen Docs hatte ich "in der Hand", mussten nur noch rein. Einfach so rauswerfen und neues Doc rein: dann geht das mit dem Doc-Link ins leere. Da spielte ich dann mit dem Gedanken, das alte Doc zu löschen, die UNID vom neuen Doc zu manipulieren und dann reinzuspielen.
Bin aber dann davon wieder abgekommen, und hab dann einfach nur die Items rübergeschaufelt. Was aber u.U. gewisse "Techniken" erfordert (siehe KB - Einträge).
Matthias

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


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
@Matthias:
Schweissabwisch: Ich habe meine anderen Erfahrungen jetzt einfach auf DXL übertragen, und wie es kaum zu erwarten war, läuft es da identisch  :)

@Marinero:
Und was nützt das im praktischen und gerade besprochenen Umfeld, Axel ?
Für
ABC GmbH, 1230 Testhausen, Goethestrasse 4
bekommst Du einen separaten Primary Key wie auch für
ABC AG, 1234 Testhausen / Gewerbegebiet, Goethe-Strasse 4-25

Es sei denn, Du greifst schon bei der Erstellung ein - aber das ist ja "nur" der anwenderfreundliche Vorgriff auf das, um was es Jan geht.

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
@Axel:
Siehe oben meine damalige Problematik wegen Doc-Links. Ich kenne jetzt keine einfache Möglichkeit, alle Doc-Links einer DB einfach zu aktualisieren, da die Referenz ja in den Docs steht. Selbst wenn die Doc-Links selbst einfach umzubiegen wären: möchte man einen Verweis auf ein anderes Doc umbiegen, so muss man u.U. über mehrere 1000 Dokumente gehen. Nur wegen dem Doc-Link.
Und das halte ich jetzt für aufwändiger in Notes als in RDBMS "mal schnell" durch eine Table zu wandern um diese Ersetzung vorzunehmen.
Matthias

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


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Richtig, Matthias, dankt der "Unstrukturiertheit" von Notes ist es nicht wirklich möglich, Doclinks zu 100% zu finden. Bei den starren Strukturen von relationalen DBs ist das deutlich einfacher.

Axel: Leider steckt in der UNID mehr drin als nur ein eindeutiger Key. In der API-Doku und im exzellenten Buch von Normunds LS to C-API ( http://www.ls2capi.com ) ist das genauer erklärt.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Marinero Atlántico

  • Gast
Ich hab an die anderen Bereiche, wo Domino die UniversalID benutzt nicht gedacht.
Ja klar.
Lotus hätte für solche weiteren, mehr Anwendungs-Service-orientierten (oh was ein Wort ::) ) Features besser eine zweite, universell eindeutige ID verwenden sollen, isn't it? Ist ja einfach nur ein Algorythmus. 
Zitat
@Marinero:
Und was nützt das im praktischen und gerade besprochenen Umfeld, Axel ?
Nur ein Vergleich auf ein anderes System.
Zitat
ABC GmbH, 1230 Testhausen, Goethestrasse 4
bekommst Du einen separaten Primary Key wie auch für
ABC AG, 1234 Testhausen / Gewerbegebiet, Goethe-Strasse 4-25
Nicht ganz klar, ob du das meinst, aber man kann auf Datenbank-Definitionsebene "natürliche" Eindeutigkeits-Constraints einbauen.

Unter der Annahme, das Namen von Firmen eindeutig sind, kann man das auf der Ebene der Datenbank abfangen. (S. unique Constraint)


Falls das jemand diskutieren will, können wir das in einen neuen Thread umpacken.
Vorschlag:
Code
CREATE TABLE Customer (	
					ID BIGINT  NOT NULL  GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE ), 
					name VARCHAR(50),
					plz char(5),
					city varchar(50),
					street varchar (80)
);
	
	CREATE UNIQUE INDEX "i_Cust_Name" ON Customer (name);
	ALTER TABLE Customer ADD CONSTRAINT "PKEY_USER" PRIMARY KEY ("ID");

Btw. sehe ich starke Parallelen zu der oben geführte Debatte zu UniversalID.
Leute, die das als Best Practice vorschlagen, sagen dass der Primary Key 1 und nur genau 1 Aufgabe hat und genau dafür optimiert werden soll.
Aufgabe: Eindeutigkeit.
Eigenschaften: Performance (als Datentyp ist LongInt für selects, joins, etc. am schnellsten).

Andere Aufgaben packt man nicht da rein.
Dafür nimmt man andere Elemente.
Beispiel: Für die "natürliche" Eindeutigkeit belegt man sogenannte "natural keys" mit einem Unique Constraint.
« Letzte Änderung: 28.04.05 - 07:53:58 von Marinero Atlántico »

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Genau darin liegt ein Problem, dass die UNID Mehrfachnutzen aufweist, ich will das aber nicht als Vorwurf an die Architekten des Systems sehen, das ist historisch gewachsen und als man das System entwarf, waren die Kenntnisse noch nicht so weit gefestigt. Man darf dabei nicht vergessen, dass es für diese Art von Datenhaltung keine Tradition vor Notes gibt, im Gegensatz zur relationalen Datenhaltung.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline MrMagoo

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
  • AAAhhh
Ui das sind ja viele antworten, danke erstmal

Offline MrMagoo

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
  • AAAhhh
so jetzt sieht die welt schon etwas klarer aus, aber leider nur etwas. Das $ref Feld des ersten Konfliktes verweißt auf den zweiten Konflikt. Aber das $ref Feld des zweiten Konfliktes verweißt auf sich selber. Wie ist das möglich?   

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz