Domino 9 und frühere Versionen > ND8: Entwicklung

Felder aus einer anderen Datenbank übernehmen

<< < (3/3)

Peter Klett:
Doch, warum nicht? Habe ich in dem anderen Thema irgendwo etwas von @GetDocField geschrieben gehabt.

Generell geben wir hier Tipps in die (hoffentlich) richtige Richtung, dass dabei auch mal eine Nuance nicht ganz ausgereift sein kann - also nicht 100 %ig in den Kontext passt - , halte ich für normal. Der Rest nennt sich dann Transferleistung ...

Um an dem Beispiel des anderen Themas zu bleiben: Da habe ich geschrieben, dass ich nur die ID als Alias übernehmen würde, und mir dann später über die ID die restlichen Werte holen würde, um ein potentielles 32 kB-Problem von vorneherein einzuschränken.

Also die Liste aufbauen mit

Sichtbarer Wert1|ID1
Sichtbarer Wert2|ID2

und dann nachher über die ausgewählte ID (also den Alias) die restlichen Werte aus dem Dokument zu holen. In der gleichen Datenbank kannst Du das mit @GetDocField machen, ansonsten ein Lookup auf eine Ansicht in einer fremden Datenbank, in der die Dokumente nach ID sortiert sind.

Was sollte daran nicht funktionieren?

marsu_2:
Hi Peter, bitte versteh das nicht als Angriff. Ich versuche nur die Unterschiede zwischen der einen und der anderen Methode zu verstehen.

Allgemein wurde gesagt mehrere @DBLockups sind bezüglich der performance nicht gut!?

Ich habe das dirty bisher immer so gemacht, kann aber auch nachvollziehen das das nicht sehr performant ist.

So wie ich es bisher verstehe bleibt mir aber nur die Entscheidung zwischen 32k Problematik also das mein String, den ich in der Source-DB zusammensetze, zu groß wird. Oder mehreren @DBLockups bei denen die Performance dann aber wieder leidet?

Ich verstehe nicht welchen Vorteil der Alias bei zwei unterschiedlichen DB's haben soll? Außer das er eindeutiger ist als vielleicht ein Name?

Den Vorteil den Marco nennt

--- Zitat --- Diese Funktion ist rasend schnell, weil sie über den ID-Index und nicht über eine Ansichtssuche geht.
--- Ende Zitat ---
gibt es dann ja nur innerhalb einer DB und nicht wenn ich auf eine andere DB zurückgreife richtig?

   

cebolina:
Ich versuch mal, etwas Licht ins Dunkel zu bringen.

@GetDocField funktioniert nur innerhalb der selben Datenbank. Sobald eine zweite DB im Spiel ist, brauchst du @DBLockup.


--- Zitat ---Ich verstehe nicht welchen Vorteil der Alias bei zwei unterschiedlichen DB's haben soll? Außer das er eindeutiger ist als vielleicht ein Name?

--- Ende Zitat ---
Stell dir vor, es gibt zwei namensgleiche Personen (Fritz Müller). Beide Personen sind in der Ansicht enthalten. Hier gilt es die beiden anhand der UniqueID zu unterscheiden. Du könntest die Unterscheidung auch durch ein weiteres Kriterium erreichen - bspw. mit einer eindeutigen Personalnummer. Dann müsste deine Spalte etwa so aussehen:
Müller Fritz (4711)
Müller Fritz (0518)

Wenn du aber bei der UniqueID bleibst (wie mehrfach vorgeschlagen), wirst du die wenigsten Probleme haben.

Also:
1. Schritt
Über deine Dialogliste holst du die UniqueID des Personendokuments aus der zweiten DB.
2. Schritt
Über DBLookup holst du dann den Rest deiner Daten aus der 2. Datenbank. Als key dient hier die UniqueID aus Schritt 1.
Je nachdem wie die DBLookup-Ansicht aufgebaut ist, reicht hier EIN DBLookup. Dazu brauchst du in der 2. DB eine (versteckte) Ansicht, die in der 1. Spalte nach UniqueID soriert ist und in der 2. Spalte deine Feldwerte (durch ein beliebiges Trennzeichen getrennt) anzeigt. Hast du keine entsprechende Ansicht, brauchst du mehrere DBLookups.
3. Schritt (Annahme: es gibt eine Ansicht mit allen benötigten Feldwerten)
Aufteilung des DBLookup-Rückgabewertes


--- Zitat ---Allgemein wurde gesagt mehrere @DBLockups sind bezüglich der performance nicht gut!?

--- Ende Zitat ---
Annahme: Du willst 10 Feldwerte aus dem Personendokument holen.

Lösung 1:
10 DBLookups (ein DBLookup für jeden Feldwert) = 10 x Zugriff auf Server, 10 x Ansicht suchen, 10 x Dokument suchen, 10 x Dokument öffnen, 10 x Feldwert holen, 10 x Rückgabewert verarbeiten.

Lösung 2:
1 DBLookup (Rückgabe aller Feldwerte in einem String mit Trennzeichen) = 1 x Zugriff auf Server, 1 x Ansicht suchen, 1 x Dokument suchen, 1 x Rückgabewert verarbeiten.

Ich denke die Frage ist damit beantwortet ;-)

Gruß Stefan

Peter Klett:
Nein, verstehe das nicht als Angriff. Manchmal kommt man neben dem Tagesgeschäft etwas griffiger rüber, als es angemessen wäre ...

GetDocField soll wirklich rasend schnell sein, aber natürlich  nur innerhalb der Datenbank.

Die von mir skizzierte Lösung hat den Vorteil, dass Du mit zwei kürzeren Abfragen klar kommst.

Die erste Abfrage gibt Dir die Auswahlwerte zurück, mit Alias (z.B. der UniversalID)

Wert1|ID1
Wert2|ID2
Wert3|ID3
usw.

Diese Liste könnte sehr lang werden. Wenn Du dann auch noch sämtliche Felder in den Alias packst, die Du nachträglich auslesen willst, kannst Du ein Größenproblem bekommen.

Unabhängig vom Größenproblem kannst Du auch Daten in den Alias bekommen, die die Auswahl zerstören, z.B. zu lange Daten (bin mir nicht sicher, ob das ein Problem geben kann, meine aber, sowas schon gehabt zu haben).

Natürlich könntest Du auch ohne Alias arbeiten, wenn die Werte eindeutig sind. Würde ich trotzdem sein lassen, da Du mit Alias zwei wesentliche Vorteile hast:

1. Du benötigst nur eine Ansicht nach ID, um im zweiten Lookup alle relevanten Daten zu bekommen, auch wenn Du u.U. in einer anderen Auswahlliste auf einen anderen Wert gehst

2. Hast Du in den Werten unerlaubte Zeichen, kannst Du die so problemlos umwandeln. Z.B. Komma kannst Du vergessen. Hast Du eine Liste von Nachnamen und Vornamen, sähe die Liste so aus

Meier, Hans|ID1
Müller, Erwin|ID2

Das kannst Du nicht auswählen. Das Komma durch einen Punkt ersetzt gibt

Meier. Hans|ID1
Müller. Erwin|ID2

Das wird den Anwender nicht wirklich stören, und im zweiten Schritt holst Du Dir mit der ID sowieso die korrekten Daten.

Ich hoffe, dass sind ein paar brauchbare Anregungen ...

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln