Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: skywook am 13.06.04 - 22:10:49

Titel: GetAllDocumentsByKey
Beitrag von: skywook am 13.06.04 - 22:10:49
Kann ich eigentlich die gefundenen Docs von GetAllDocumentsByKey in einer Picklist oder einem Prompt anzeigen lassen (ohne diese vorher in einen Ordner zu verschieben). Wobei der User dann die Möglichkeit haben sollte, einen Eintrag auszuwählen.

Für einen Tipp wäre ich dankbar.
Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 13.06.04 - 22:23:21
Prinzipiell: ja.
Ohne jetzt tiefer zu überlegen:
Ich würde die aus der doc-Collection via einer Forall-Schleife den Dokumenten-Titel auslesen und in ein Array schreiben.
Das Array zeigst Du dann via uiws.Prompt in an, damit der User ein Dok auswählt.
Hab mir das jetzt nicht näher angesehen (gerade kein Notes-Client greifbar), aber damit kannst Du Dir dann das selektierte Doc greifen. Notfalls musst Du in das Array noch die UNID des Doks mitübergeben (mit langem Trennzeichen - z.B. einige Spaces - damit dies der User aus optischen Gründen nicht sieht) und holst Dir dann damit das selektierte Dokument.
Titel: Re:GetAllDocumentsByKey
Beitrag von: animate am 13.06.04 - 22:23:41
in einer eingebetteten Ansicht könntest du die anzeigen (Stichwort: ShowSingleCategory). Auswählen kann der Benutzer die auch. Ich weiß allerdings nicht mehr genau, ob du jetzt programmiertechnisch auf die ausgewählten Dokumente zugreigen kannst bzw. herausfinden kannst, welche ausgewählt sind.
Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 13.06.04 - 22:42:53
Wenn ich so mein Posting lese, habe ich seeeehr verkürzt geschrieben :-)

Daher nochmal Step by Step:
- Du hast mit GetAllDocumentsByKey eine Doc.-Collection, das ist schon mal fein
- Loope mit Forall durch diese Collection und schreibe den doc.Title(0) in ein Array. Da hängst Du noch gleich die UNID mit dran (& "-- (ein paar Spaces etc.) ---" & doc.UniversalID)
- mache nun ein uiws.Prompt. User wählt dann was aus.
- aus dem Rückgabewert ziehst Du Dir die UNID raus (Right - Funktion, du holst Dir die letzten 32 Ziffern). Mit GetDocumentByUNID holst Du Dir dann das vom User selektierte Dokument.


Titel: Re:GetAllDocumentsByKey
Beitrag von: skywook am 21.06.04 - 22:17:48
Wie bekomme ich den die Daten (dabei handelt sich nur um eine Feld der Doc-Collection) in einen Array damit ich diese in einem Prompt anzeigen kann?

Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 21.06.04 - 22:38:07
Indem Du durch Deine Collection loopst, z.B.

Code
Dim nCounter As Long

Set doc = dc.GetFirstDocument
nCounter = 1
While Not(doc Is Nothing)
   Redim Preserve strMeinArray(nCounter)
   strMeinArray(nCounter) = doc.MEINFELD(0) & "         " & doc.UniversalID
   nCounter = nCounter + 1
   Set doc = dc.GetNextDocument(doc)
Wend
Titel: Re:GetAllDocumentsByKey
Beitrag von: koehlerbv am 21.06.04 - 23:19:38
Zwei Anmerkungen:
Bei der (durchaus üblichen) Methode, für ein NotesUIWorkspace.Prompt ein Array zu bilden, muss man darauf achten, dass die 64k-Grenze für das Array nicht überschritten wird.

Das Redim Preserve ist bei der von Matthias vorgestellten Variante unnötig. Mit NotesDocumentCollection.Count kennen wir ja bereits die Dimension des erforderlichen Arrays, daher reicht ein
Redim strMeinArray (dc.Count - 1) (wenn Option Base 0 ist).

Bernhard
Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 21.06.04 - 23:26:04
daher reicht ein
Redim strMeinArray (dc.Count - 1) (wenn Option Base 0 ist).

Ähm, dann aber trotzdem mit "Preserve" oder?

Matthias
Titel: Re:GetAllDocumentsByKey
Beitrag von: koehlerbv am 21.06.04 - 23:33:47
Nö, wir müssen ja vorab nix "preserven" - wir pumpen die Daten ja erst nach dem Redim ins Array.

Bernhard
Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 21.06.04 - 23:37:00
Ach jetzt weiß ich was Du meinst.

Du setzt vorher den U- und LBound mit Redim ...(dc.Count), aber arbeitest nach wie vor mit dem Counter.
Klar, so macht das (auch performance-seitig) Sinn.

@skywook:
Ich hoffe wir haben Dich jetzt nicht zu sehr verwirrt  :)
Titel: Re:GetAllDocumentsByKey
Beitrag von: koehlerbv am 21.06.04 - 23:48:16
Über Performance brauchen wir uns in diesem Kontext m.E. keinen Rüssel zu machen - wir können so ja sowieso nur 64k füllen  ;)
Zitat
@skywook:
Ich hoffe wir haben Dich jetzt nicht zu sehr verwirrt
Ooops - wohl doch. Vorhin war er noch da, jetzt hat entweder Mutti geschimpft, oder er hat sich 'ne Bolus-Injektion Whiskey gesetzt, damit er doch noch schlafen kann  ;D

Was mir aber noch nicht so gefällt, ist das Array, das auch gleich die UNID mit aufnimmt. Wenn die anzuzeigenden Begriffe eineindeutig sind, dann sollten die UNIDs in einem zweiten, gleichdimensionierten Array liegen und nach Auswahl abgegriffen werden.
Basteln kann man aber auch mit Aliasen "Begriff | UNID" (Feld entsprechend füllen und dieses dann für den Prompt angreifen, danach ggf. wieder löschen).

Bernhard
Titel: Re:GetAllDocumentsByKey
Beitrag von: TMC am 22.06.04 - 00:14:37
Wäre auch eine schicke Alternative, Bernhard.

Klar, was da immer kommen kann sind die 64K die vielleicht doch erreicht werden.

Sollte das evtl. so sein, dann doch lieber mit einem Folder lösen und diesen dann via PickListStrings Methode anzeigen.
Titel: Re:GetAllDocumentsByKey
Beitrag von: koehlerbv am 22.06.04 - 00:17:50
Wenn die 64k-Grenze droht, dann bleibt nix als ein persönlicher Ordner, glaube ich. Und der schadet ja auch nix  :)

Bernhard
Titel: Re:GetAllDocumentsByKey
Beitrag von: skywook am 22.06.04 - 07:49:31
Jetzt bin ich doch leider etwas verwirrt. Könntet Ihr mir ein kleines Beispiel einstellten?
Das Alternative mit dem Ordner ist mir klar. Aber das mit dem Redim habe ich nicht ganz verstanden.
Titel: Re:GetAllDocumentsByKey
Beitrag von: Axel am 22.06.04 - 08:25:02
Hi,

hier mal ein kleines Beispiel:

...

Dim strArray As String()
Dim idx As Integer
...

Set collection = view.GetAllDocumentsByKey(...

Redim strArray(collection.Count)  'Dimensionieren des Arrays
'Füllen des Arrays
For idx = 1 to collection.Count
  Set doc = collection.GetNthDocument(idx)
  strMeinArray(idx) = doc.MEINFELD(0) & "        " & doc.UniversalID
Next
...


So könnte das aussehen.

Axel
Titel: Re:GetAllDocumentsByKey
Beitrag von: skywook am 22.06.04 - 09:53:05
Danke! Funktioniert!
Habe noch das Problem: Im Prompt wird zusätzlich, zu den Daten, noch eine Leerstring angezeigt.
Titel: Re:GetAllDocumentsByKey
Beitrag von: Axel am 22.06.04 - 10:11:33
Hi,

das liegt am Handling des Arrays. der Index fängt immer bei 0 an.

Passe deinen Code wie folgt an:

Redim strArray(collection.Count-1)  'Dimensionieren des Arrays
'Füllen des Arrays
For idx = 0 to collection.Count-1
  Set doc = collection.GetNthDocument(idx+1)
  strMeinArray(idx) = doc.MEINFELD(0) & "        " & doc.UniversalID
Next
...

Axel